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にする
- 構造改善後の集約作業