ビットコイン・インスティテュート

ビットコインの​時間ねじれ攻撃 ― サトシの​2016ブロックの​オフバイワンと​Great Consensus Cleanup (2024–2026)

濃紺の図「THE TIME-WARP GAP」。3つの再調整窓が横に並び、各窓は最初のブロックから最後のブロックまでを測られ、最後のブロックだけが現実の時刻へ跳ねる。窓と窓のあいだには、次の窓の最初のブロックが過去へ戻る破線と「not measured」の印がある。右には、2回目の再調整から下がる難易度の小さな図。

ビットコインの難易度調整アルゴリズムには、サトシ原典コードの段階から残る古いオフバイワン誤りがある。仕様上、再調整の窓は2,016ブロック、10分間隔で言えば2週間ぶんとなるはずだ。だが実装上、経過時間を計算するコードが測るのは、各窓の 最初のブロックから最後のブロックまでで、間隔は2,016ではなく2,015しかない。しかも窓ごとにその窓の最初のブロックから測るので、ある窓の最後のブロックと次の窓の最初のブロックのあいだは、一度も測られない。誤差は小さいが、そこから出てくる悪用シナリオは小さくない。

1. 仕組み

ハッシュレートの過半数を握るマイナーが結託すれば、ほぼすべてのブロックの時刻を、直前11ブロックの中央値を上回るという規則を満たす最小限しか進めず、各再調整窓の 最後のブロックだけを現実の時刻にする手が打てる。次の窓の最初のブロックでは、時刻をまた過去に戻す。外れ値が1つあっても、11ブロックの中央値は動かない。アルゴリズムは窓ごとに、その窓の最初のブロックから最後のブロックまでを測るので、窓と窓のあいだで過去に戻す動きは一度も測られず、どの窓も実際よりはるかに長く見える。最初の窓のあとでは難易度は動かないが、2回目の再調整から下がり、結託したマイナーはハッシュレートを増やすことなく10分よりも速いペースでブロックを掘り続けられる。

ただし攻撃には費用も時間もかかる。公開資料によれば、実害が出るほど難易度を歪ませるには 過半数の体制で約4週間維持し続ける必要がある。4週間も多数派の協調が露骨に続けば、ネットワークの他の参加者はとっくに気づく。「原理的には可能、実務的には高くつく」という性質こそ、この欠陥が修正されないまま長年放置されている主因だ。そこまで目立つ多数派が組めるなら、再調整窓を欺くより手っ取り早く儲かる悪戯がいくらでもある。

2. なぜこれがサトシのコードに残ったのか

v0.1.0のソース、固定コミット4184ab2のsrc/main.cpp 685–707行に保存されている初期版を確認すると、この誤りは2009年1月のリリース時点から存在している。直近のブロックから始めて2,015個ぶん遡るループで祖先ブロックを取り出し、そのブロックと現在ブロックとの時刻差を取る。意図は明らかに2,016ブロックぶんを測ることだったが、実装は2,015ブロックぶんしか測っていない。サトシ自身がこの食い違いに気づいていた形跡は、現存する記録のなかには見当たらない。この誤りが初めて公の場で語られたのは2011年のBitcoinTalkであり、以来、数年おきに再発見されてきた。

3. Great Consensus Cleanup

アントワーヌ・ポワンソは、この時間ねじれ脆弱性に加えて、似たように長く知られてきたいくつかのプロトコル上の小さな疵を一括して塞ぐソフトフォーク提案、Great Consensus Cleanupを主導してきた。提案の中身は、再調整窓の先頭ブロックのタイムスタンプに制約を設けて、ハッシュレートの占有率に関係なくオフバイワンを悪用できなくする方向だ。2026年時点では議論は活発に続き、複数のBitcoin Core開発者が支持しているものの、SegWit (BIP148) やTaproot (BIP341) が踏んだような運用者側の合意水準にはまだ達していない。本提案が狙う不具合は、コンセンサス設計の難易度調整節で、再調整窓のブロック数計算にある関連のオフバイワン誤りと並んで、既知の2つの奇癖の一つとして記録されている。

ペースの遅さはビットコイン特有の慎重さの表れでもある。コンセンサスルールを変えるソフトフォークには、開発者の広い合意と、マイナーやノード運営者の準備状況の両方が要る。「掃除」型、つまり利用者から見て新しい機能が増えるわけではないフォークについては、機能追加型フォークよりさらに合意の閾値が高くなる。結果として、既知だが悪用が割に合わない脆弱性を一旦そのまま残し、危険が顕在化していない場面で大がかりなフォーク作業を仕掛けることへの抵抗が勝ってきた。

4. 編者的意義

時間ねじれ攻撃のバグは、「サトシのコードが歴史的遺物としてそのまま走り続けている」ことを示す代表例の一つだ。17年前にメインネットで動き始めたまま、誰もあえて触ろうとしないロジック。本物のバグが本番チェーンを脅かさずに眠っているという、ビットコイン設計の頑健性と、壊れていないものを慌てて直さないというプロトコル進化文化の保守性、その両方を同時に示している。サトシ自身の合意規則のバグをソフトフォークで直すとしても、これが最初ではない。2010年のバリュー・オーバーフロー事件が最初の例であり、発覚からわずか数時間で修正された。Great Consensus Cleanupがいつか発効した場合に際立つのは、むしろ逆向きの性質だ。すでに進行中の悪用への緊急対応ではなく、一度も悪用されたことのない潜在的な欠陥を、何年もかけて慎重に直すという点である。