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

Adaptor Signatureを利用した Atomic Swap - Schnorr 版 -

Adaptor Signatureを利用した Atomic Swap - Schnorr 版 -

GBEC解説動画コンテンツのスライドです。
https://goblockchain.network/2018/12/adaptor_signature/

shigeyuki azuchi

December 04, 2018
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 HTLCを利用したAtomic Swap HTLC(Hashed Time-Locked Contracts)は ハッシュのプリイメージ(シークレット)とコインを交換する タイムロック付きのコントラクト アリスはLitecoin上でシークレットSを公開してLTCを入手し、 ボブは公開されたSを使ってBTCを入手する。

    ※コインを入手する際にスクリプトは公開されブロックチェーンに記録されるため、 HTLCを行ったことは誰もが知ることになる アリスはBitcoinを以下のアンロック条件のスクリプトに送る。 • H(S)のプリイメージ=シークレットSが分かればボブは BTCを入手できる。 • 10日経過したらアリスはBTCを入手できる。 Secret S H(S) ボブはLTCを以下のアンロック条件のコントラクトに送る。 • H(S)のプリイメージ=シークレットSが 分かればアリスはLTCを入手できる。 • 5日経過したらボブはLTCを入手できる。 BTC/LTCを交換
  2. 2 HTLCを利用したAtomic Swap • Bitcoinのスクリプト(BIP-199) • ボブが償還する際の scriptSig • アリスが償還する際の

    scriptSig ※実際は、P2SHになるのでredeem scriptが追加される。 ※ 安全性のためOP_SIZEを使用したシークレットのサイズチェックを推奨 OP_IF OP_HASH160 <H(S)> OP_EQUALVERIFY OP_DUP OP_HASH160 <ボブの公開鍵のハッシュ> OP_ELSE <ロック期間> OP_CHECKLOCKTIMEVERIFY OP_DROP OP_HASH160 <アリスの公開鍵のハッシュ> OP_ENDIF OP_EQUALVERIFY OP_CHECKSIG <ボブの鍵で生成した署名> <ボブの公開鍵> <s> OP_TRUE <アリスの鍵で生成した署名> <アリスの公開鍵> OP_FALSE scriptPubKey scriptSig scriptSig
  3. 4 Schnorr署名 公開鍵や署名の集約特性があるデジタル署名スキーム • 楕円曲線の生成点:G • 秘密鍵:x、公開鍵:P = xG •

    暗号学的ハッシュ関数: H • メッセージダイジェスト: m 【署名の生成】 • ランダムなnonce kを選択する。 • R = kGを計算する(Rは楕円曲線上の点)。 • s = k + H(P, R, m) x を計算する。 • (R, s)が署名データ 【署名の検証】 • sG = R + H(P, R, m)P が成立するか検証する。 秘密鍵 x の情報を知らなければ、 この式を満たす s は導出できない。
  4. 5 Schnorrを使った公開鍵と署名の集約 • 鍵ペア P1 = x1G • nonce R1

    = k1G • 鍵ペア P2 = x2G • nonce R2 = k2G マルチシグの公開鍵 P = P1 + P2 にコインをロック ※Pに対応する秘密鍵は誰も知らない Pにロックされたコインをアンロックする際の署名 (署名に使用する R = R1 + R2) ① s1 = k1 + H(P, R, m)x1 を計算 ① s2 = k2 + H(P, R, m)x2 を計算 ② s = s1 + s2 = k1 + k2 + H(P, R, m)(x1 + x2)を計算 署名データは(R, s) ※ 署名は各ユーザーが計算した各 s値の加算することで計算できる ③ sG = R + H(P, R, m)P を検証
  5. 6 Adaptor Signature Adaptor SignatureはAtomic Swapで必要な ハッシュのプリイメージとコインの交換を代替する署名テクニック • 通常のSchnorr署名 (R,

    s): R = kG、s = k + H(P, R, m) x • Adaptor Signature (R, s’, T): R = kG, s’ = k + t + H(P, R, m) x, T = tG ※ Rは同じ値 t がハッシュのプリイメージの代替でランダムに選択した数値 Tはtを秘密鍵とした楕円曲線上の点=公開鍵でハッシュの役割をする Adaptor Signature s’とsが揃うとそこからtを計算できる。 t = s’ - s
  6. 7 Adaptor Signatureを使ったAtomic Swap Bitcoin Litecoin • 鍵ペア P1 =

    x1G • nonce R1 = k1G • 鍵ペア P2 = x2G • nonce R2 = k2G • 鍵ペア P4 = x4G • nonce R4 = k4G • 鍵ペア P3 = x3G • nonce R3 = k3G P = P1 + P2 ① 1 BTCをロック P’ = P3 + P4 ② 10 LTCをロック ③ ランダムな値tを選択し、 Adaptor Signature を計算する。 T = tG、R = R1 + R2 sA = k1 + t + H(P, R, m)x1 (R, sA, T)をボブに送る。 ⑦ ボブは、 sB = k2 + H(P, R, m)x2 を計算する。 (⑩のタイミングでも OK) ⑤ ボブは以下を検証する。 • Tが一致する • sA G = R1 + T + H(P, R, m)P1 • sA' G = R4 + T + H(P’, R’, m’)P4 ④ 同じT = tGを使って Adaptor Signature を計算する。 R’ = R3 + R4 sA’ = k4 + t + H(P, R, m’)x4 (R’, sA', T)をボブに送る。 ⑥ ボブは、 sB’= k3 + H(P’, R’, m’)x3 を計算してアリスに渡す。 ⑧ アリスはマルチシグの署名を完成させる。 s’ = sB’ + sA’ - t = k3 + k4 + H(P’, R’, m’)(x3 + x4) (R’, s’)を署名データとしてLTCを入手する トランザクションをブロードキャストする。 Tx ⑨ ボブはブロードキャストされた Txからs’の 値を知り、t = sB’ + sA’ - s’を計算する。 ⑩ ボブはtを使ってマルチシグの署名を完成させる。 s = sA + sB - t = k1 + k2 + H(P, R, m)(x1 + x2) (R, s)を署名データとしてBTCを入手する トランザクションをブロードキャストする。 Tx アリスがLTCを入手すれば、 その署名からボブはシークレット tを 知ることができ、BTCを入手するために 必要な署名を構築できる。
  7. 8 まとめ • Adaptor Signatureはハッシュのプリイメージの交換を 代替する署名エンコード • タイムロックの仕組みはないので、予めnLocktimeを セットした払い戻し用のトランザクションを準備しておく 必要がある。

    • オンチェーン上では、単純なアドレス(P2PKHのような) 宛の送金トランザクションに見えるだけで、 Atomic Swapが行われたことは当事者以外分からな い。 • スクリプトのサイズ分手数料が安価に。