DLCオラクルにBLS署名を使用する提案(3.技術解説)

Ichiro Kuwahara
Crypto Garage
Published in
9 min readDec 7, 2022

chapter1:DLCオラクルにBLS署名を使用する提案(1.概要解説)
chapter2:
DLCオラクルにBLS署名を使用する提案(2.ペアリングを使用した暗号・署名)
chapter3:
DLCオラクルにBLS署名を使用する提案(3.技術解説)(本投稿)

前章では、「Cryptographic Oracle-Based Conditional Payments」の概要と、その要素技術であるペアリングベース暗号の基本を学びました。本章では、その技術的な詳細を説明します。本題に入る前にまず、Adaptor署名ベースのDLCについて復習しましょう。

Adaptor署名ベースのDLC

Adaptor署名は暗号化された署名σ’です。復号鍵は y_m であり、暗号鍵は Y_m(y_m×G) です。DLC利用者は、以下のように自分の署名をY_m(y_m×G)で暗号化し、y_mで復号します。

DLCトランザクションおよびAdaptor署名の作成/検証の詳細を知りたい方は下記ブログをご覧ください。

DLC Transaction
Adaptor署名 on Schnorr

IDベース暗号再び

IDベース暗号とAdaptor署名ベースのDLCは以下の共通点を持っています。

  1. トラストポイントが存在
    IDベース暗号では秘密鍵生成局、DLCではオラクルがトラストポイントにあたります。
  2. 公開データから暗号鍵を生成
    IDベース暗号鍵はID(メールアドレスなど)、DLC Adaptor暗号鍵はイベント(BTC/USD Spotなど)
  3. 復号鍵はトラストポイントが生成
    IDベースの復号鍵は秘密鍵生成局のBLS署名を使用、DLC Adaptor復号鍵はオラクル証明を使用

ここで、IDベース暗号の各要素を以下のように置き換えます。
・秘密鍵生成局 → オラクル
・ID → イベント(例:BTC/USDスポット)
・BLS署名 → オラクル証明書(イベントに対するBLS署名)
これで、次のような新しいオラクル署名の方式が可能になります。

BLS署名ベースDLCの流れ

●オラクルセットアップ
1.オラクルがキーペアを生成
●契約実行
2.AliceとBobはDLCの条件とオラクルの公開鍵に合意し、イベントm(例:BTC/USD Spot)の条件に応じた「IDベース暗号鍵」QID_mを作成
3.Alice(Bob)がAdaptor署名を作成し、Bob(Alice)がそれを検証
4.Alice(Bob)はAdaptor署名復号鍵y_mをIDベースの暗号化方式で暗号化(暗号化鍵はQID、復号鍵はオラクル BLS署名dID_m)、Bob(Alice)へ渡す
5.Bob(Alice)が暗号文を検証(※)
6.Alice、Bob両者は資金をブロックチェーンにロック
●満期決済
7.AliceまたはBobがオラクルにイベントmを証明するよう依頼、オラクルがBLS署名dID_mを作成
8.AliceまたはBobはdID_mで暗号文を復号し、Adaptor署名復号鍵y_mを取得、これを用いてAdaptor署名を復号し、決済用トランザクションをブロードキャスト

※上記4.において、Alice(Bob)はAdaptor署名復号鍵y_mを伝えずに暗号文c_mが正しく作成されたことを証明する方法がないため、暗号文c_mの代わりに「ym-cipher」「BF-cipher」という別の暗号文をn個(nはセキュリティパラメータ)ずつ作成します。

以下の説明は、特定のmに対して、nバージョンの「sym-cipher」と「BF-cipher」を作成している点に注意してください(mは固定しているので「XX_m」の表記はありません)

Sym-cipherとBF-cipher

Sym-cipherとBF-cipherはBob(Alice)が オラクルのBLS署名 dIDを用いてAdaptor署名復号鍵y を摘出可能とする暗号文です。

