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

Point Time Locked Contracts(OP_CMS + Scriptless Script)

Point Time Locked Contracts(OP_CMS + Scriptless Script)

GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2020/07/point-time-locked-contracts/

shigeyuki azuchi

July 16, 2020
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 Point Time Locked Contracts
 Lightning Networkのマルチホップ支払いや、Crosschain Atomic Swap等で
 現在利用されているHashed

    Time Locked Contracts(HTLCs)の代替手段
 
 • HTLCsを利用したマルチホップ決済では、同じプリイメージを使って支払いを制御するため、 
 ルーティングプライバシーの課題がある。 
 ◦ 経路上に悪意あるユーザーのノードが複数存在すると Wormhole Attackにより
 中間ノードに支払われる手数料を奪う攻撃も考えられる。 
 
 
 
 
 
 • PTLCsでは、ハッシュ値とそのプリイメージの代わりに、楕円曲線上の点(Point)と 
 その離散対数(=秘密鍵)を利用する。 
 H(xxx)
 xxx
 H(xxx)
 xxx
 H(xxx)
 xxx
 H(xxx)
 xxx
 H(xxx)
 xxx
 Wormhole
 Y 0 =y 0 G
 y 0 
 Y 1 =y 1 G
 y 1 
 Y 2 =y 2 G
 y 2 
 Y 3 =y 3 G
 y 3 
 Y 4 =y 4 G
 y 4
 経路内で使われるPointが異なるので、同じ経路の支払いかどうか区別できない 

  2. 2 Point Time Locked Contracts
 HTLCsをPTLCsに置き換えることで、
 • LNのルーティングのプライバシーが向上 
 •

    HTLCsではコントラクトとして記述していたロジックが、 
 デジタル署名にエンコードされ( Scriptlessになる)、プライバシーおよびスペースの節約に。 
 
 Adaptor Signatureを使ったPTLCs
 
 
 yを提供するとコインが入手できる 
 Y=yG
 y
 アリスの鍵ペア A = aG
 Y
 Adaptor
 Signature
 • ボブがコインを入手するトランザクションに必要な未完成な署名 
 • ボブがyを使えば署名が完成する 
 • 完成した署名とAdaptor Signatureを使うとyが計算できる

  3. 3 PTLCsの実装方法
 • Schnorr署名を使った実装
 ◦ Schnorr署名が利用可能な環境である必要がある 
 ◦ https://goblockchain.network/2018/12/adaptor_signature/ 


    • 2P-ECDSAを使った実装
 ◦ 既存のBitcoinで利用可能だが、Paillier暗号など追加の暗号プリミティブが必要 
 ◦ https://goblockchain.network/2019/01/adaptor_signature-ecdsa/ 
 • OP_CHECKMULTISIGを使った実装 ← 今回紹介する方法
 ◦ 既存のBitcoinで利用可能
 ◦ 追加の暗号プリミティブを必要とせず、 2P-ECDSAに比べてシンプル
 ◦ OP_CHECKMULTISIGを使うので、プライバシーやデータスペースは 
 Schnorrや2P-ECDSAに比べてやや劣る

  4. 4 Payment Pointプロトコル
 アリスはボブがY(= yG)の離散対数yを明らかにしたらコインを支払う アリスの鍵ペア A = aG
 ボブの鍵ペア

    B = bG
 A
 Refund addr
 ① 自身の公開鍵Aと払い戻し用アドレスをボブに送信する 
 Send addr
 B
 ② 自身の公開鍵Bと送信先アドレスをアリスに送信する 
 Tx
 In
 Out
 アリスのUTXO
 2 <A> <B> 2 OP_CMS 
 ③ アリスのUTXOを使って 
 アリスとボブの2-of-2の 
 マルチシグ宛に送金するTxを作成する 
 Refund Tx
 In
 Out
 2-of-2 マルチシグ
 Refund addr
 ④ 両者のマルチシグのコインを使用する 
 払い戻し用のTxを作成し、ボブの署名を貰う 
 Bob’s sig
 Send Tx
 In
 Out
 2-of-2 マルチシグ
 Send addr
 Adaptor sig
 Y
 ⑤ 両者のマルチシグのコインを使用して、ボブに送金するTxを作成し、 
 アリスは自身の鍵と補助ポイントYを使ってAdaptor Signatureを作成し、ボブに送信する。 
 TimeLocked

  5. 5 Payment Pointプロトコル
 Send Tx
 In
 Out
 2-of-2 マルチシグ
 Send

    addr
 Adaptor sig
 Y
 y
 ⑥ ボブはAdaptor Signatureに対してYの
 離散対数yを使って、インプットのマルチシグに対し て有効なアリスの署名を完成させる。 
 また、bを使って必要な自分の署名を作成し、 
 Txを完成させ、ブロードキャストする。 
 Bob’s sig
 ボブの鍵ペア B = bG
 ⑦ アリスはブロードキャストされたTxの署名データを取得し、 
 署名とAdapto Signatureからyの値を計算する。 
 Adaptor sig
 Y
 y
 Refund Tx
 In
 Out
 2-of-2 マルチシグ
 Refund addr
 Bob’s sig
 ⑧ ボブがyを明かさない=Send Txを公開しない場合、 
 アリスは予めRefund Txのボブ分の署名を受け取っているので、 
 自分の署名を加えて、 Refund Txをブロードキャストし、払い戻しを受ける。 
 Alice’s sig
 Alice’s sig
 Bob’s sig
 Alice’s sig
 TimeLocked

  6. 6 Adaptor Signatureの仕組み
 【アリスのAdaptor Signatureの作り方】
 1. ランダムなnonce kを選択し、R’ = kGを計算する。


    2. 同じkを使ってR = kY(= kyG)を計算する。
 3. Rのx座標をrとする。
 4. RとR'が同じ離散対数(k)を使って計算されていることの証明 πを生成する。
 5. s’ = (H(m) + r * a)/k を計算する。
 6. (R, R’, s’, π)がAdaptor Signature
 
 【署名を完成させる】 
 1. RとR'が同じ離散対数(k)を使って計算されているか πを使って検証する。
 2. R’ = (H(m)G + rA)/s’ が成立するか検証する。 
 3. s = s’ * y-1を計算する。
 4. (R.x, s)が有効なECDSA署名
 アリスの鍵ペア A = aG
 ボブの鍵ペア B = bG
 補助ポイント Y = yG
 有効なアリスの署名は、 s = (H(m) + r * a))/ (k *y) 
 Adaptor Signatureとの差異はy-1のみ
 (R.x, s)がブロードキャストされると、 
 アリスはy = s’ * s-1を計算できる。

  7. 7 離散対数の等価性の証明
 このプロトコルのAdaptor Signatureでは、R’ = kG, R = kYの離散対数が等価である必要がある 


    
 
 (G, R’, Y, R)に対して以下の手順で R’とRの離散対数の等価性を証明する 
 Y = yG
 ① 証明者は、ランダム値 rを選択し、
   A1 = rG、A2 = rYを計算し、検証者に送る。 
 A1 = rG
 A2 = rY
 ② 検証者はチャレンジとしてランダム値 cを
   選択し、証明者に送る。 
 c
 ③ 証明者は、z = r + kc を計算し、検証者に送る。 
 z = r + kc
 ④ zを使って以下の両方が成立するか検証する 
 
 • zG = rG + kcG = A1 + cR’ 
 • zY = rY + kcY = A2 + cR 
 
 両者が成立すれば、 (G, R', Y, R)は
 同じ離散対数(k)を元に検証されている。 
 Fiat-Shamir変換により(チャレンジ cを決定論的に計算することで) 
 非対話型のプロトコルに変換可能 
 
 離散対数の等価性の証明はこの他に、 PoDLEなどのプロトコルもある↓ 
 https://techmedia-think.hatenablog.com/entry/2020/02/07/180907 

  8. 8 2P-ECDSAよりシンプルに
 アリスの鍵ペア A = aG
 ボブの鍵ペア B = bG


    アリスのnonce
 Ra = kaG
 ボブのnonce
 Rb = kbG
 s = (H(m) + r * (a * b)) / (ka * kb) 
 R = ka * Rb = kb * Ra 
 2P-ECDSAの場合、両者の鍵から単一の鍵を構成するため 
 その鍵に対して有効な署名を協力して作成する必要がある 
 P = a * B = b * A
 この署名の計算をお互いの秘密鍵、 nonceを秘匿したまま行う必要がある。 
 そのために加法準同型性のある Paillier暗号などを利用した計算が必要でプロトコルは複雑になる。 
 
 OP_CHECKMULTISIG と組み合わせると、シークレットを一方の参加者の署名に組み込めるので 
 2P-ECDSAよりもシンプルに実現できる 

  9. 9 まとめ
 • Point Time Locked ContractsはHTLCsの代替手段で、
 ハッシュ値のプリイメージを要求の代わりに、
 楕円曲線上の点とその離散対数の知識を使用する。
 


    • PTLCsはHTLCsに比べて以下のメリットがある
 ◦ プライバシーの向上 
 ◦ データスペースの節約 
 
 • PTLCsプロトコルの実装方法は3パターン
 ◦ Schnorrベース
 ◦ 2P-ECDSAベース
 ◦ OP_CHECKMULTISIG ベース
 ▪ 離散対数の等価性の証明を利用 
 ▪ OP_CHECKMULTISIG との併用で、単一ユーザーの署名に 
 Adaptor Signatureを構成できるため、2P-ECDSAよりシンプル