25歳海外駐在員の暗号通貨ルポ

25歳海外駐在員の暗号通貨ルポ

25歳の東南アジア某国に居住する駐在員。Bitcoinなどの暗号通貨をメインに、英語や駐在生活に関して情報発信中。

Segwitの効果 Third Party Malleabilityへの対応

Segwitが2016年11月15日に公開され、95%以上のマイナー(採掘者)がSegwit導入版のBitCoinプログラムを承認した場合、SegwitがBitCoinの世界に導入されます。本日時点(2016年12月31日)では約30%のマイナーが承認した状態で、SegWitの導入にはもうしばらく時間がかかりそうです。

bitcoincore.org

 

Segwitの目的は大きく二つあります。ひとつはThird Party Malleability(別名、Transaction Malleability、トランザクション展性)と呼ばれる脆弱性への対応、もうひとつはScallability問題への対応です。

 

BitCoin界では後者のScallability問題への対応が大きく取りざたされていますが、一つ目のThird Party Malleability問題への対応も2015年に対応しようとして失敗した経緯があり、今回対応が成功するかどうかは非常に重要な節目となります。

 

今回の記事では、Third Party Malleabilityへの対応にフォーカスして話をすすめます。

 

Third Party Malleabilityとは

BitCoinトランザクションの基礎の基礎はこちらにまとめていますので、参照してください。

 

cryptocoin.hatenablog.com

 

さて、BitCoinトランザクションはそのままでは扱いづらいため、トランザクションにSHA256と呼ばれる手法で256桁の一意な識別子(ハッシュ値)を付与しています。この識別子のことを、transaction id、略して"txid"と呼びます。なお、ハッシュの特徴として、元となるデータが少しでも変更されると、ハッシュ値も大きく変わる性質があります。

 

Third Party Malleabilityはトランザクションの一部分に誰でも変更を加えられることができてしまう脆弱性のことをさしています。ただし、受取人や金額は変更できず、変更できる部分は取引とは直接関係しない部分になります。しかし、トランザクション自体は変更されてしまっているため、そのハッシュ値であるtxidは変更されてしまいます。

 

受取人や金額は変更できないことから、すべての人が信用できる状態であれば問題となりにくいですが、以下のような場合が問題になります。

bitcoincore.org

 

if Alice pays Bob in transaction 1, Bob uses that payment to pay Charlie in transaction 2, and then Alice’s payment gets malleated and confirmed with a different txid, then transaction 2 is now invalid and Charlie has not been paid. If Bob is trustworthy, he will reissue the payment to Charlie; but if he isn’t, he can simply keep those bitcoins for himself.

 

AliceがBobにTransaction1で支払いを行った後、BobがCharlieにTransaction1で支払われたBitCoinを使用してTransaction2の支払いを行ったとする。このとき、Aliceの支払い(Transaction1)が変更され、txidが変更された場合、Transaction2は無効となり、Charlieへの支払いがなかったことになってしまう。もし、Bobが悪意をもっていなければCharlieに再支払いをするだけであるが、Bobが悪意を持っていた場合、BobはCharlieへの支払いをなかったこととしてAliceから送られたBitCoinを保持し続けることができる。 

 

Third Party Malleabilityへの対応

現在のトランザクションは2つの部分からなっており、ひとつはトランザクションそのもの、つまり受取人や金額に関する情報部分、もうひとつはBitCoin送信者の署名部分に分けられます。

 

Third Party Malleabilityで変更されうる(Malleable)箇所は、後者の署名部分のみであるため、この署名部分をトランザクションから切り離し、Witnessと呼ばれる領域に移すことが対応のポイントとなります。

 

この対応が承認された場合は、Third Party Malleabilityの脆弱性はなくなるため、BitCoin取引の安全性が高まります。また、この対応には副次的な効果もあり、トランザクション量を削減できることから、1ブロックに詰め込むことができるトランザクション量を増やすことができ、BitCoinの取引量が増えた場合でも取引が停止しないようにすることができるようになります(Scallability問題)。

 

ちなみに以前にもこの問題に対応しようとしたことはありましたが(BIP62)、このときは考えられる攻撃をリストアップして、それに対して個別にSolutionを検討するというアプローチをとったため、他の攻撃手法が開発された場合防ぎきれないという問題点があり、採用にはいたりませんでした。今回のアプローチはより根本的な解決策であるため、今回のアップデートが承認されることを願います。

 

BIP62に関するGitHubの情報

github.com

 

参考

www.coin-portal.net 

bitcoinmagazine.com