Sym-cipher
Sym-cipher sは yを暗号化したものです。暗号化スキームは単純な加算です。暗号鍵、復号鍵は共にrです。(共通鍵暗号方式)

BF-cipher
BF-cipher Bは rを暗号化したものです。暗号化スキームはIDベース暗号、暗号鍵はQID、復号鍵はオラクル署名dIDです。

*IDベース暗号の暗号/復号関数(IDEnc/IDDec)の詳細は“Chapter2:Study of Pairing based cryptography”を参照

Bob(Alice)がオラクルのBLS署名dIDを取得すると、Alice(Bob)はBF-cipherを復号してrを取得し、rを用いてSym-cipherを復号してyを取得します。

これで Bob (Alice) はオラクル証明およびSym-cipher、BF-cipherからAdaptor署名復号鍵 yを取得できることがわかりました。
ただし、Bob(Alice) はIDベース暗号文が正しく作成されていることを直接検証する術がないので、 「cut-and-choose technique」を使用します。

Cut-and-choose technique

Cut-and-choose techniqueの基本的な考え方は、一方の当事者がプロトコルにおいてメッセージの複数nバージョン(この場合、Sym-cipherとBF-cipherの複数nバージョン)を構築し、もう一方の当事者がそれらの一部をランダムにチェックし、チェックしていない残りをプロトコルで使用することです。各暗号文は以下のように検証されます。

1.Alice(Bob)は、特定のmについて、複数nバージョンのsym-cipher s_iとBF-cipher B_iを作成
2.Alice(Bob)はB_iをBob(Alice)に送り、Bob(Alice)はそのうちのいくつかをランダムに選択
3.選択されたすべてのjについて、Alice(Bob)はr_j , u_j を渡し、Bob(Alice)は以下のようにB_j を作成。すでにAlice(Bob)から受領しているB_jと一致するか確認。これにより少なくとも選択したjについてはIDベース暗号が正しくされていることが確認できる

4.選択されなかった全てのkについて、Alice(Bob)はsym-cipher s_kを渡し、Bob(Alice)は以下のように検証を行う

これにより、Alice(Bob)は(未検証の)BF-cipher B_k とオラクル認証 dID を用いて、Bobが y を取得できることを確認できます。ただしB_kはインプットパラメータを渡されていないので検証されていない点は要注意です。

これでBLS based DLCを理解するための前提知識は全て網羅しました。

私たちは、IDベース暗号を使用してAdaptor署名復号鍵 yを暗号化し、オラクル証明(BLS署名)を用いてそれを復号することを学びました。また、IDベース暗号はCut-and-choose techniqueを用いてサンプル検証することを学びました。鍵の生成および暗号、復号処理を図にまとめると以下の通りになります。

これらを踏まえて、BLSベースのDLCの処理の流れを記載する以下のようになります。

Cryptographic Oracle-Based Conditional Payments の処理フロー

以下がBLS based DLCの処理の流れです。

*IDベース暗号の暗号/復号関数(IDEnc/IDDec)の詳細は“Chapter2:Study of Pairing based cryptography”を参照

更なる発展

ペーパーは更にFiat-Shamir変換を用いてcut and chooseをノンインタラクティブに行う方法や、シャミアの秘密分散を用いて、複数オラクル署名に対応する方法、バッチ検証による性能改善などにも言及しています。

まとめ

BLSベースのDLCは、特定のイベントに対するオラクルのコミットメントを必要としないため、オラクルワークはシンプルでステートレスになります。
これは非常に魅力的ですが、ペアリング関数は複雑であり、その実装にはデファクトスタンダードもない点、cut and chooseにより検証コストが増加する点が課題として挙げあれます。
なにはともあれ、このユニークで強力な提案に、私たちはとても興奮しています。これらが積極的に議論され、DLCへの適用が検討されることを期待しています。

謝辞

Cryptographic Oracle-Based Conditional Paymentsの理解に協力してくれたLloyd FournierThibaut Le Guillyに感謝します。

--

--