ブロックチェーン/レベル IV · プロトコルを深く知る/4.2 アップグレード/レッスン 3
部分署名済みトランザクション(PSBT)
見知らぬ相手でも、デバイスが何に署名するのかを検証できるコンテナ
用意するものPSBTに対応したハードウェアウォレット「decodepsbt」コマンドが利用可能なBitcoin Coreソフトウェアエアギャップされたコンピューターまたはデバイス
問い
- なぜ未完成のトランザクションは、完成したものよりも多くのデータを必要とするのでしょうか?
- なぜかつては、ハードウェアウォレットごとに未署名トランザクション用の独自フォーマットが必要だったのでしょうか?
- 最初のテンプレートが作成された後で、ユーザーはどのようにして新しい出力を追加できるのでしょうか?
探究
- 標準的な生のトランザクションは、ブロードキャスト可能なコンパクトな最終成果物です。2017年にアンドリュー・チョウがBIP174で定義したPSBT(Partially Signed Bitcoin Transaction)はこれとは異なり、未完成のトランザクションと、後でそれを完成させるために必要なすべてのメタデータを格納するコンテナです。PSBTには3つの状態があります。完全に構築されているが未署名の状態、一部の入力は署名済みで残りが保留中の部分署名状態、そしてすべて署名済みで生の16進数データとして取り出せる状態です。このフォーマットにより、信頼できないプログラムが作成したテンプレートを、ネットワークにアクセスする必要のない信頼できるデバイスで検証できます。
- PSBTのワークフローでは、Creator、Updater、Signer、Combiner、Finalizer、Extractorの6つの役割が定義されています(バージョン2では7つ目のConstructorが加わります)。Creatorがトランザクションを作成した後、Updaterが、支出される以前の出力、そのスクリプト、鍵の導出パスを付加します。これによりSignerは、金額や手数料を含め、自分が何を承認するのかを正確に確認できます。メタデータを明示的に含めるため、ファイルは標準的なシリアライズ形式よりも大幅にコンパクトさを欠きますが、侵害されていたり悪意のあるソフトウェアが動作していたりする可能性のある、インターネットに接続されたノードにつなぐことなく、ハードウェアウォレットがトランザクションの構造を検証できるようになるため、これは不可欠です。
- 相互運用性こそがPSBTの最大の原動力です。この規格が登場する前は、ウォレットソフトウェアごとにホットウォレットとコールドストレージデバイスの間でデータを受け渡す方法に互換性がなく、ベンダーロックインが生じていました。BIP174は共通言語を確立することでこれを解決しました。現在では、Sparrowのようなコーディネーターが、USB、SDカード、QRコードを使って、異なるメーカーの署名デバイスに同じPSBTを渡すことができます。これにより、ベンダーをまたいだマルチシグが現実的になりました。各署名者がファイルに自分の署名を追加し、秘密鍵がデバイスの外に出ることは一切ありません。
- PSBTのバージョン0には、構造上の厳しい制約があります。一度作成されると、グローバルな未署名トランザクションは固定されてしまうのです。バージョン0は完全な未署名トランザクションをグローバルフィールドに格納するため、作成後に入力や出力を追加することはできません。このため、複数当事者による複雑なトランザクションを構築し始めた後で、お釣り用の出力が追加で必要だと気づいた場合、それまでのプロセスをすべて破棄し、新しいテンプレートで一からやり直さなければなりませんでした。
- BIP370は、この変更不可能性の問題を解決するためにPSBTバージョン2を導入しました。バージョン2では、特定の入力や出力に関するすべての情報が、ローカルデータとグローバルデータに分散されるのではなく、その入力や出力のフィールドにまとめられます。これにより参加者は、PSBTの「変更可能」フラグが許す限り、作成後でも入力や出力を追加できます。1つの入力を見れば、それに関連するすべてのデータがその場に含まれているため、共同作業のプロセスが効率化され、ハードウェアデバイスによる検証が簡単になり、状態の不整合が生じるリスクも減ります。
- 実際の用途は、ハードウェアウォレットでの署名から、payjoinやcoinjoinのような協調型トランザクションまで多岐にわたります。後者では、全員が署名するまで参加者間でPSBTをやり取りします。一般ユーザーにとっては、スマートフォンでトランザクションを作成し、ハードウェアウォレットを接続してオフラインで安全に署名し、最終的な生のトランザクションを取り出してブロードキャストできることを意味します。その際、各デバイスは自分が何に署名するのかを正確に確認できます。
重要な事実
- BIP174はPSBTのバージョン0を定義しており、作成後に変更できないグローバルな未署名トランザクションフィールドを必要とします。
- BIP370はバージョン2(PSBTv2)を定義しており、データを特定のフィールドにまとめることで、作成後に入力や出力を追加できるようにしています。
- PSBTは、署名デバイスによる検証のために多くのメタデータを格納するため、意図的に標準的なシリアライズ形式よりもコンパクトではない作りになっています。
- 当初のワークフローには、Creator、Updater、Signer、Combiner、Finalizer、Extractorの6つの役割があります。
- PSBTは、さまざまなウォレットソフトウェアとハードウェア署名デバイス間の相互運用性を実現します。
- Sparrowのようなコーディネーターと、Coldcardのような署名デバイスは、ファイルやQRコードを使ってPSBTをやり取りします。
演習 九・六・三・一
9集める最初の作成から最終的なブロードキャストまで、ビットコインのトランザクションのライフサイクルに関わる異なる役割や状態を9つ挙げてください。
6まとめる9つを、データの追加、構造の検証、暗号署名の付与、各参加者の寄与の統合、フォーマットの完成、結果のブロードキャストのいずれに関わるかに基づいて、6つのカテゴリーに分類してください。
3絞り込む6つのグループを、セキュリティと相互運用性を確保するためにあらゆるトランザクション管理システムが果たすべき核心的な機能3つに絞り込んでください。
1結晶化する未完成のトランザクションが完成したものよりも多くのデータを必要とする理由を、1文で説明してください。
事実確認
日付、数字、主張は、下記に記載された公表資料と照合して確認しました。