目次

    全ての目次を見る
  1. 【Segwit】とは?
  2. ビットコインの課題①マリアビリティ問題(トランザクション展性)
  3. ビットコインの課題②スケーラビリティ問題
  4. ビットコインに実装された【Segwit】とは
  5. 【Segwit】の懸念点
  6. 【まとめ】Segwitとは
Large

仮想通貨ビットコインやブロックチェーンの仕組みを調べてみると、『Segwit(セグウィット)』という言葉を見かけることがあると思います。

Segwitは、ビットコイン(BTC)に実装されている技術の一つです。

この記事にたどり着いた方は、

「Segwitは聞いたことがあるけどどんな仕組みなの?」
「Segwitを実装したことで何が変わるの?」

などと思われているのではないでしょうか。

この記事では『Segwit』を実装することになった経緯や、仕組みなどをわかりやすく解説していきます。
まず初めに、Segwitの概要(経緯と仕組み)を簡単にご説明します。

Segwitとは、取引データの改ざんへの対策と、ブロックチェーンの1ブロックに格納できるデータ量増加を、同時に実現できる技術です。

Segwitは2017年8月に、すでにビットコイン(BTC)に導入されていますが、導入される以前はビットコイン(BTC)は、以下の2つの問題を抱えていました。

  • マリアビリティ問題(トランザクション展性)
    第三者や悪意ある受取人が取引データを改ざんし、「二重取引」を起こすことができる脆弱性。
  • スケーラビリティ問題
    ビットコイン利用者の増加により、1MBに設定されたブロックに取引データが格納できない問題

Segwitは、改ざんできてしまう部分を取引データから分離させ別の場所で管理することで、改ざんを不可能にするために考案された技術です。(マリアビリティ問題の解決)

そしてその一部を取引データから分離させることで、ブロックに格納できるデータ量を増やすことができることも利点となり(スケーラビリティ問題の解決)、ビットコインに実装されました。

以上の内容を、次の項目から詳しく解説していきます。
まずはビットコイン(BTC)が抱える2つの問題点を確認し、そのあとSegwitが果たしている役割を見ていきましょう。

まずはビットコインが抱えていた問題点の一つ目、マリアビリティ問題(トランザクション展性)についてご説明します。

マリアビリティ問題とは、第三者や悪意ある受取人が取引データを改ざんし、「二重取引」を起こすことができてしまう脆弱性を指します。(トランザクション展性とも呼ばれます)

ではなぜ、取引データを改ざんすることができてしまうのでしょうか。

まず、ブロックチェーンのブロックの構造を理解する必要がありますので、詳しくご説明していきます。

ブロックの中にあるトランザクション(取引データ)には、アウトプットインプットというものがあります。
そして、そのアウトプットとインプットをハッシュ化(暗号化)したものを、トランザクションIDと呼びます。

  • アウトプット
    誰に送るのかを指定する鍵で、送り先を記載したデータのこと。
  • インプット
    誰から送られたのかを指定する鍵で、送金元を記載したデータのこと。
  • scriptPubKey
    アウトプットの中に含まれる、ビットコイン送信先のアドレスをロックする署名のこと。
  • scriptSig
    インプットの中に含まれる、scriptPubKeyでロックされた条件を解除する署名(アンロック)のこと。

インプットの中に含まれるscriptSigは、取引内容を変更せずに書き換えることが可能な仕様になっています。(これはブロックチェーンのバグだとも言われています)

例えば、AさんからBさんに1BTCを送金するとします。
Bさんは悪意ある受取人で、scriptSigの「OP PUSHDATA 48」を「OP PUSHDATA 0048」のように書き換えてしまいます。

(OP PUSHDATA 48とは、後に続く48バイトの文字列をメモリに格納せよという命令です。48バイト分の電子署名のデータがメモリに格納されます)

トランザクションIDはアウトプットとインプットをハッシュ化したものですが、元のデータが1文字でも変わると、ハッシュ値は全く違う値になります。

BさんがscriptSigを「48」から「0048」に変更してしまうと、トランザクションIDも全く違う値に変わってしまいます。
しかしこれはどちらも同じ意味として処理されてしまうのです。

そのため、そのままマイニングが行われると取引内容は変更されずに、変更されたトランザクションIDに送金が完了してしまいます。

AさんのトランザクションIDでは送金が失敗したようにみえているため、Bさんが元のトランザクションID宛に再度送金の依頼を出すと、Aさんも再び送金指示を出してしまいます。

このようにして二重取引が発生し、それを何度も繰り返し行うことができてしまうということが、マリアビリティ問題と呼ばれるビットコインの課題でした。

続いて、ビットコイン(BTC)のスケーラビリティ問題についてご説明します。

スケーラビリティ問題とは、トランザクション(取引データ)の増加とブロック容量が1MBに設定されていることで生じた問題です。

具体的には、以下の問題が生じました。

  • 取引の承認の遅延
  • 取引承認の遅延による手数料の高騰

