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

BIP-374 離散対数の等価性証明

BIP-374 離散対数の等価性証明

GBECの解説動画の資料です。
https://goblockchain.network/2025/05/bip-374-dleq/

Avatar for shigeyuki azuchi

shigeyuki azuchi

May 06, 2025
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 BIP-374 
 https://github.com/bitcoin/bips/blob/master/bip-0374.mediawiki
 
 ベースポイント=Gと別の点Bに対して
 A = xG、C =

    xB
 という2つの点が、同じ離散対数xを元に導出されたことを証明するスキーム
 
 • サイレントペイメントでの利用を想定した提案
 https://goblockchain.network/2023/03/silent-payment/
 
 • 似たようなスキームPoDLE 
 UTXOを明かすことなくUTXOの所有を証明する
 https://goblockchain.network/2020/08/podle/
 

  2. 2 サイレントペイメント 
 Tx In UTXO(公開鍵B=bG) Out サイレントペイメントアドレス • スキャン用公開鍵


    • 支払い用公開鍵
 支払先アドレス 共有シークレット
 ① 受取人のスキャン公開鍵と支払人の秘密鍵でECDHにより 
  共有シークレットを導出 
 ※ サイレントペイメントの詳細な仕様については
 https://techmedia-think.hatenablog.com/entry/2024/07/29/194501
 ②共有シークレットを加工した点+ 支払い用の公開鍵で
  支払先のアドレスを導出 
 ※ 署名に使用された秘密鍵bを使って、正しく支払先のアドレスが導出されていないと
 受取人は受け取ったコインを受け取れない

  3. 3 複数の参加者がいるサイレントペイメント 
 Tx In UTXO(公開鍵B=bG) Out 支払先アドレス UTXO(公開鍵C=cG) スキャン用の鍵A

    = aG 共有シークレット= (b + c)・h・A 
 b・h・A c・h・A ※ 署名者が複数人いる場合、自分が正しく計算していても、
  他の参加者が別の鍵で共有シークレットを導出していた場合、
  誤った支払先アドレスが導出されてしまう
 UTXOの秘密鍵と同じ鍵を使って共有シークレットが導出されたことを証明したい

  4. 4 DLEQ(Discrete Log Equality Proofs) 
 ベースポイント=Gと別の点Bに対して
 A = xG、C

    = xB
 という2つの点が、同じ離散対数 xを元に導出されたことを証明する 
 
 【証明者】
 
 1. ランダムな値kを選択
 2. R1 = kGを計算
 3. R2 = kBを計算
 4. e = H(R1 || R2) とする
 5. s = k + exを計算
 6. e || s がプルーフ
 
 ※ 補助ランダムデータやオプションメッセージなど詳細はBIP-374参照 
 【A, B, Cとプルーフ(e || s)を受け取った受信者】
 
 1. R1 = sG - eA を計算
   = (k + ex)G - eA = kG + eA - eA = kG 
 2. R2 = sB - eC を計算
   = (k + ex)B - eC = kB + eC - eC = kB 
 3. e = H(R1 || R2) を検証