ビットコインでScriptを書かずにくじ引きをするScriptless Bitcoin Lotteries
一般的にビットコインでスマートコントラクトを実行する際はBitcoin Scriptという言語でUTXOの使用条件を記述したものを利用します。しかし、UTXOの使用条件として最も効率が良いのは「アドレスの公開鍵に対応する秘密鍵で署名できること」なので、スマートコントラクトをオフチェーンで実行した結果得られる秘密鍵を使って、その秘密鍵を手に入れた人がアンロックするというアプローチも考えられます。
今日はそんなアプローチの例として2019年のScaling Bitcoin学会で発表されたScriptless Bitcoin Lotteriesというコンセプトを紹介します。
https://youtu.be/-gdfxNalDIc?t=10370
BTCくじ
ビットコインのブロックチェーンを使ってくじをするというのは2012年から運営されているSatoshiDiceというサービスが有名です。最近では下火ですが、ビットコインと暗号を使ってフェアなギャンブルを行うのは昔からこの業界特有の減少です。下に数年前にProvably Fair Gamblingについて書いた記事のリンクを貼っておきます。
https://www.facebook.com/.../bitc.../posts/2516524518443874/
上の記事内でも説明するように、BTCでフェアな賭け事をするプロトコルはHash Commitmentによるものがほとんどです。要するに、参加者や主催者が事前に選んだ数値を検証可能な形(ハッシュ値)でコミットすることで、フェアに行われたことを証明できる、あるいはフェアに行われることを強制できるという仕組みです。
カストディアルなギャンブルサイトでも暗号学的な強制力以外は実現できますが、Hash CommitmentによるBTCくじをトラストレスに行うとなると冒頭で述べたとおりBitcoin Scriptの使用が必要になります。ライトニングチャネルのように、相手が協力的である場合にはそこそこブロックチェーンの使用量を効率化することができるでしょうが、ギャンブルで負けた相手が協力してくれなかった場合にオンチェーンに行くトランザクションサイズが大きく、コストがかかってしまいます。またギャンブルの利用、下手するとギャンブルの内容に関しても推測されることがあり、プライバシー面でも問題があるといえます。
Scriptless Bitcoin Lotteriesはこの問題を改善すべく、Adaptor SignaturesとOblivious Signingという2つの概念を利用します。
ADAPTOR SIGNATURESとは
Adaptor Signaturesとはある秘密の値にコミットした署名です。なにそれ?という感じですが、2つの性質を説明したほうが理解しやすいかもしれません:
・Adaptor Signatureと秘密の値がわかれば、使える署名になる
・Adaptor Signatureと完成した署名が揃えば、秘密の値がわかる
この性質からAdaptorや署名、秘密の値のやりとりを通してさまざまな機能が数学的に実現できる、というのが大まかなイメージです。今日はScriptless Bitcoin Lotteriesの仕組みを通して一例を解説します。
Adaptor Signatureからできた署名は他人からは普通の署名に見えるので、スマートコントラクトを実行した結果ということが署名からはわからず、プライバシー面でも優れています。
OBLIVIOUS SIGNINGとは
まずは根底にあるOblivious Transferという概念を知る必要があります。
Oblivious Transferとは、「Aliceが用意したn個のメッセージの中からBobが1つだけを知り、AliceはBobがどれを受け取ったかわからない」という状態変化のことです。AliceがもつシャッフルしたカードからBobが1枚裏向きのまま選んだイメージですね。
この概念を発展させたOblivious Signingというものを考えます。Aliceが用意したいくつかのデータに対する署名のうち、Bobは1つだけを得ることができ、AliceはBobがどの署名を選んだかがわからないという状況です。Scriptless Bitcoin LotteriesではこのOblivious Signingという概念が要になっています。
具体的な方法としてまずBobは秘密の値yを生成し、それと選択した結果c(コイントスなら裏表のいずれか)を元にPedersen Commitmentを生成します。Pedersen Commitmentとは選択した値を公開せずにコミットする1つの方法で、数学的な演算ができるためハッシュ値よりも数学的なスキームに応用できます。
Pedersen Commitmentは例えばLiquidの秘匿トランザクションで入力金額=出力金額、すなわち秘密のインフレが起こっていないことを証明するのにも使われています。
このPedersen Commitmentを元にAliceは2つの結果に対応するAdaptor Signatureを作ります。Bobはこの両方のAdaptor Signatureが不正でないか検証し、自分が選んでいた結果に対応する方は秘密情報yを使って使える署名として完成させることができます。(他の結果は離散対数問題が困難であるためそのAdaptorに対応する秘密情報がわからず、使える署名を得ることができません)
SCRIPTLESS BITCOIN LOTTERIESの仕組み
これで役者は揃いました。Adaptor Signaturesと、相手にどれか1つだけ署名済みのデータを渡すことができるOblivious Signingです。これで、どのようにBitcoin Scriptに頼らないくじ引きを実現できるかという本題に入ることができます。
AliceとBobがコイントスをしたいと考えていて、表が出ればAliceが、裏が出ればBobが入金額を総取りします。まずは二人でマルチシグに入金するところから始まります。このトランザクションの出力である入金総額UTXOが総取りの対象です。
次に、Aliceは「表を選ぶ」トランザクションと「裏を選ぶ」トランザクションを作りますが、配信しません。このトランザクションの出力の実行条件はどちらも「時間切れでAliceが使用可能」または「AliceとBobの署名を加算したもの(シュノア署名必須)」とします。
Bobは秘密情報を生成し「表」か「裏」を選択したのち、先述したOblivious Signingの手順に則ってAliceからその秘密情報と選択に対応するAdaptor Signatureを受け取ります。この段階でBobは「表」または「裏」を選んだことになります。(シュノア署名前提なので、選んだ結果に対応するトランザクションについてAliceの署名とBobの署名を加算すれば時間切れではない方の使用条件を満たします)
最後にAliceは「表を選ぶ」または「裏を選ぶ」のどちらかのトランザクションを配信することで、「Bobが選んでいない方」を予想します。もしBobが選んでいた方を配信すれば、Bobは受け取っていた署名を使ってトランザクションを配信して勝ち、違う方を選んでいたら時間切れでAliceが入金額を総取りします。
このようにして、Scriptless Bitcoin Lotteriesはくじ引きの機能をスクリプトなしで実現できます。
まとめ
・Bitcoin Scriptを使わずに暗号学的にトランザクションを条件分岐させることができる
・その手法の中でAdaptor SignaturesとPedersen Commitmentを応用したOblivious Signingというものが生まれ、今回のScriptless Bitcoin Lotteriesの実現を可能にしうる
・スケーリングやプログラマビリティに関して、オフチェーンで暗号学的に実行するアプローチには今後も期待したい
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション