top of page

インターネットコンピュータにおけるフルTaprootサポートの解放: キーツイークの導入

執筆者の写真: ICP JapanICP Japan


この記事は「Unlocking Full Taproot Support: Key-Tweaking on the Internet Computer」を引用翻訳しています。


インターネットコンピュータは、クロスチェーン相互運用性を向上させ続けており、デューテリウム(Deuterium)マイルストーンでは、カニスターが閾値Schnorr署名(Threshold Schnorr Signatures)を作成できるようになりました。これには、BIP340で標準化されたBitcoinのSchnorr署名も含まれています。


このDeuteriumの導入により、カニスターはPay-To-Taproot(P2TR)アドレスの生成とTaprootトランザクションの実行が可能になりました。本記事では、インターネットコンピュータ上のP2TRサポートの開発経緯、当初のカニスターが直面した制限、そして最近追加された閾値Schnorr署名におけるキー・ツイーク(Key-Tweaking)の重要性について解説します。これにより、カニスターのスマートコントラクトはBitcoinメタプロトコルとの統合が容易になり、クロスチェーン機能がさらに拡張されます。


P2TRアドレスとは?

BIP341で規定される**P2TRアドレス(Pay-To-Taproot Address)**は、2つの異なる方法で資金を使用することができます。

  1. キー・パス(Key Path)

    • キー・パスによる送金は、Schnorr署名が有効であり、P2TRアドレスに指定された公開鍵を用いた検証に成功すれば成立します。

  2. スクリプト・パス(Script Path)

    • スクリプト・パスによる送金は、Bitcoinのスクリプトオペコードを利用し、送信者が任意のスクリプトを満たす入力を提供する必要があります。

    • スクリプト・パスの大きな特徴は、1つのアドレスに複数のスクリプトを格納できる点です(そのうちどれか1つを使えば資金を引き出せる)。

    • 送金が実行されるまで、どのスクリプトが格納されているか(さらにはスクリプトの数も)公開されません。

    • さらに、送金が完了した後でも、実際に使用されたスクリプト入力のみが公開されます。

このように、P2TRはプライバシーと柔軟性を向上させる仕組みを備えており、Bitcoinネットワークでの資産管理やメタプロトコルの利用に適しています。


さらに、アドレスがキー・パスとスクリプト・パスの両方をサポートする場合、キー・パスでの支払いが行われると、スクリプト・パスの存在自体が隠されます。この特性により、トランザクションのプライバシーが向上し、チェーン上の観察者が特定のアドレスの内部的な財務構造(例えば、マルチシグの存在)を推測することが不可能になります。


ICP上のP2TRの初期制限

当初、インターネットコンピュータは限定的なP2TRアドレスのみをサポートしており、カニスターが利用できる支払いメカニズムに制約がありました。

  • スクリプト・パスなしのP2TR: このタイプのアドレスには代替スクリプトのMerkleツリーが含まれておらず、キー・パスによる支払いのみが可能でした。Deuteriumマイルストーンのリリース時点で、インターネットコンピュータはこのタイプをサポートしていました。キー・パスでの送金には有効なSchnorr署名のみが必要であり、Merkleルートが省略されることで、代替のスクリプトが存在するかどうかを隠すことができます。

  • キー・パスを使用できないP2TR: このタイプのアドレスはスクリプト・パスのみを使用可能であり、Merkleツリー内の葉にSchnorr公開鍵を含めることができました。ただし、アドレス自体には内部的な公開鍵が設定されていても、インターネットコンピュータはその鍵を使った署名をサポートしていませんでした。

この制約のため、カニスターはP2TRアドレスを作成する際に、キー・パスまたはスクリプト・パスのどちらか一方しか選択できませんでした。つまり、両方の支払い方法を同時に許可するアドレスを作成することが不可能だったのです。


閾値Schnorr署名におけるキーツイーク(Key-Tweaking)

P2TRアドレスから資金を引き出すには、内部キーを加法的なキー導出スキーム(Additive Key Derivation Scheme)によって変換し、得られた公開鍵を使用して署名を生成する必要があります。このプロセスは以下のように進行します。

  1. 内部公開鍵とMerkleルートをハッシュ化し、「加法的ツイーク」を導出する

  2. このツイークを秘密鍵と内部公開鍵の両方に適用する

  3. ツイークされた秘密鍵を用いて署名を生成し、アドレスに埋め込まれたツイークされた公開鍵と対応させる


しかし、閾値Schnorr署名におけるキーツイークは非常に複雑です。通常の鍵とは異なり、秘密鍵は単独では存在せず、サブネット内の複数のレプリカ(ノード)に分散されているため、各レプリカが自身の鍵シェアに対してツイーク処理を適用する必要があります。

Deuteriumマイルストーンのリリース時点では、インターネットコンピュータは閾値Schnorr署名におけるキーツイークをサポートしていませんでした。このため、カニスターはスクリプト・パスとキー・パスの両方をサポートするP2TRアドレスを生成することができず、アドレス作成時点で使用する支払い方法を決定しなければなりませんでした。

加えて、多くのBitcoinライブラリはツイークされていないキーを使用してキー・パスで送金できるTaprootアドレスをネイティブにサポートしていないため、閾値Schnorr署名をDappに統合する開発者は、Taprootのメカニズムについてより深い理解が求められました。


ICPのP2TRサポート拡張

今回、Schnorr署名APIがキーツイークをサポートするようになり、カニスターはより一般的で柔軟なTaprootアドレスを作成できるようになりました。これにより、スクリプト・パスとキー・パスの両方を利用できるツイークされた内部鍵を持つアドレスの生成が可能になります。

この機能強化により、以下のメリットが生まれます。

  • インターネットコンピュータが標準的なTaprootの機能と完全に整合する

  • Dapp開発者の作業が簡素化される

  • Bitcoinを活用するスマートコントラクトの柔軟性が向上する

新しいキーツイーク機能は、既存のsign_with_schnorr APIに追加されたオプションのaux引数として提供されます。これにより、開発者は署名リクエスト時にMASTルート(Merkleツリーのルート)を含めることができるようになり、Taprootのスクリプト・パス支払いメカニズムをフルサポートできます。

具体的には、sign_with_schnorr_argsの引数が拡張され、オプションのauxフィールドが追加されました。現在のところ、このフィールドにはBIP341のMerkleスクリプトパスのルートハッシュを指定するBIP341バリアントが格納されます。将来的には、この補助入力を利用して、さらに追加の情報をエンコードする拡張も計画されています。

この新しいインターフェースにより、TaprootがサポートするすべてのトランザクションタイプをICP上で処理可能となり、カニスターがBitcoinメタプロトコル(Ordinals、BRC-20、Runes、Atomicalsなど)と完全に互換性を持つことが可能になります。


 
 
 

Comments


bottom of page