Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ブロックチェーンへのコミットメントの記録方法

 ブロックチェーンへのコミットメントの記録方法

GBECの解説動画の資料です:
https://goblockchain.network/2021/06/blockchain_commitment/

C403a9e0b7bfed4c94020220b5ab89f7?s=128

shigeyuki azuchi

June 10, 2021
Tweet

Transcript

  1. ブロックチェーンへの
 コミットメントの記録方法


  2. コミットメントとは?
 ある値を秘密にしたまま、その値にコミットできる暗号プリミティブ
 値は、それが変更されないようコミットされた後に明かされる
 
 さまざまな暗号プロトコルで利用されている:
 • ゼロ知識証明
 • MuSig
 •

    Verifiable Secret Sharing
 • HTLC
 • Confidential Transaction
 
 
 コミットメントスキームを構築する手法: 
 
 • 暗号学的ハッシュ関数
 • Pedersen Commitment
 (離散対数問題)
 

  3. 2 OP_RETURNを使ったコミットメントの記録
 OP_RETURN→任意のデータの記録が可能なBitcoinのopcodeの1つ
 
 OP_RETURN <任意コミットメント値>
 
 OP_RETURN(データ)を含むトランザクションをブロックチェーンに
 記録することで、データの存在証明などに利用可能。
 


    大量のデータの記録や手数料の節約のため、
 Merkle Tree化してルートハッシュのみを記録するというアプローチも。
 
 https://opentimestamps.org/
 
 

  4. 3 Pay to Contract
 Pay to Contractは契約への支払いを通じたコミットメント
 支払いと契約(ドキュメント)の記録を同時に行う
 
 


    
 
 契約ドキュメント ボブの公開鍵
 Pub B = x B G H(契約 || Pub B ) Pub = H(契約 || Pub B )G + Pub B 対応する秘密鍵は、 
 H(契約 || Pub B ) + x B 契約に基づいた支払い、支払いと記録をアトミックに行いたい場合に、
 支払い先のアドレスを契約データと相手の公開鍵から導出する。
 
 オンチェーン上は通常の支払い(P2PKH)なので、
 余分なオンチェーンスペースを消費しない。
 ※RGBなどの拡張プロトコルで OP_RETURNを使わずにPay to contractを使用するケースも
  5. 4 Sign to Contract
 コミットメントをアドレスではなく、デジタル署名に適用する仕組み
 【通常のECDSA署名】
 1. nonce kを選択
 2.

    R = kGを計算
 3. r = R.x (mod n)とする
 4. s = k-1(m + r * x)
 5. (r, s)がECDSA署名データ
 
 【Sign to ContractのECDSA署名】 
 1. nonce kを選択
 2. R = kGを計算
 3. e = k + H(R || 契約)を計算
 4. Q = R + H(R || 契約)Gを計算
 5. q = Q.x (mod n)とする
 6. s = e-1(m + q * x)
 7. (q, s)がECDSA署名データ
 
 署名のPublic NonceのRと契約から新たなPublic Nonce Qを生成する。
 契約データを開示してもkが秘匿されていれば秘密鍵xは計算できない。
 
 Pay to Contractと同様、余分なオンチェーンスペースは消費しない。契約データを失って資金を喪失するリスクなし。
 
 ※ xは秘密鍵、mは署名対象のメッセージ