LoginSignup
2
1

More than 5 years have passed since last update.

Taproot, and Schnorr, and SIGHASH_NOINPUT, oh my !

Last updated at Posted at 2018-07-24
1 / 16

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バイト、バッチ検証可能

線形性! 署名の合計は鍵の合計に対する署名

  • 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)

ただ、枝が正しいかを表現

MAST.png


合意枝を持つMerkleの木

具体的な問題では、「誰もが同意する」ブランチが可能です

すべてのトップブランチが同意する

裁判所モデル

Schnorr multisigでさらに良くなる

Merkle trees with unanimity branch.png


Taproot!

基本的な考え方:Q = P + H(P、S)G

  • 出力:Q
  • 鍵の支出:サイン(Q)
  • スクリプトの使用:P、S、入力

すべての出力:P2SHまたはP2PK

どちらがアクティブであるかを明らかにしない

合意枝:シングルSIG

Taproot.png


Graftroot

Merkleツリーの代わりに、代表(delegation)を使用してください!

スクリプトに署名するトップレベルのキー(「すべて同意」)

支出:

  • 鍵支出:sig(key、tx)
  • スクリプトの支出:sig(key,script)、スクリプト、入力

ブランチの数は、O(1)

本質的に相互作用のあるキー設定

単純なツリーよりも半分の集約で良い

Graftroot.png


実用化

すぐに開発することができない多くのアイデア

一度にすべてを行うインセンティブ

  • 異なる構造は、segwitスクリプトバージョンを使う事が可能
    • 匿名性セットを減らす
  • ソフトフォークにわたってシグネチャ集約が機能しない

スクリプトシステムの、実験 vs 制作

私の初期の焦点:SchnorrとTaproot

  • すべての協力的な支出をただ一つのsigにする
  • 構造改善後の集約作業

Thank you!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1