3.2億ドルが暴いたコードの限界|Bitcoin Scriptが不完全を選ぶ理由

2022年2月、イーサリアムとソラナを接続するブリッジサービス「Wormhole」から、ETH約12万枚が一瞬で消えた。ドルベースで3億2000万ドル。原因はスマートコントラクトのバグだった。しかし本当の問題は、そのバグが「実行されるまで発見できなかった」ことにある。

これはWormholeだけの話ではない。その背景には、特定のプログラミング設計が持つ構造的な限界がある。

チューリング完全とは何か、なぜ危険なのか

「チューリング完全」とは、条件分岐・ループ・再帰など、あらゆる計算を理論上実行できる性質を指す。汎用プログラミング言語のほぼ全てがこれに該当し、表現力が高いぶん複雑な処理を書ける。だが、その柔軟性には致命的な代償がある。

「このコードが止まるかどうか、実行してみるまでわからない」という問題だ。

計算機科学では「停止問題」と呼ばれる。チューリング完全な言語で書かれたプログラムが「必ず終了するか」を、実行前に数学的に証明することは原理的に不可能とされている。つまり、どれほど丁寧にコードレビューを重ねても、外部監査を繰り返しても、「バグがないことの完全な証明」は誰にも得られない。

Wormholeのケースでは、攻撃者はこの限界を突いた。署名検証の処理に欠陥を見つけ、本来存在しないはずのETHを不正生成させた。コードは形式上「正しく動いて」いた。バグはあったが、事前に証明する手段が存在しなかった。

ビットコインが「できないこと」を選んだ理由

一方、ビットコインのトランザクションを処理するBitcoin Scriptは、意図的にチューリング不完全に設計されている。ループが存在しない。再帰も存在しない。実行できる操作の種類は厳しく制限されている。

この制約は設計段階で意図的に選ばれたものだ。

「なぜ機能を削るのか」という疑問は自然だ。しかしこの制約こそが、Bitcoin Scriptに決定的な安全性を与えている。ループも再帰もないスクリプトは、必ず有限のステップで終了することが数学的に証明できる。実行前に、だ。

無限ループを悪用してシステムを麻痺させる攻撃が、原理的に不可能になる。任意の複雑な処理を差し込む余地がない。Bitcoin Scriptで書けるのは「この条件が満たされれば、このBTCを動かせる」という検証ルールだけであり、その検証は誰でも事前に確認できる。

これは「機能が少ない」ではなく、「バグを証明できない設計より、機能が少なくても証明できる設計を選ぶ」という哲学だ。Wormholeが直面した限界を、設計の段階で原理的に排除している。

取引所に預けたBTCは、この保護の外にある

ここで見落とされがちな事実がある。Bitcoin Scriptの安全性は、自分の秘密鍵でBTCを管理しているときにだけ機能する。

取引所に預けたBTCの移動は、Bitcoin Scriptではなく取引所の内部システムが処理する。そのシステムがどんな言語で書かれているか、どんな脆弱性を抱えているか、あなたには見えない。監査が入っているかもしれないが、チューリング完全なシステムである以上、バグがないことを事前に証明することは誰にもできない。

Wormholeと同じ構造的限界が、取引所の出金処理システムにも存在している。規模が違っても、原理は同じだ。

取引所が悪質だと言いたいのではない。どれほど優秀なエンジニアが作っても、チューリング完全なシステムはバグゼロを事前に証明できない構造になっている。これは技術の問題ではなく、数学的な限界だ。

証明できる安全性を手元に置く

Bitcoin Scriptが与える安全性は、秘密鍵を自分で管理する者だけが享受できる。ハードウォレットにBTCを移し、シードフレーズを適切に保管する。これは単なる「慎重派の行動」ではなく、数学的に証明可能な設計の恩恵を自分のもとに引き寄せる選択だ。

取引所のシステムが絶対安全だと信じる根拠は、チューリング完全である以上、原理的に存在しない。この事実を知った上で、どこにBTCを置くかを判断してほしい。

実行前に証明できるコードの上に、あなたのBTCを乗せる。その選択は、ハードウォレットを一台用意するところから始まる。

※本記事は一般的な情報提供を目的としており、投資助言ではありません。

この記事が参考になったら、セルフカストディの具体的な始め方もチェックしてみてください。

LINE登録でセルフカストディの始め方を学ぶ 正しい手順を無料でお届けします
← 記事一覧に戻る
LINE登録 ▶ セルフカストディの始め方を無料で学ぶ