10. 楕円曲線暗号
G :base point m:message(署名対象) H:Hash function
p :secret key P :public key(=pG)
r :random number R :random pointx_coordinate
(=rGx_coordinate
)
s :signature
※赤字は秘密情報
r,pを知っていればmに対する署名(s)が可能
R、Pを知っていればmに対する署名(s)の検証が可能
Scriptless Scripts on Schnorr -マルチシグ編
お題:共通のmに対して複数人がそれぞれのr,pを明かすことなく協力しあって共通のs
が作成できないか?(マルチシグ)
10
11. Scriptless Scripts on Schnorr -マルチシグ編
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
Schnorr signature計算式
s=r+H(R|P|m)p
rとpが線形方程式で使用されている。
2人がRとPが共通のものを作成できれば
別々のr,pで作成した署名を加算することで
共通の署名が作成可能
s1
=r1
+H(R|P|m)p1
←Alice署
名
s2
=r2
+H(R|P|m)p2
←Bob署名
s1
+s1
=r1
+r2
+H(R|P|m)(p1
+p2
) ←A&B署名
ちなみに・・・
ECDSA signature計算式
s=(H(m)+R⋅p)・r-1
r-1
が存在。2人がRとPが共通
のものを作成しても別々のr,p
で作成した署名は合算しても
署名として成立しない
11
12. Scriptless Scripts on Schnorr -マルチシグ編:RとPの作成方法
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
R=(r1
+r2
)G P= (p1
+p2
)G
(r1
+r2
)G =R1
+R2
(p1
+p2
)G=P1
+P2
R1
,R2
,P1
,P2
を2者間で交換すれば実現(?)
Rogue key attack
Alice、Bobはお互いのpubkey(P1
,P2
)を交換し、共通のpubkey:Pを作成しようとしている。
Aliceは何かしらの手段でBobのP2
を把握。
Aliceは (P1
- P2
) を自分のpubkeyだとBobに偽申告(本当はP1
)
AliceとBobの共通pubkeyは (P1
- P2
) + P2
=P1
となる
AliceはP1
に対応するp1
を知っているので、A&Bの共通pubkeyだとBが思っているPは
実はAliceのPubkeyに他ならない
Aliceのsecretkeyp1
だけで署名ができてしまう(問題あり!)
→R1
,R2
,P1
,P2
の2者間交換では問題あり。Musigを使う
12
13. Scriptless Scripts on Schnorr -マルチシグ編:RとPの作成方法
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
R=(r1
+r2
)G P= (p1
+p2
)G
(r1
+r2
)G =R1
+R2
(p1
+p2
)G=P1
+P2
R1
,R2
,P1
,P2
を2者間で交換すれば実現(?)
Rogue key attack
13
Party1が (P1
- P2
) を自分のPubkeyだと偽申告する問題が存在
→R1
,R2
,P1
,P2
の2者間交換では問題あり。Musigを使う
P1
-P2
Party1 Party2
P1
-P2
+P2
=P1
p1
知っている p2
知っている
14. Alice Bob
P作成 p1
, P1
(=p1
・G) p2
, P2
(=p2
・G)
P1
,P2
L=H(P1 ,
P2
)
pA
=H(L ,
P1
)p1
pA
G=PA
pB
=H(L ,
P2
)p2
pB
G=PB
PA
、PB
PA
+PB
=H(L ,
P1
)P1
+H(L ,
P2
)P2
= PAB
R作成 r1
, R1
(=r1
・G) r2
, R2
(=r2
・G)
R1,
R2
R =R1
+ R2
S作成 s1
=r1
+H(R,PAB
,m)・pA
s2
=r2
+H(R,PAB
,m)・pB
S = S1
+ S2
=r1
+r2
+H(R12
,PAB
,m)・(pA
+pB
)
Scriptless Scripts on Schnorr -マルチシグ編:Musig G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG)
s :signature
共通のP作成時にハッシュ関数を入
れるのがポイント
H(L ,
P1
-P2
)(P1
-P2
)+H(L ,
P2
)P2
≠
H(L,P1
)P1
Rはシンプルな加算
Schnorr計算式
s=r+H(R,P,m)pと一致
作成順
14
15. Scriptless Scripts on Schnorr -マルチシグ編まとめ
Schnorr signature計算式
s=r+H(R|P|m)p
1.A、Bが共通のR、P、mについて合意
(Rogue Key Attack防止のためMusig利用)
2.Aサイン sA
=rA
+H(R|P|m)pA
3.Bサイン sB
=rB
+H(R|P|m)pB
3.サイン合算sAB
=sA
+sB
=rA
+rB
+H(R|P|m)(pA
+pB
)
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
t :tweak T :tweak point (=tG)
Schnorr signatureの計算式が成立
15
17. A B
Hash(secret)で1BTC ロック
(Bobはsecretが分かれば取得可能)
Hash(secret)で10LTC ロック
(Aliceはsecretが分かれば取得可能)
Aliceはsecretの値
を知っている
A B
Aliceはsecretをブロックチェーン上に公開し10LTCを取得
Aliceはsecretの値
を知っている
A B
BobはAliceがブロードキャストした情報
からsecretの値を取得
BobはAliceがブロードキャストした情報からsecretを取得。BTC
ブロックチェーン上にsecret公開し1BTCを取得
アトミックスワップ概要 ※(注)Refundのケースは未記載
17
20. Scriptless Scripts on Schnorr -アトミックスワップ編
Schnorr multi-signature
sAB
=sA
+sB
=rA
+rB
+H(R|P|m)(pA
+pB
)
Adaptor schnorr multi-signature
sAB
’=t+rA
+rB
+H(R|P|m)(pA
+pB
)
sAB
=sAB
’-t
=rA
+rB
+H(R|P|m)(pA
+pB
)
Adaptor signaturesは署名の際に一時的に有効な秘密情報tを混
ぜ込む(tweakさせる)手法。 定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
t :tweak T :tweak point (=tG)
このtがマルチシグのアトミックスワップで使用していたsecretの代わりとなる。
Adaptor Signatureがアトミックスワップで使用していたハッシュファンクションの代わりとなる。
rをtでtweakさせたうえで両者の署名を合算する。
当然このままでは署名として成り立たない。最終的
にtを除算する必要がある。
tを知っているパーティが tを除算し、署名sAB
完成。このトラン
ザクションがブロードキャストされると
tを知らないパーティも sAB
’ - sAB
= tを計算可能になる。
20
21. Scriptless Scripts on Schnorr -アトミックスワップ編
Adaptor Schnorr signatures作成手順
1.A、Bが共通のR、P、mについて合意(Musig利用)
※PはBTC用とLTC用それぞれ作成
2.AのBTCおよびBのLTCをそれぞれの共通Pで作成したマルチシグアドレスにロック
3.秘密の値tを知っているAliceが自分の署名にtでtweakしたAdaptor signature sA
’、T作成、連携
sA
’=t+sA
=t+rA
+H(R|P|m)pA
4.BobはsA
’、T検証後、Aliceから連携されたsA
’に自身の署名sB
を加算してsAB
’を作成、Aliceへ連携
sAB
’=sA
’+sB
(=t+sA
+sB
)
5.AliceはBobから連携された sAB
’からtを除算してLTC用の署名を完成させブロードキャスト
sAB
=sAB
’- t =rA
+rB
+H(R|P|m)(pA
+pB
)
6.Bobはブロードキャストされた情報からをt算出。LTC用の署名を完成させブロードキャスト
sAB
’ - sAB
=t
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
t :tweak T :tweak point (=tG)
Schnorr signatureの計算
式s=r+H(R|P|m)pが成立
21
26. A B C D AはEに0.9BTC支払おうとしている。
中間ホップのBとDが同一人物と仮定
A B C D
1.2 1.1 1.EがDにpreimageを明かして、
Dから0.9BTC取得
A B C D
1.2
2. Dはあえて何もしない。
一定時間経過後に C~D間はFail
A B C D
1.2 3. 2.からさらに一定時間経過後に
B~C間もFail
preimage
知っている
問題点:Cの手数料がB(D)に渡ることになる(同じpreimageを使用しているのでB、Dの共謀可能)
Lightning Network(Worm Hole Attack)
1.1
1.0
1.0
1.0
AはHash(preimage)使用してロック
BはHash(preimage)使用してロック
CはHash(preimage)使用してロック
1.2 1.1 1.0
1.1
E
preimage
知っている
E
preimage
知っている
E
preimage
知っている
E
0.9
0.9
0.9
0.9
preimage
知っている
preimage
知っている
preimage
知っている
A B C D
1.2 4. Bはpreimageを知っているので、
Aから1.2BTC取得
1.01.1
preimage
知っている
E
0.9
preimage
知っている
26
DはHash(preimage)使用してロック
29. Scriptless Scripts on Schnorr -Lightning Network編
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
t :tweak T :tweak point (=tG)
RをT(=tG)でtweak
tを知らなくてもtweakができるのがポイント
tを加算することで署名が完成する
Schnorr multi-signature
sAB
=sA
+sB
=rA
+rB
+H(R|P|m)(pA
+pB
)
Adaptor schnorr multi-signature
sAB
’=rA
+rB
+H(R+T|P|m)(pA
+pB
)
sAB
=sAB
’+t =t+rA
+rB
+H(R+T|P|m)(pA
+pB
)
このtがpreimageの代わりとなる。
Adaptor Signatureがハッシュファンクションの代わりとなる。
29
30. Lightning Network(HTLCとPTLC) ※(注)RefundおよびPunishmentのケースは未記載
A~D間のそれぞれのロック条件に異なる値を使用するので、第三者による支払いの紐付けが不可能。
Worm Hole Attackも不可能。
AはHash(preimage)使用してロック BはHash(preimage)使用してロック CはHash(preimage)使用してロック
Preimage
知っている
Cはpreimageでロック解除
(Dがロック解除するとpreimage
が分かる)
Bはpreimageでロック解除
(Cがロック解除するとpreimage
が分かる)
Dはpreimageでロック解除
A B C D
A B C D
AはAdaptor sig(A+Z)
使用してロック
BはAdaptor sig(A+B+Z)
使用してロック
CはAdaptor
sig(A+B+C+Z)
使用してロック
※A=aG, B=bG, C=cG, Z=zG
b知っているa,b,c知っている c知っている z知っている
a+b+c知っている
Dはa+b+c+zでロッ
ク解除
Cはa+b+zでロック解除
(Cがロック解除するとa+b+zが分
かる)
Bはa+zでロック解除(Cがロック解除
するとa+zが分かる)
30
HTLC
PTLC
36. 楕円曲線暗号
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
r,pを知っていればmに対する署名(s)が可能
Scriptless Scripts with ECDSA(Two-Party ECDSA)
お題:共通のmに対して複数人がそれぞれのr,pを明かすことなく協力しあって共通のs
が作成できないか?(マルチシグ)
36
37. Scriptless Scripts with ECDSA(Two-Party ECDSA)
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
ECDSA signature計算式
s=(H(m)+R⋅p)・r-1
r-1
が存在。2人がRとPが共通のものを作成しても別々のr,pで作成した署名は合算しても署名
として成立しない(署名の合算が不可能)
s1
=(H(m)+R⋅p1
)・r1
-1
←Alice署名
s2
=(H(m)+R⋅p2
)・r2
-1
←Bob署名
→加法準同型暗号(暗号化した状態で平文の加算が可能な暗号方式)Paillier暗号使用。
pを暗号化した状態で相手に渡し、暗号化した状態での署名を相手が作成し、
その暗号化された署名を受け取って復号することで署名が完成する。
37
38. Alice Bob
P作成 p1
, P1
(=p1
・G)
r1
, R1
(=r1
・G)
p2
, P2
(=p2
・G)
r2
, R2
(=r2
・G)
P1
,P2
,R1
,R2
Alice ZKP(p1
, r1
,p2
,r2
をそれぞれが保持していることを証明、割愛)
共通のR作成
(DH鍵交換)
R = r1
・R2
=r1
・r2
・G R = r2
・R1
(=r1
・r2
・G)
p1
暗号化
共有
ckey = EncpkA
(p1
)
ckey
暗号化された
p1
を元に暗号
化された署名を
作成、共有
c1
=EncpkA
((r2
)-1
H(m)+ρq)
c2
=(ckey)⊙(p2
R(r2
)-1
)
c3
=c1
⊕c2
c3
=Encpk
((r2
)-1
H(m)+ρq+p1
p2
R(r2
)-1
)
暗号化された署
名を復号化して
署名完成
DEC(c3
)・r1
-1
(mod q)
=(r1
r2
)-1
(H(m)+p1
p2
R)+ρq (mod q)
=(H(m)+R・p1
p2
)・(r1
r2
)-1
(mod q)
Scriptless Scripts with ECDSA(Two-Party ECDSA)
作成順
ECDSA signature計算式と一致
s=(H(m)+R⋅p)・r-1
mod q 38
G :base point m:message
H:Hash function p :secret key
P :public key(=pG) r :random number
R :random point (=rG)
s :signature
41. Payment points without 2p-ECDSA or Schnorr
ECDSAベースのscriptless scriptを2p-ECDSAよりシンプルなプロト
コルで実現する提案。
OP_CHECKMULTISIGを使用し、署名の合算は行わない。
各々の作成する署名を秘密の値tでtweakしたadaptor
signatureを作成する。
完全なscriptless scriptとは言えないが、秘密の値tはブロックチェー
ン上に記載されないので、取引の内容を完全に第三者が把握するこ
とは防ぐことができる。
41
42. Payment points without 2p-ECDSA or Schnorr
定義
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG) s :signature
ECDSA signature計算式
s=(H(m)+R⋅p)・r-1
Adaptor signature
s’= (H(m)+R⋅t⋅p)・r-1
= (H(m)+r⋅T⋅p)・r-1
s = s’・t-1
=(H(m)+R⋅t⋅p)・r-1
t-1
=(H(m)+R⋅t⋅p)・r-1
t-1
=(H(m)+R’⋅p)・r’-1
秘密の値tでRをtweak
乗算でtweakするのがポイント
r’=rt
R’=Rt
に変換、署名成立。
実際はr⋅Tでtweak。Tを知っていれば(tを知らなくとも)tweakできるの
がポイント
42
43. Alice Bob
マルチシグアドレス作成 p1
, P1
(=p1
・G) p2
, P2
(=p2
・G)
P1
、P2
のマルチシグアドレス作成(OP_CHECKMULTISIG使用)
Tweak作成 t, T (=t・G)
T
R1
をTweak
r1
, R1
(=r1
・G)
R1
’ = r1
・T ( =R1
・t)
Adaptor signature
作成
マルチシグアドレスをインプットにBobのアドレスへ送金するトランザクションと
Adaptor signature作成。
sa
=(H(m)+R1
’ ⋅p1
)・r1
-1
離散対数等価性証明
(DLEQ)
Adaptor signature
連携
Aliceがr1
を知っていること、R1
とR1
’は同じ値r1
を元に作成されていることを証
明。(R1
=r1
G、R1
’ = r1
T)
証明:π
π、sa
離散対数等価性検証
(DLEQ)
署名S完成
πとsa
を検証して問題なければ、Adaptor
signatureにt-1
乗算して署名完成させ、ブロード
キャスト
S=sa
・t-1
=(H(m)+R⋅p1
)・r1
-1
・t-1
=(H(m)+r1
・t・G・p1
)・r1
-1
・t-1
=(H(m)+r1
・G・p1
)・r1
-1
=(H(m)+R1
・p1
)・r1
-1
t取得 ブロードキャストされた情報からSを把握。sa
/Sでt取得
sa
/S=sa
/(sa
・t-1
)=t
R1
をtでtweakさせたR1
’を作成(tを知らなくと
も)tweakできるのがポイント
Payment points without 2p-ECDSA or Schnorr
R1
であれば署名として完成なのだ
が、tweakさせたR1
’を使用している
のでこのままでは署名として成り立
たない。
DLEQについては次頁(PoDLE)参
照
ECDSA aignature計算式と一致
s=(H(m)+R⋅p)・r-1 43
SchnorrであればBobはP1
、R1
’、sa
を連携されれば署名
の検証が可能だったが、ECDSAでは検証不可能。
DLEQが必要。
G :base point m:message
H:Hash function p :secret key
P :public key(=pG) r :random number
R :random point (=rG)
s :signature
44. Alice Bob
マルチシグアドレス作成 p1
, P1
(=p1
・G)
r1
, R1
(=r1
・G)
R1
’ = r1
・T (=r1
・t・G)
p2
, P2
(=p2
・G)
π(DLEQ)作成 Aliceがr1
を知っていること、R1
とRは同じ値r1
を元に作成
されていることを証明。
(R1
=r1
G、R1
’ = r1
T)
r2
R2
(=r2
・G)
R2
’ = r2
・Y (=r2
・y・G)
e=H(R2
,R2
’ ,R1
,R1
’ )
s=r2
+r1
e
π:(R1
,R1
’,R2
,R2
’,e,s)
π:(R1
,R1
’,R2
,R2
’,e,s)
π(DLEQ)検証 R2
=? sG−eR1
R2
’=? sY −eR1
’
e =? H(R2
||R2
’||R1
||R1
’ )
r2
、R2
、R2
’を新たに生成
Zero knowledge proof of discrete logarithm equality(PoDLE)
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG)
s :signature
Aliceはr1 ,r2を知っているのでsを計
算できる
(証明)
r2
G+(e・r1
・G) - (e・R1
)=R2
(証明)
r2
Y+(e・r1
・Y) - (e・R1
’ )=R2
’
44
49. DLC ECDSA Adaptor signature T 、tの計算方法
Oracle secret key :pO
Oracle Public key :PO
(=pO
・G)
Oracle random number :rO
Oracle random point :RO
(=ro
・G)
イベント結果 :m
T = Ro
+ H(Ro
,P,m) PO
#Alice と BobはOracle公開情報から計算可能
t = ro
+ H(Ro
,P,m) pO
#Oracleだけが計算可能
T=t・Gが成り立っている
49
G :base point m:message H:Hash function
p :secret key P :public key(=pG)
r :random number R :random point (=rG)
s :signature