ECDSA版 Scriptless ScriptsのベースになっているECDSAの署名スキーム
techmedia-think.hatenablog.com
と、それを利用したマルチシグの実装方法
techmedia-think.hatenablog.com
について理解したので、続いてECDSAをベースにしたAdaptor Signatureの作り方について見てみる。
ECDSAを使ったAdaptor Signature
Adaptor Signatureのコンセプトは、ある秘密の値を知っているボブが取引相手のアリスに対し、秘密の値の知識をアリスが得た場合にのみ有効な署名を作成できる仕組みを提供するものだ。元々Andrew PoelstraがSchnorro署名を使って実現する仕組みとして紹介された。このAdaptor Signatureの仕組みを利用するとスクリプトでコントラクトを構成することなく、コインのAtomic Swapなどが可能になる。実際にSchnorrベースのScriptless ScriptsでAtomic Swapするプロトコルが↓
techmedia-think.hatenablog.com
今回は、これをECDSAを使って実現する仕組みについて理解する。
まず前提としてLindellのECDSA版のスクリプトレスなマルチシグの場合と同様、アリスは公開鍵P1=gx1とナンスから生成した点R1=gr1を、ボブは公開鍵P2=gx2とナンスR2=gr2をそれぞれ持ち、最後にアリスはボブに(アリスのみが解読可能なx1のPaillier暗号)を提供する。
これに加えてボブは秘密の値αを作成し、αに対する(αを秘密鍵とした際の公開鍵)をアリスに共有する。
ホワイトペーパーに記載されている、これらを使ったAdaptor Signatureを構成するプロコトルの動作が↓
- アリスとボブはP1, P2, R1, R2, m'について同意し、を計算する。
- ボブはr2とαを明らかにすることなく、をのゼロ知識証明と一緒にアリスに送る。
- アリスはを計算し、ボブはを計算する。両者が計算したRは同じ値なので、そのx座標を抽出する。
- ボブはとを計算する。続いてを計算する。このはPaillier暗号の加法準同型演算を表す。すなわち。計算したをアリスに送る。
- アリスはを復号し、s'を入手する。ここでボブが暗号化の実行中に不正行為をしていないか確認する必要がある。これは、が成立するか検証すればいい。問題なければ、を計算しs''をボブに送る。
- ボブはを計算し、そのアウトプットが署名(r, s)になる。
- ボブが作成した署名が公開されると、アリスはを計算する。
ポイント
スクリプトレスなマルチシグの場合、ECDSA署名に使用するRの計算は、アリスとボブがそれぞれ選択したnonce(r1
、r2
)から計算した点R1
、R2
から算出していたけど、Adaptor Signatureの場合、秘密の値αを知っているボブがを計算し、アリスのR1
とαを使って計算したこのR3
から署名に使用するRを計算している。
このため、スクリプトレスなマルチシグであれば、↑のステップ5でアリスがボブから受け取ったc3を復号して、を計算した値が署名データs
になっていたが、これにはaが含まれておらず、有効な署名にならない。そのため、アリスはさらにそれをボブに送り、ボブがa^-1を乗算する。ここで初めて有効な署名が完成する。
この署名データがブロードキャストされると、アリスはそのs
とアリスが計算したs''を使ってαを算出することができる()。
こうしてシークレットと交換にコインを入手する有効な署名を作れる仕組みを利用することで、スクリプトレスなAtomic Swapを実現できると。よく考えるなー。