Slide 1

Slide 1 text

Point Time Locked Contracts
 (OP_CMS + Scriptless Script)


Slide 2

Slide 2 text

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が異なるので、同じ経路の支払いかどうか区別できない 


Slide 3

Slide 3 text

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が計算できる


Slide 4

Slide 4 text

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に比べてやや劣る


Slide 5

Slide 5 text

Slide 6

Slide 6 text

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


Slide 7

Slide 7 text

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を計算できる。


Slide 8

Slide 8 text

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 


Slide 9

Slide 9 text

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よりもシンプルに実現できる 


Slide 10

Slide 10 text

9 まとめ
 ● Point Time Locked ContractsはHTLCsの代替手段で、
 ハッシュ値のプリイメージを要求の代わりに、
 楕円曲線上の点とその離散対数の知識を使用する。
 
 ● PTLCsはHTLCsに比べて以下のメリットがある
 ○ プライバシーの向上 
 ○ データスペースの節約 
 
 ● PTLCsプロトコルの実装方法は3パターン
 ○ Schnorrベース
 ○ 2P-ECDSAベース
 ○ OP_CHECKMULTISIG ベース
 ■ 離散対数の等価性の証明を利用 
 ■ OP_CHECKMULTISIG との併用で、単一ユーザーの署名に 
 Adaptor Signatureを構成できるため、2P-ECDSAよりシンプル