Taproot完全対応の実現:インターネットコンピュータにおけるKey-Tweaking
- ICP Japan
- 5月6日
- 読了時間: 3分
更新日:7月8日

インターネットコンピュータ(ICP)は、クロスチェーン互換性の向上を進めており、「Deuteriumマイルストーン」によって、BIP340で標準化されたSchnorr署名を含む**しきい値付きSchnorr署名(Threshold Schnorr Signatures)**がカニスターで生成可能になりました。
この実装により、Pay-To-Taproot(P2TR)アドレスの作成やTaprootトランザクションの発行が可能になっています。本記事では、ICP上でのTaprootサポートの進展、初期の制限、そしてkey-tweakingの導入によってどのようにBitcoinメタプロトコルとの統合が強化されたかを解説します。
P2TRアドレスとは?
BIP341で定義されたP2TRアドレスは、以下2つの経路での支払いに対応しています:
キー経路(Key Path)アドレスに含まれる公開鍵によって検証可能なSchnorr署名があれば、トランザクションが有効とされます。
スクリプト経路(Script Path)Bitcoinのスクリプト言語を使って条件を満たすことで支払える経路。スクリプトはMerkleツリーで秘匿化され、支払い時までその内容や数は非公開のままです。

特に、両方の経路に対応したアドレスでは、キー経路での支払いがスクリプト経路の存在そのものを隠蔽するため、プライバシー向上にも寄与します。これにより、例えばマルチシグの存在すら外部からは見えなくなるのです。
ICPにおけるP2TRの初期制限
Deuteriumリリース時点では、ICP上のP2TRアドレス作成に以下の制限がありました:
スクリプトなしのP2TR(Key Path専用):Merkleツリーを含まないアドレスで、Key Pathのみ有効。ICPではこの形式はサポート済みでした。
Key Pathが使えないP2TR(Script Path専用):Merkleツリーの葉に含まれる公開鍵を用いるスクリプトのみで支払える形式。ただし、ICPでは内部の公開鍵を使った署名に未対応だったため、この形式ではKey Path支払いができませんでした。
このため、開発者は事前に支払い方法を決めなければならず、柔軟性に欠けていたのです。
Threshold SchnorrにおけるKey-Tweakingとは?
P2TRアドレスのKey Path支払いでは、アドレスに使う公開鍵は以下のようにアドレス作成時に“ツイーク(tweak)”されます:
内部公開鍵とMerkleルートからハッシュ値(additive tweak)を生成
このtweakを秘密鍵と公開鍵の両方に加算
そのツイーク済み秘密鍵で署名し、ツイーク済み公開鍵で検証されるようにします
Threshold Schnorrでは秘密鍵が各ノードに分散されているため、各ノードで個別にツイークを適用する必要があるという複雑さがありました。
ICPの拡張:Key-Tweakingの正式サポート
今回のアップデートにより、Schnorr署名APIにKey-Tweakingが対応し、より汎用的なP2TRアドレス(Key Path + Script Pathの両方)を作成可能になりました。
主なメリット:
Taprootの標準仕様に準拠
Dapp開発者にとって実装がシンプルに
Bitcoinベースのスマートコントラクトの柔軟性向上
sign_with_schnorr API にaux(補助情報)フィールドが追加され、Merkleルート情報を含む署名リクエストが可能になりました。
今後このauxフィールドは他のBIPやユースケースにも活用される予定です。
活用シナリオと対応メタプロトコル
この新機能により、ICP上のカニスターが以下のBitcoinメタプロトコルと互換を持ちます:
Ordinals
BRC-20
Runes
Atomical
その他、Taprootを活用する全プロトコル
参考資料
ICP公式仕様書
Chain Fusionドキュメント
BIP340/BIP341仕様
Taproot対応のICP開発例(GitHubレポジトリ)
Comments