MSTR Cat

ブロックチェーン/レベル IV · プロトコルを深く知る/4.1 Script/レッスン 7

Segregated Witness(SegWit)とトランザクション展性

不安定なID、分離された署名、そしてLightningへの道を開いた修正

用意するものJSON出力機能を備えたブロックエクスプローラーSegWit導入前のP2PKHトランザクションの16進数文字列(2016年以前のもの)SegWit以降のP2WPKHトランザクションの16進数文字列

問い

  1. なぜ見知らぬ第三者が、トランザクションの有効性を損なうことなく、その識別子を変更できたのでしょうか?
  2. 署名をハッシュの対象から外しながら、コンセンサスによる保護を維持したまま、どのようにトランザクション展性を解決するのでしょうか?
  3. ブロックウェイトとは何でしょうか? また、ウィットネスデータを割り引いて計算することで、なぜ容量が増えたのでしょうか?

探究

  1. SegWit以前、トランザクションID(txid)は、署名を含むトランザクション全体に対するダブルSHA-256ハッシュでした。第三者は、例えば署名のs値を反転させたり、プッシュの方法を変えたりすることで、署名を無効にすることなく再エンコードでき、同じ支払いに対して新しいtxidを生み出すことができました。このトランザクション展性は、未承認トランザクションの連鎖を壊しました。アリスの子トランザクションが親トランザクションをIDで参照していた場合、親が改変されると子は孤立してしまい、支払いを追跡するウォレットや取引所に混乱をもたらしたのです。
  2. Mt. Goxは2014年2月、経営破綻に至る過程での社内の混乱を説明するためにこの仕組みを挙げましたが、後の分析では、報告された損失のうちこれによるものはごくわずかだったことが示されています。ECDSA署名はバイト表現が本質的に可変であるため、この脆弱性は残り続けました。第三者が、そしてBIP66とlow-Sルールの導入後は主にマイナーが、署名を書き換えることができたのです。この不安定性のため、承認前の時点でチャネルの状態が特定の予測可能なトランザクションIDに依存する、Lightningのような双方向ペイメントチャネルを構築することは安全ではありませんでした。
  3. Segregated Witness(BIP141)は2017年8月24日、ブロック481,824で有効化され、ウィットネスデータをトランザクション本体から分離することでこの問題を解決しました。txidはウィットネス以外のフィールドのみをハッシュするようになり、署名エンコーディングの変更による影響を受けなくなりました。ウィットネスは生のトランザクション内で別個の構造として残りますが、識別用のハッシュからは除外されます。第三者はもはやtxidを変更できず、一方で署名は引き続きコンセンサスによって完全に検証されます。
  4. ウィットネスデータは、各ブロックのコインベーストランザクションで参照されるマークルツリーを通じてコミットされるため、ブロックを無効にすることなく削除や改変を行うことはできません。txidからは分離されているものの、ウィットネスは新たな「ウェイト」という指標のもとで引き続きブロックサイズ制限の対象となり、上限は1ブロックあたり4,000,000ウェイトユニットです。ウィットネス以外のデータは1バイトあたり4ウェイトユニット、ウィットネスデータは1バイトあたり1ウェイトユニットとして数えられるため、署名の多いトランザクションほど収まりやすくなります。
  5. BIP143は、入力の多いトランザクションで生じていたハッシュ計算コストの二次関数的な増加を解消する、新しい署名ハッシュ方式を導入しました。BIP141は、新規アドレスの標準となったバージョン0のウィットネスプログラムであるP2WPKHとP2WSHを定義し、BIP144はウィットネスデータをピア間でやり取りする方法を規定しました。これらの変更はトランザクション展性を解決しただけでなく、既存のコンセンサスルールを壊すことなくスクリプトを進化させられる、バージョン付きのウィットネスプログラムの枠組みを確立することで、Taprootのような将来のアップグレードの土台も築きました。
  6. ブロックエクスプローラーを開き、最近のP2WPKHトランザクションを探して中身を確認してみましょう。署名は入力のscriptSigではなく別の「witness」フィールドに置かれており、txidは署名を含めずに計算されています。これを、署名がscriptSigに含まれ、そのためtxidの計算に反映される2016年のSegWit以前のP2PKHトランザクションと比較してください。この見た目の分離から、ウィットネスデータがもはやトランザクションの識別子に影響しないことが確認できます。

重要な事実

  • Segregated Witnessは2017年8月24日、ブロック481,824で有効化されました。
  • トランザクション展性により、第三者はECDSA署名のエンコーディングを変更することで、トランザクションを無効にすることなくtxidを変更できました。
  • BIP141は、署名をtxidの計算から除外される別個のウィットネス構造に移しました。
  • ブロックウェイトの上限は4,000,000ユニットで、ウィットネスデータは非ウィットネスデータに比べて4分の1に割り引いて計算されます。
  • BIP143は、入力の多いトランザクションにおけるハッシュ計算コストの二次関数的な増加を解消する署名ハッシュ方式を導入しました。
  • BIP141はバージョン番号付きのウィットネスプログラム(バージョン0:P2WPKHとP2WSH)を導入し、Taprootのような後続バージョンの余地を残しました。

演習 九・六・三・一

9集める2017年以前にトランザクション展性がもたらした技術的・経済的な影響を9つ挙げてください。それぞれについて、影響を受けたのがユーザー、ウォレット、取引所、プロトコル開発者のいずれかを記してください。
6まとめる9つの影響を、IDの不安定性、未承認トランザクションの連鎖の断絶、取引所の混乱、ペイメントチャネルの実現不能、署名エンコーディングの可変性、コンセンサスによる保護の欠落という6つのカテゴリーに分類してください。
3絞り込むSegWit以前にトランザクション展性がスケーラブルなペイメントチャネルを妨げていた核心的な理由を、6つのカテゴリーから3つに絞り込んでください。
1結晶化するウィットネスデータをtxidのハッシュから分離することで、IDの安定性の確保と将来のスクリプトアップグレードの実現がどのように同時に達成されるのかを、1文で書いてください。

事実確認

日付、数字、主張は、下記に記載された公表資料と照合して確認しました。

インタラクティブ版で開く →

EN PT ES ZH KO RU DE FR MS