現在のビットコインでDelegated Signaturesを実現する
一部のビットコイン開発者は気づいていたが広くは知られていない「とあるテクニック」を、独創的なアイデアを本稿でも何度か紹介したことのあるJeremy Rubin氏が3月10日にbitcoin-devのメーリングリストに投稿しました。
そのテクニックとは、「ソフトフォークの必要なしにDelegated Signaturesをビットコイン上で今すぐ使う方法」。今日はDelegated Signaturesとは何か、それがどう実現できるのか、そしてどのような活用方法が考えられるかについて触れていこうと思います。
DELEGATED SIGNATURESとは
直訳すると「署名の委任」となるDelegated Signaturesは、通常は秘密鍵によって実行されるビットコイン上のとあるUTXOの使用権を、秘密鍵に関係なく他の特定のUTXOに委任するというものです。より簡単に言えば「自分のコインを、秘密鍵を共有せずに特定のUTXOの所有者にも使用可能にする」という仕組みのことです。
実現する方法
秘密鍵を持たない特定の誰かに、「とある条件sの下で」使用させたい自分のUTXOをAとします。自分または他人が所有する別のコインBを使って、条件を記述したスクリプトSによって使用できるUTXO Dをもつトランザクションを準備します。なお、このトランザクションはBの所有者の協力なしでも作成でき、作成時点でトランザクションIDが一意に決まります。
この時点ではまだBの所有者に署名してもらって配信する必要はありません。まず、AとDを入力値とするトランザクションを作り、Aに対応する秘密鍵を使ってSIGHASH_NONEとして署名します。これは2つのUTXO(入力値)には署名しますが、トランザクションの出力値を限定しません。渡し先を限定していない小切手に署名するような感じです。次に、スクリプトSを使用して先程のトランザクションの入力値DにSIGHASH_ALLで署名します。
このときトランザクションの出力値、つまりAのコインの送金先も決定することができます。まとめると、スクリプトSを持つ特定のUTXOにトランザクションの出力値を決定させることでAのコインの使用権限を委任できるということですね。
メリットは?どう活用できる?
さて、勘のいい方は「コインの使用権限を委任できる」や「使用条件を規定できる」というところから、Delegated Signaturesが秘密鍵を直接共有することやマルチシグスクリプトを利用することと比較してどのようなメリットがあるのか気になったでしょう。秘密鍵を渡すことと比較してのメリットですが、1つ目としてマルチシグスクリプトと同様にビットコインスクリプトによって追加の使用条件を規定することができます。簡単な条件でいえば一定期間の経過や、別の鍵による署名を必要にするなどが考えられます。秘密鍵を渡してしまったら条件もクソもありませんね。
また2つ目として、Delegated Signaturesによる委任は剥奪・放棄することができます!例えばAのUTXOを別のトランザクションで使用してしまえば、委任されたトランザクションは二重支払いになるので使用できなくなります。逆に、BのUTXOを別のトランザクションで使用してしまえばDが無効になるので、やはり委任されたトランザクションを実行することはできません。つまり、委任する側・される側ともに委任自体を取り消すことができます。次にマルチシグと比較してのメリットです。
マルチシグでも条件の記述は同様に可能ですし、委任の取り消しの扱いをスクリプト内に含める必要はありますが概ね同じことが実現できます。というわけで、マルチシグに対するDelegated Signaturesのメリットはもっと細かい部分になります。Delegated Signaturesの場合はUTXO D自体が未配信のトランザクションの出力なため、まだ公開されていません。
もし委任者がまだ署名できる状態にあってスクリプトの条件が満たされている場合は、被委任者が直接委任者とコンタクトをとってUTXO Aから直接送金してもらうことができます。これはスクリプトを公開せずに済むためプライバシー面でのメリットとなります。自力で送金することもできるのに双方のメリットのために相手に協力してもらえる点ではライトニングチャネルの協力的クローズに似ていますね。
また、マルチシグは全ての参加者が連携してセットアップする必要がありますが、Delegated SignaturesはUTXO Bの所有者の協力なしにとりあえずセットアップできる点もメリットといえます。他にもありそうですがすぐに思いついたのはこれくらいでした。現在マルチシグを使って行われているサービスの一部がDelegated Signaturesと相性が良いように感じます。
例えば相続サービスとスクリプトSをあらかじめ決めておき、UTXO Dまで用意しておいて貰えれば、手元のコインをシングルシグで通常通り運用しながら死後に備えることができます。(送金のたびに委任トランザクションを署名する必要はありますが、オンチェーンには何も残す必要がありません。一方でマルチシグを使う場合は、毎回新たにマルチシグアドレスをセットアップする必要があります。)
まとめ
今日はDelegated Signaturesが現在のビットコインでもそのまま使用できるという話をしました。秘密鍵を渡さずとも、特定のスクリプトによってアンロックされるUTXOに使用権限を委任することができ、それによってビットコインスクリプトは非常に限られた処理しか実行できませんが、それでもこのように結構便利で可能性の幅が広がる使い方が発見されたりしています。Taprootの導入後も、面白い活用方法がどんどん発明されていくでしょう。楽しみですね。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション