ビットコインのタイムスタンプとは?MTPと2つの条件をわかりやすく解説
ビットコインのブロックには時刻が記録されており「タイムスタンプ」と呼ばれています。
タイムスタンプは自動的に正確な時刻が刻まれているイメージを持つ方も多いかと思います。実際はマイナーが自分で書き込む自己申告の値です。そのため絶対的に正確な時刻ではなく、稀に新しいブロックの方が古いブロックよりも過去の時刻となっている場合もあります。
自己申告だとすると、タイムスタンプで何らかの不正が発生したり、時間が巻き戻ったりしないかの疑問が生じます。分散型台帳であるビットコインにおいて「時間」は送金や保有にも関連するため非常に重要な概念です。
実際にはビットコインのタイムスタンプには2つの条件が組み込まれています。この2つの条件により、中央管理の時計なしにタイムスタンプの整合性が保たれています。
本稿では、タイムスタンプの2つの条件の内容と、なぜそのような設計になっているのかを解説します。加えて「タイムワープ攻撃」というタイムスタンプの条件を利用したニッチな攻撃手法についても説明します。タイムスタンプの仕組みを知ることで、ビットコインがどのように時間を扱えているのかの理解が深まります。
ブロックのタイムスタンプ逆行事例
ビットコインのタイムスタンプは、そのブロックを採掘したマイナーが自分で設定できる値です。そのため、実際の時刻よりも少し先の未来をタイムスタンプとして設定する場合があり、結果としてブロックの順序に対してタイムスタンプの時系列が逆行することがあります。
以下のようなものが実例です。mempoolで確認することができます。

珍しい事例として、タイムスタンプが後の2ブロックよりも未来の時刻を指す場合もあります。

