ビットコインの送金先や取引条件をあらかじめ決めた型に縛りつけるコベナンツ技術の実装に向けて、OP_CSFSとOP_CATという2つのオペコード(命令語)案が注目されています。これらを組み合わせることで、取引の内部情報をスクリプト自身が検査するイントロスペクション(自己検査)が可能になり、高度な資産管理や盗難対策が実現できるとされています。また、OP_CATとシュノア署名(ビットコインで採用されている署名方式)を応用すれば、OP_CSFSがない環境でも同様の機能を再現できる裏技が存在します。
コベナンツの実現に向けたOP_CSFSとOP_CATの連携
ビットコインは通常、秘密鍵を持つ所有者であれば、受け取ったコインを任意の相手に送金できます。しかし、あらかじめ送金先や取引条件を特定のルールに縛りつけるコベナンツと呼ばれる技術が実現すれば、指定された相手にしか送金できないようにすることや、一定の条件を満たした取引でなければ動かせないようにすることが可能になります。これにより、資産管理の強化や盗難対策、複雑な契約の自動化などが期待できます。
このコベナンツを構築するための部品として、OP_CHECKSIGFROMSTACK(OP_CSFS)とOP_CATという2つのオペコード案が注目されています。
OP_CSFSは、スタック上に置かれた任意のメッセージに対して、署名が正しいかどうかを検証できるようにする提案です。通常のOP_CHECKSIGが実際の取引(トランザクション)に対する署名を検証するのに対し、OP_CSFSは取引そのものに限らず、外部データなど別のメッセージについても署名を確認できる特徴があります。例えば、信頼された外部の第三者(オラクル)が現実世界の出来事に署名し、その署名が正しい場合に限って支払いを実行する仕組みなどに応用できます。
一方のOP_CATは、スタック上にある2つの値を連結し、1つのデータ列として扱えるようにする提案です。これら2つの命令を組み合わせることで、OP_CATが取引情報を1つの検査対象に組み立て、OP_CSFSがその内容に付けられた署名を確認するという役割分担が成立し、取引の内部情報をスクリプト自身が検査する「イントロスペクション」が可能になります。
OP_CATとシュノア署名を用いたコベナンツの再現手法
さらに、OP_CSFSが導入されていない環境であっても、OP_CATとシュノア署名、およびタップルート(シュノア署名を採用するSegWit v1の支出ルール)の仕組みを応用することで、コベナンツに似た機能を再現する裏技が存在します。
この手法では、本来は秘密鍵の所有者を認証するために使われるOP_CHECKSIGを、取引の中身を調べる道具として転用します。シュノア署名を構成する要素のうち、署名時にランダムに選ばれる値をあらかじめ固定し、特定の公開鍵とともにスクリプトに埋め込みます。
このように署名データを固定することで、OP_CHECKSIGが署名を受理するためには、提出された署名値が実際の取引データのハッシュ値と一致しなければならなくなります。支出者がでたらめな署名を作成して検証を突破することはできず、取引データが事前に決められたテンプレートと一致している場合のみ送金が認められるようになります。
ただし、この方法はシュノア署名とタップルートのルールに依存しているため、適用できるのはSegWit v1のアウトプット(取引の出力)に限定されます。従来のBIP 143のダイジェスト方式とECDSA署名を使用するSegWit v0のアウトプットには適用できないという技術的な制約があります。
ポイント
- コベナンツは、送金先や取引条件を制限することで、ビットコインの盗難対策や資産管理を大幅に強化できる技術として注目されています。
- OP_CSFSとOP_CATを組み合わせることで、取引データをスクリプト自身が検査するイントロスペクションが実現可能となり、柔軟な契約の自動化に寄与します。
- OP_CSFSが提案段階であっても、OP_CATとシュノア署名、タップルートの仕様を組み合わせることで、コベナンツに近い条件強制を再現できる裏技が存在します。
- この裏技は、タップルート環境であるSegWit v1のアウトプットにのみ適用でき、従来のSegWit v0には適用できないという技術的制約があります。