ビットコイン(BTC)では、取引量の増加によって、承認に時間を要し、送金完了に数日を要する時期もありました。

そしてそのような取引承認の遅延によって、手数料の高騰も発生しました。(手数料が高く設定されているものから順番に処理されるため)

スケーラビリティ問題の解決のためには「一定時間に承認できる取引データ量を増やす」必要があります。
これに対してさまざまな施策が提唱され、その中の一つ「Segwit」が、ビットコインに採用されました。

(スケーラビリティ問題に関する詳しい説明は、以下の記事をご参照ください)

ビットコインが抱える2つの問題点をお伝えしましたが、それを解決するためにビットコインコア開発者から考案されたものが「Segwit」です。

Segwit(Segregated Witness)とは、scriptSig(署名)をトランザクションから分離させ、取引データの改ざんを防ぐことと、1MBのブロックに格納できるデータ量を増やすための仕様変更のことをいいます。

先ほどマリアビリティ問題のところでご説明したように、ブロックの中にはトランザクションの中に含まれるscriptSigという署名があります。

そのscriptSig(署名)をトランザクションから分離させ、winessという領域に移行します。

Segwit(セグウィット)実行後

このようにSegwitを導入することで、scriptSigが別の(witness)領域に保管されるため改ざんが不可能になり、マリアビリティ問題が解決します。

そして、1MBのブロックに格納できるデータ量も増やすことができるため、スケーラビリティの問題も改善するということです。

またSegwitの導入で、現在試験段階にあるライトニングネットワークといったオフチェーン(本来ブロックチェーン上で行う送金や取引を、ブロックチェーン外で行うこと)の技術も導入が可能になります。

ライトニングネットワークとは、第三者を経由することでネットワークで直接結びついていない者同士が、安全で即時性のある送金が可能になる技術です。

第三者を経由するため、scriptSigの書き換え(マリアビリティ問題)の発生が懸念されていましたが、Segwitの実装によって防ぐことができます。

(ライトニングネットワークの詳細については、こちらの記事をご覧ください)

Segwitはよくスケーラビリティ問題の改善策として注目されますが、スケーラビリティのための手段にとどまらず、ビットコインが多くの人に使用され普及するためには、必要な技術であると判断され実装されました。

そんなSegwitにも懸念されている点があります。

中国の大手マイナー集団は、以下の理由からSegwitの実装を反対していました。

  • Segwitは最大でも1.7MB程しかブロックの容量を拡大できないと考えられ、将来のユーザー数の増加による対応が困難な可能性がある
  • Segwitは複雑で後戻りできず、いちど取り込んでしまうと、ビットコインのコードに将来にわたって、この複雑な仕様が残り続ける

その他にも、Segwit実装後は高性能マイニング専用ツールである「ASICBoost」が使用できないことが、大手マイナー集団が反対する大きな理由とも言われています。

ビットコインのコア開発者や、大手マイナー集団による意見の対立は長期化し、Segwitの実装までには長い時間を要しました。

「Segwitの導入によってスケーラビリティ問題が解決されうるか」を主な論点として、SegWit推進派と反対派それぞれが提案していたのは、以下の案です。

  • ブロックサイズの拡大
    ブロックサイズを1MBから8MBに増やし、格納するデータ量を増やすハードフォーク。
  • UASF
    自動的にSegwitに対応していないブロックは正当なブロックとして認めず、すべて拒否する仕組み。 bitcoin core派の開発者が、SegWitの導入を強行するために提案した。
  • UAHF
    ブロックサイズの上限1MBを撤廃して、調整可能なブロックサイズにする仕組み。
  • Segwit2X
    Segwit導入後、ブロックサイズを1MBから2MBに拡大するハードフォーク。一度はSegwit2Xの導入が合意決定されたものの、実装はされていない。

最終的にどちらも意見を譲らず、大手マイナー集団によりビットコインからのハードフォーク(互換性がなく、ブロックチェーンの永続的な分岐を引き起こす仕様変更)で、ブロックサイズを8MBに拡大したビットコインキャッシュ(BCH)を誕生させました。

一方ビットコインは、コア開発者らにより2017年8月にSegwitを実装させます。

(ビットコインキャッシュ (BCH)の詳細については、以下の記事をご参照ください)

ビットコインに実装されている「Segwit」をご紹介しました。

Segwitとは、scriptSig(署名)をトランザクションから分離させる技術のことで、以下のような特徴があることがわかりました。

  • scriptSigの改ざんが不可能になる(マリアビリティ問題の改善)
  • 1MBのブロックに格納できるデータ量を増やすことができる(スケーラビリティ問題の改善)
  • ライトニングネットワークなどのオフチェーンの技術が導入できる

しかし、Segwitのブロックの容量拡大は限定的であり、将来のユーザー数の増加により対応が困難になる可能性があることは、引き続き懸念事項としてあげられます。

Segwit導入によって実現可能となった、ライトニングネットワークなどの技術の導入も提案されており、今後の対応が注目されます。