ビットコインの1ブロックのマイニングにかかる時間は約10分なので上記のような事例は珍しいですが、これまでも度々現れています。
しかし、タイムスタンプが逆行していたとしても、1つ前のブロックの情報を元に次のブロックが生成されるという計算のルールからブロックの順序およびブロックの高さ自体は正当です。タイムスタンプはあくまで大まかな時刻を把握するための補助データであり、後ほど解説する2つの条件によって問題は生じません。
また、タイムスタンプの逆行は知らない方にとっては印象的な出来事であり、発見した方がよく驚いてSNSで投稿したりして話題になります。先ほど挙げた事例もXで話題になったものからピックアップしました。
たしかに、知らない方としてはmempoolのサイトが壊れているか、ビットコインが壊れているかを疑ってしまいます。
Hey @mempool how could #bitcoin block 843880 have been found before block 843881???
— 🏔Adam🏔 (@denverbitcoin) May 17, 2024
🤔🤔 pic.twitter.com/Aw1qdNqu6l
How the block #825453 is mined in time after #825454 and #825455? @mononautical pic.twitter.com/UP2t8oe1ko
— Martin Deák 👨⚕️ (@matko_deo) January 12, 2024
SNSでの投稿はある程度話題にはなりますが、決まってビットコイン愛好家達が集まってきてタイムスタンプとブロックの関係を教えてくれます。そして、彼らの説明によく出てくるタイムスタンプの2つの条件について次の章で解説します。
タイムスタンプの2つの条件
ビットコインのタイムスタンプには2つの条件があります。
- 条件1(下限):直前11ブロックの中央値より大きくなければならない
- timestamp > MTP
- 条件2(上限):ネットワーク調整時刻(接続ノードのタイムスタンプの中央値)+2時間以内でなければならない
- timestamp < NetworkTime + 2h
それぞれの条件を全フルノードが検証しますが、条件としてはそれぞれ重みが異なります。
「条件1(下限):> MTP」は違反したブロックが永久に無効化されるルールであり、違反のチェックは容易です。
一方「条件2(上限):+2時間以内」はノードのローカル時刻に依存するため、今は違反として弾かれたブロックでも時間が経ってから再検証すれば有効と判定されることがあります。そのためBitcoin Coreの実装上も、条件2違反は「永久に無効なブロック」としては記録されません。
それぞれの条件の詳細について解説します。
条件1:直前11ブロックの中央値より大きくなければならない
条件1は、ブロックのタイムスタンプが直前11ブロックのタイムスタンプの中央値(Median Time Past、MTP)より大きくなければならない、というルールです。
timestamp > MTP
MTPの計算方法はシンプルです。直前11ブロックのタイムスタンプを取り出し、数値の小さい順に並べ替えて、ちょうど真ん中(6番目)の値を採用します。仮にMTPではなく直前の1ブロックを基準にすると、そのブロックのタイムスタンプが極端に未来寄りな場合、以降のブロックが長期的に越えられなくなってしまいます。
また、平均値ではなく中央値とすることで外れ値が1つ2つあっても影響されません。さらに、11という奇数個の中央値とすることで、時間の平均計算は不要であり6番目の値を採用することでシンプルになります。
このMTPはチェーン上のデータだけから機械的に獲得できる値です。そのため、あるブロックがMTPに違反しているかどうかはいつ誰が検証しても結果は変わりません。違反したブロックは、その場で永久に無効なブロックとして扱われます。
条件2(上限):ネットワーク調整時刻 +2時間以内でなければならない
条件2は、ブロックのタイムスタンプがネットワーク調整時刻から2時間以上先の未来であってはならない、というルールです。
timestamp < NetworkTime + 2h
条件1との違いは、判定基準がチェーン上のデータではなく、検証するノード自身のローカル時刻に依存している点です。
ネットワーク調整時刻は自分のシステム時計を基準に、接続しているピアとの時刻差の中央値で補正した値であり、ノードごと、また検証するタイミングによって異なります。
そのため条件2に違反したブロックはその場では拒否されるものの、他の違反(不正な署名やPoW不足など)とは異なり、ネットワークから完全に排除されたブロックとして永久に記録されるわけではありません。実際の時刻が経過してタイムスタンプに追いつけば、後から改めて検証し直すと有効と判定されて受理されることがあります。
Bitcoin Coreの実装でも、条件2の違反は「永久に無効なブロック」としては記録されません。条件1が一度違反したら覆らない絶対的な基準であるのに対し、条件2はあくまで「今の時点では早すぎる」という一時的な足止めにすぎない、という違いがあります。
タイムスタンプ・MTPに関連する2つの機能
MTPとタイムスタンプの2つの条件は、ビットコイン内いくつかの機能を支えており、2つ取り上げます。
1. タイムロックの前倒し防止
nLockTimeやOP_CHECKLOCKTIMEVERIFY(CLTV)は、指定した時点(ブロック高または時刻)に到達するまでトランザクションを無効として扱う機能です。2016年のBIP113(MTPの提案)以降、時刻指定の判定基準はタイムスタンプではなくMTPに変更されました。
タイムスタンプのままではマイナーが自分のブロック内で最大2時間先まで飛ばせてしまい、本来まだ使えないはずのトランザクションを前倒しで使用可能にできてしまうためです。一方でMTPは11ブロックの中央値であるため、平均して実際より50〜60分ほど過去の値になり、その分トランザクションの有効化も少し遅れるという副作用はあります。
2. 難易度調整の操作を防ぐ
ビットコインの難易度調整によって約2週間ごとにブロック生成の頻度が10分に近づくようマイニングの難易度が調整されます。
難易度調整は、2016ブロック区間の最初と最後のタイムスタンプの差(経過時間、基準は20,160分)をもとに計算されます。マイナーは区間の最初と最後のタイムスタンプを逆方向に操作することで経過時間を伸び縮みさせられますが、条件1・2により1区間あたりに動かせる幅は最大でも180分(-60分〜+120分)に制限されており、影響は20,160分に対して約0.89%にとどまります。
ただし、これは期間の両端のブロックだけを操作する場合の話です。過半数のハッシュレートを持つマイナーが期間中の半分以上のブロックを掘り当てられる場合、条件1の中央値を活用した難易度調整をハックするような攻撃が実現できてしまいます(後述のタイムワープ攻撃参照)。
しかしながら、区間ごとの最初と最後のブロックをマイニングする必要があり確率的な難しさやコストも少なくありません。
なぜタイムスタンプの条件は緩いのか
上記で説明した通りタイムスタンプの許容幅は大体「約-60分〜+120分」と、決して狭くなく、むしろ緩いとも捉えられます。なぜここまで緩いのかについては、逆に厳格にした場合について考えるとわかりやすいです。
世界中の時計は、そもそもズレている
インターネット上のコンピュータの時計は、私たちが思っているほど正確には同期していません。NTP(Network Time Protocol)で同期していても数百ミリ秒〜数秒のズレは発生してしまいますし、ブロックが世界中のノードに伝播するまでのタイムラグも時刻のズレの原因となります。
そもそも時刻というものは人為的なものであり、絶対的に正確な時刻すらも人為的なものと捉えられます。正確な時刻を求めるほど時刻の決定者が必要となり、時刻に関して集権化してしまい、結果的に単一障害点となりかねません。時刻の操作に関するインセンティブが与えられた場合や、時刻の決定者がオフラインになった場合など、予期せぬ障害の元となってしまいます。
そのため、ビットコインにおいては時刻について外部依存せず、各マイナーがタイムスタンプを打ち、各ノードが検証するという形式を取りました。ビットコインにおけるタイムスタンプは補助的なデータであり、ブロック高こそがビットコインの世界における真の時計であり時系列を示しています。
タイムスタンプの幅を厳格にした場合のリスク
タイムスタンプの幅を10分以内など短くしてしまった場合、ノードのネットワーク調整時刻が10分ずれていたり、通信環境が悪くブロック伝搬遅延や、はたまたサマータイムによるズレ等の原因でブロックが拒否されることが頻発してしまいます。
結果として、一部は拒否され、一部は受理されるという状況になり、ネットワークの伝搬にも悪影響を与え、ビットコインが不便になります。また、マイナーの時刻がずれるとブロックが拒否され徒労に終わってしまうため、正確な時刻に同期するための別の投資が必要となります。
タイムスタンプの幅を狭くすると、単に時計がずれているだけの善良なノードやマイナーを排除することにつながります。結果的に正確な時刻を獲得する環境に投資できる大規模マイナーの集権化を引き起こすリスクがあります。
Bitcoin Core開発者も不思議に思う設定値ですが、実績としてこれまで問題が発生していないため変える必要がないというところでしょうか。
https://learnmeabitcoin.com/technical/block/time/
2時間ルールは本当に奇妙だ。ブロックチェーンデータではなくローカルデータに基づいている唯一の「コンセンサス」ルールだ。
John Newbery, Bitcoin Core PR Review Club (Jun 19, 2019)
Proof of Stake(PoS)とPoWの時刻のあり方が真逆
PoWのビットコインにおいてタイムスタンプは柔軟ですが、PoSはあらかじめ時刻を等間隔に区切ったスロットが用意されており、各スロットの担当者(バリデータ)が事前の抽選で決まります。
PoWはブロックが決まってから現実の時刻が追随するのに対し、PoSは時刻が先に決まっていてブロック生成が追随するため、時刻に対する考え方は真逆となります。
例えば12秒ごとに1ブロック進むイーサリアムのバリデータ運用では、Google・Ubuntu・NTP Poolなど公開のNTPサーバー群に同期することが実務上推奨されており(参照)、時刻同期のずれはブロック提案や承認作業のタイミングを逃し、収益の機会損失を被るリスクになってしまいます。
そのため、PoSにおいては人間世界の時刻があって成立するものであり、「正確な時刻」に依存せざるを得ない構造とも捉えられます。
ただしタイムスタンプの緩さには代償もあり、次の章では「タイムワープ攻撃」について解説します。
タイムワープ攻撃:中央値という外れ値対策の悪用
条件1で採用されている中央値は、外れ値1つ2つに影響されないというポジティブな性質を持っています。しかし過半数のハッシュレートを持つマイナーにとっては、外れ値に影響されないという性質そのものが難易度調整のハック対象になります。MTP(中央値)を利用した攻撃が「タイムワープ攻撃」です。
タイムワープ攻撃は、ブロックを1秒ずつ進めて難易度調整区間の最終ブロックのみ現在時刻と同じ時間にすることで、難易度を加速度的に下げていき、理論上約39.5日で難易度を1まで下げてしまう攻撃です。
ただし、タイムワープ攻撃をするためには過去11ブロックの中央値を掌握する必要があるため、過半数のハッシュレートを維持する必要があります。そのため、51%攻撃と併せて実施される可能性のある攻撃です。
具体的なイメージとして以下の図が参考になります。

