Taproot, and Schnorr, and SIGHASH_NOINPUT, oh my !
Pieter Wuille
SF Bitcoin Devs
July 9, 2018
Bitcoinスクリプトシステムの改善
-
一般(General)
-
署名(Signatures)
-
構造(Structural)
-
実用化(Practical)
スクリプトシステムの目標
取引出力(Tx Output)を使用する条件の指定
-
プライバシー(Privacy)
-
スペース効率(Space efficiency)
-
計算効率(Computational efficiency)
関連するすべての(All related)
証明システム(Proof system)
実行と検証(Execution vs verification)
署名システムの改善
-
シュノア(Schnorr)
-
集約(Aggregation)
-
シグハッシュ(Sighash)
シュノア署名(Schnorr signatures)
- ECDSAと同じ条件で署名を安全に提供
- sR = mG + (R.x)P の代わりに sG = R + H(R,P,m)P
- 非可鍛性(Non-malleable)
- 新しい署名方式:固定64バイト、バッチ検証可能
- 新しいBIP草案を参照(See new BIP draft)
線形性! 署名の合計は鍵の合計に対する署名
- n-of-n、k-of-n、どのポリシーも1-of-1のように見える
- 説明する必要がない(Non accountable)
- 複数の署名ラウンドが必要
- 対話式キー設定(MuSigを除く)
Adapter signatures
クロス入力署名集約
- Schnorr signatruesとは異なる
- プレーンなpubkeyセキュリティを備えたマルチ署名方式が必要
- BNo6シグネチャ、またはMuSigを使用できます
- トランザクション検証モデルへの変更
- スクリプトの検証結果はtrue / false + pubkeysのリスト
- すべてのオンライン取引時に単一の署名
Softfork compatibility
Coinjoin incentive
All pubkeys still visible
新しいシグハッシュモード
Bitcoinは現在6つのモードしかありません
- サイン出力:all、none、またはequal index one
- サイン入力:すべて、または費やされたものだけ
- 入力に全く署名しない方法はありません
SIGHASH_NOINPUT(BIP118):txidではなく、スクリプトに署名
- 繰り返し可能(Replayable!)
- Eltooの決済チャネル; 罰せずに正しい(correct instead of punish)
委任? 消費する権利をサインする能力
スクリプトの構造改善
P2SH
マールク木(Merkle branches)
合意枝(Unanimity branches)
Taproot
Graftroot
P2SHスクリプトの確認(2012)
実際のスクリプトを出力から入力に移動しました
- すべての出力が同じに見えます! (シングルキーのものを除く...)
- 送信者は受信者のポリシーを気にしません
- UTXOサイズの影響
あなた使用したときに完全なスクリプトを明らかにする
スクリプトのMerkleブランチ(“MAST”)
通常スクリプトは、いくつかの、キー、ロックタイム、ハッシュロックの単なるOR
なぜすべての可能性を明らかにするのか?
すべての論理和をMerkleツリーに入れる
- 出力はMerkleのルート
- 入力は:スクリプト、パス、署名
サイズは、O(log n)
ただ、枝が正しいかを表現
合意枝を持つMerkleの木
具体的な問題では、「誰もが同意する」ブランチが可能です
すべてのトップブランチが同意する
裁判所モデル
Schnorr multisigでさらに良くなる
Taproot!
基本的な考え方:Q = P + H(P、S)G
- 出力:Q
- 鍵の支出:サイン(Q)
- スクリプトの使用:P、S、入力
すべての出力:P2SHまたはP2PK
どちらがアクティブであるかを明らかにしない
合意枝:シングルSIG
Graftroot
Merkleツリーの代わりに、代表(delegation)を使用してください!
スクリプトに署名するトップレベルのキー(「すべて同意」)
支出:
- 鍵支出:sig(key、tx)
- スクリプトの支出:sig(key,script)、スクリプト、入力
ブランチの数は、O(1)
本質的に相互作用のあるキー設定
単純なツリーよりも半分の集約で良い
実用化
すぐに開発することができない多くのアイデア
一度にすべてを行うインセンティブ
- 異なる構造は、segwitスクリプトバージョンを使う事が可能
- 匿名性セットを減らす
- ソフトフォークにわたってシグネチャ集約が機能しない
スクリプトシステムの、実験 vs 制作
私の初期の焦点:SchnorrとTaproot
- すべての協力的な支出をただ一つのsigにする
- 構造改善後の集約作業



