https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html の意訳。

目的と結論

Taproot の BIP340 署名を用いると、従来コヴナントを阻む要素とされてきた循環問題を部分的に克服できる。したがって、CAT オペコードが再導入されれば、事実上 CHECKSIGFROMSTACK に近い仕組みを得られる可能性が高い。さらに署名アルゴリズムの数学的性質を悪用することで、introspection(トランザクションの内省)を実現する道が開ける。ただし、Taproot では出力先が楕円曲線上の公開鍵となるため、再帰的コヴナントを構築するには追加の工夫が要る。

背景

Bitcoin Script は通常、「認証データ(署名やハッシュロック等)の検証」を行うのみである。covenant(コヴナント)とは、支出時のトランザクション構造を条件により制限する概念である。しかし、Bitcoin Script はトランザクションデータ全体にアクセスできないため、トランザクション形式を強く拘束することはできない。もし CATCHECKSIGFROMSTACK が存在すれば、ユーザが提供するトランザクション全体のデータに対し署名をチェック可能となり、コヴナントの仕組みを実装できる。

概要

下記では、Schnorr 型署名(BIP340)が「コヴナント対策」を意図して設計されたにもかかわらず、実際には従来よりもコヴナント実装に近づける余地があることを示す。さらに CAT オペコードを組み合わせると、CHECKSIGFROMSTACK のような操作が可能になる。

covenants の定義

  • covenants: 特定のトランザクションのみがコインを使用可能になるよう制限・検証を行う仕組み。
  • 従来の Bitcoin Script: 署名やハッシュロックは扱えるが、送金先や速度制限など複雑な制限は行えない。
  • CAT の役割: スタック上に展開した小さなデータ要素を連結し、任意の大きさのデータ検証を可能にする。
  • CHECKSIGFROMSTACK の役割: 任意のデータに対する署名検証を行い、ユーザが提示したトランザクションデータが正しいことを確認する。

ECDSA 署名と covenant の問題点

  • ECDSA は過去に Bitcoin で使われた署名方式である。
  • しかし ECDSA では、CHECKSIGFROMSTACK がない場合、トランザクションハッシュとの循環参照が発生して柔軟な制限がかけられない。
  • また、CHECKSIG が参照するトランザクションデータには前のトランザクションの情報や Script 自身が含まれ、完全な自由度が得られない。

Schnorr 署名(BIP340)の概要と誤解

  • Taproot における BIP340 署名は、旧来より「コヴナントを阻む署名方式」と見なされてきた。
  • 署名ハッシュに公開鍵 $P$ が明示的に含まれ、循環を招くため、コヴナント的制約を実現しづらいと思われていた。
  • 実際には、$R$ と $P$(一時鍵と公開鍵)を固定し、署名パラメータ $s$ を逆に操作することで、トランザクションハッシュをスタックに載せるトリックが可能である。

具象例

  1. 署名値 $s$ のみ入力としてスタックに載せる。
  2. 固定した $R$ として生成元点 $G$ を用い、DUPSWAPCAT などを駆使して署名チェックを行う。
  3. その過程で $s$ が実質的にトランザクションデータのハッシュを表すように仕向ける。
  4. ハッシュの末尾が特定バイトになるまでグラインド(複数試行)させれば、+1 の調整もクリア可能。
  5. 結果として、CHECKSIGFROMSTACK 的な振る舞いを再現し、Script 側が自由にトランザクションデータを制約できる。

さらなる応用と課題

  • CAT が正式に利用できれば、CAT + CHECKSIGFROMSTACK スタイルの内省が事実上可能となる。
  • しかし、Taproot の出力は EC 公開鍵で行われ、楕円曲線ハッシュが Script に直接提供されないため、再帰的コヴナントには追加の拡張が必要である。
  • SigHash モードのバリエーション(SIGHASH_NOINPUT など)をシミュレートすることで、Lightning チャネルのバックアップや Vaults など柔軟な応用が可能になると期待される。

Miniscript による発展

  • Script 設計の難しさがコヴナント応用を阻んできた要因である。
  • Miniscript は Script を安全かつ組み合わせしやすい形で記述・解析する手法であり、今後こうした高度なコヴナントの開発を加速させる見込みがある。
  • 実際に CHECKSIGFROMSTACK を用いた高度な事例も存在し、Taproot + Miniscript との組み合わせで可能性が広がる。

結論

Taproot の BIP340 署名と CAT(もしくはそれに類する機能)の組み合わせを用いれば、トランザクション内省を実装できる可能性が高い。旧来の ECDSA より「コヴナント対策」が進んだ反面、実際には逆手を取ることで自由度が増している。一方で、再帰的コヴナントまで視野に入れる場合、楕円曲線ハッシュを Script が直接扱う必要があり追加の検討が必要である。Miniscript の応用や SIGHASH_NOINPUT 相当の仕組みを組み合わせることで、Lightning Network や Vaults の固有要件を満たす設計が可能になる。

次回は、SIGHASH_NOINPUT をシミュレートし、Lightning チャネルのバックアップをコンパクトに保つ方法を示す。さらに最終的には、Miniscript のアドホックな拡張とソフトウェア開発手法について解説する。