タイムワープ攻撃を開始して以降、10分で掘れたとしても1ブロック1秒のタイムスタンプを刻んでいき、難易度調整区間の最終ブロックだけ現在時刻に戻します。最終ブロックのみ現在時刻に時間が飛ぶため「タイムワープ攻撃」と呼ばれます。
| 区間 | 先頭申告時刻 | 最終申告時刻(実時刻) | 次の難易度 |
|---|---|---|---|
| 1期 | 0週(正常) | 2週 | ×1 |
| 2期 | ほぼ0週 | 4週 | ×1/2 |
| 3期 | ほぼ0週 | 5週 | ×2/5 |
| 4期 | ほぼ0週 | 5.4週 | ×2/5.4 |
1期目は正常ですが、最終ブロック以外は1秒1ブロックで進めているため先頭申告時間は2016ブロックでも33分程度しか進みません。その結果、2期目以降は合計で4週間経過したと測定され、難易度の急降下が始まります。
3期目は難易度が半分なので、実際には5分で1ブロック掘れるペースになります。つまり2016ブロックを1週間で消化してしまいます。4期目は2.8日、5期目は1日と加速し続け、難易度は下がり続けます。
960,205ブロック時点の難易度は約126兆ですが、理論上約39.5日で難易度が1まで落ちます。
実際の経過時間が収束していくため、難易度調整の倍率もおおよそ0.357倍あたりに収束します。

