コンピュータの時計が 1 秒ズレるだけで何が起きるか

あなたの PC やスマートフォンの時計は、驚くほど正確に見えます。しかし、コンピュータの内蔵時計 (水晶発振器) は 1 日に数秒から数十秒ズレます。このズレを放置すると、TLS 証明書の検証が失敗し、二要素認証のワンタイムパスワードが無効になり、ログのタイムスタンプが信頼できなくなり、分散システムのデータ整合性が崩壊します。

NTP (Network Time Protocol) は、この「時刻のズレ」をインターネット経由で修正するプロトコルです。

NTP - 1985 年から時を刻み続けるプロトコル

NTP は 1985 年に David L. Mills によって設計され、現在も稼働しているインターネットプロトコルの中で最も古いものの一つです。NTP は階層構造 (Stratum) で動作します。

  • Stratum 0: 原子時計、GPS 受信機などの高精度時刻源。直接ネットワークに接続されない
  • Stratum 1: Stratum 0 に直接接続された NTP サーバー。「一次参照時計」
  • Stratum 2: Stratum 1 から時刻を取得するサーバー。多くの公開 NTP サーバーがここ
  • Stratum 3 以降: 順次下位のサーバーから時刻を取得。最大 Stratum 15 まで

NTP は単にサーバーの時刻をコピーするのではなく、ネットワーク遅延を計測して補正します。複数のサーバーから時刻を取得し、統計的に最も信頼できる値を選択するアルゴリズムを使用しています。

時刻がズレると壊れるもの

TLS 証明書の検証

TLS 証明書には有効期間 (Not Before / Not After) が設定されています。クライアントの時計が大きくズレていると、有効な証明書を「期限切れ」と判定したり、まだ有効でない証明書を「有効」と判定したりします。証明書の透明性の仕組みも、正確な時刻に依存しています。

TOTP (時刻ベースのワンタイムパスワード)

Google Authenticator などの認証アプリは、現在時刻を元に 30 秒ごとに変わるコードを生成します。サーバーとクライアントの時刻が 30 秒以上ズレると、コードが一致しなくなりログインできません。

Kerberos 認証

Active Directory で使われる Kerberos 認証は、デフォルトで 5 分以上の時刻差を許容しません。企業ネットワークで NTP が停止すると、全社員がログインできなくなる事態が発生します。

分散データベース

Google Spanner のような分散データベースは、トランザクションの順序を時刻で決定します。Google は TrueTime という独自の時刻同期システムを開発し、原子時計と GPS を組み合わせてマイクロ秒単位の精度を実現しています。

ログの信頼性

セキュリティインシデントの調査では、複数のサーバーのログを時系列で突き合わせます。時刻がズレていると、イベントの因果関係を正しく再構成できません。

うるう秒 - 時刻同期の最大の敵

地球の自転速度は一定ではないため、原子時計の時刻 (UTC) と地球の自転に基づく時刻のズレを補正するために「うるう秒」が挿入されることがあります。23:59:59 の次に 23:59:60 という通常存在しない秒が追加されます。

2012 年のうるう秒挿入時、Linux カーネルのバグにより Reddit、Gawker、LinkedIn などのサービスが障害を起こしました。多くのソフトウェアが「1 分は 60 秒」を前提としており、61 秒目の存在を想定していなかったためです。

この問題を受けて、Google は「うるう秒スミア (leap smear)」という手法を開発しました。うるう秒を 1 秒として一度に挿入するのではなく、24 時間かけて少しずつ時刻を調整する方法です。2022 年、国際度量衡総会 (CGPM) は 2035 年までにうるう秒を廃止する決議を採択しました。

まとめ

時刻同期は、インターネットの「見えないインフラ」の中でも特に地味ですが、その重要性は計り知れません。TLS、2FA、Kerberos、分散データベース、ログ分析 - これらすべてが正確な時刻に依存しています。IP 確認さんで接続情報を確認するとき、その通信を支える TLS ハンドシェイクも、正確な時刻同期の上に成り立っています。

時刻同期とネットワークプロトコルの仕組みを学びたい方には、ネットワーク管理の入門書が参考になります。

この記事の関連用語

TLS 証明書の有効期間検証に正確な時刻が必要。時刻ズレで証明書エラーが発生する。 二要素認証 TOTP は現在時刻からコードを生成するため、時刻ズレでログイン不能になる。 IP アドレス NTP サーバーへの接続にも IP アドレスが使用される。 DNS DNSSEC の署名検証にも正確な時刻が必要。 HTTPS TLS 証明書の有効期間チェックを通じて、時刻同期に依存する。