気になるタイムワープ攻撃で得られる利益としては、ビットコインに残っているコインベース報酬の回収です。2026年8月時点で未発行のビットコインは約93万BTCあります。
しかしながら、他のマイナーにとっても難易度が下がるため攻撃者が総取りできるわけではありません。さらに、難易度が1まで下がれば小規模マイナーや家にあるPCでも掘れる可能性があるため、攻撃者の得られる利益も減るのに加えて確率的なMTPの掌握も難しくなると考えられます。
もちろん攻撃ハードルも低くありません。1秒1ブロック進む様子は誰にでも確認できてしまいますし、1ヶ月以上も51%以上を維持し続けるのも莫大なコストがかかります。
タイムワープ攻撃の解決方法について、BIP54「Consensus Cleanup」として現在進行形で議論が進められています。BIP54は区間の最初のブロックが前の区間の最後より2時間以上前であってはならないという修正提案です。タイムスタンプの性質を活用したニッチな攻撃ですが、長年残されている課題として興味深いです。
まとめ:ブロックが時間でありタイムスタンプは補助データである
ビットコインのタイムスタンプはマイナーが自己申告でブロックに刻むものであり、時間逆行の事例や、タイムスタンプの2つの条件について解説しました。
加えて、なぜビットコインのタイムスタンプが緩いのかという理由や、タイムワープ攻撃というタイムスタンプを活用した未解決の攻撃手法についても整理しました。
ビットコインの世界においては、ブロック高こそがチェーン上の時系列を定める基準であり、タイムスタンプは参考程度の補助データに過ぎません。人為的な時間という概念を絶対視しないという設計が組み込まれているように感じます。
しかしながら、タイムスタンプのおかげで難易度調整が実現され、私たちの実世界の時計とペースを合わせることができています。タイムスタンプのルールを知っておくことで、技術的な時間の取り扱いや、「時間」という概念の重要性について改めて考えることができるでしょう。
関連記事
最新記事
読者になる
ビットコイン研究所の新着記事をお届けします。
ディスカッション