原子時計の精度 - 1 秒の定義を支える量子物理学の応用
セシウム原子時計から光格子時計まで、原子時計の動作原理と驚異的な精度を解説。GPS、金融取引、科学実験など、超精密時刻が社会基盤を支える仕組みを紹介します。
分散システムにおいて、各ノードの時刻が一致していることは多くの処理の前提条件です。ログの時系列分析、分散データベースのトランザクション順序付け、TLS 証明書の有効期限検証、Kerberos 認証のチケット有効性判定など、時刻のずれが許容範囲を超えると機能が破綻するシステムは数多く存在します。
Kerberos 認証はデフォルトで 5 分以上の時刻ずれを拒否し、TLS 証明書は有効期間外のアクセスを遮断します。AWS の署名バージョン 4 (SigV4) は 15 分以上の時刻ずれがあるリクエストを拒否します。これらの閾値は一見余裕があるように見えますが、時刻同期が停止した状態で数時間放置されれば容易に超過します。
NTP は階層的な時刻配信モデルを採用しています。最上位の Stratum 0 は原子時計や GPS 受信機などの物理的な時刻源であり、直接ネットワークに接続されません。Stratum 0 に直結したサーバーが Stratum 1、Stratum 1 から時刻を取得するサーバーが Stratum 2、以下同様に最大 Stratum 15 まで階層が続きます。Stratum 16 は「同期していない」ことを意味します。
この階層構造により、少数の高精度時刻源から数百万台のクライアントへ効率的に時刻を配信できます。各クライアントは複数の上位サーバーから時刻を取得し、統計的な処理で最も信頼性の高い時刻を選択します。単一のサーバーに障害が発生しても、他のサーバーから時刻を取得し続けられる冗長性が確保されています。
ネットワーク越しの時刻同期で最大の課題は、パケットの伝送遅延です。NTP はクライアントがリクエストを送信した時刻 (T1)、サーバーがリクエストを受信した時刻 (T2)、サーバーが応答を送信した時刻 (T3)、クライアントが応答を受信した時刻 (T4) の 4 つのタイムスタンプを使い、時刻のオフセットと往復遅延を計算します。
オフセット (クライアントとサーバーの時刻差) は ((T2 - T1) + (T3 - T4)) / 2 で求められます。この計算は、往路と復路の遅延が等しいという仮定に基づいています。実際のネットワークでは非対称な遅延が存在するため、NTP は複数回の測定結果を統計的にフィルタリングし、外れ値を除去して精度を高めます。LAN 環境では 1 ミリ秒以下、インターネット経由でも数十ミリ秒の精度が達成可能です。
従来の参照実装である ntpd (ntp.org) は長い歴史と実績がありますが、コードベースが大きく、起動時の初期同期に時間がかかる欠点があります。Red Hat が開発した chrony は、ネットワーク接続が断続的な環境 (ノート PC、仮想マシン) での動作に優れ、起動後数秒で初期同期を完了します。現在の主要な Linux ディストリビューション (RHEL 8+, Ubuntu 20.04+) ではデフォルトの NTP クライアントとして chrony が採用されています。
systemd-timesyncd は SNTP (Simple NTP) クライアントとして最小限の時刻同期を提供します。NTP サーバーとしての機能は持たず、クライアント専用です。デスクトップ Linux やコンテナ環境など、高精度が不要で軽量さを優先する場面に適しています。クラウド環境では、AWS の Amazon Time Sync Service (169.254.169.123) や Google の smear NTP サーバーなど、プロバイダー提供の時刻源を利用するのが最も簡便です。
従来の NTP は認証機能が脆弱であり、中間者攻撃 (MITM) によるパケット改ざんや、NTP リフレクション攻撃 (DDoS の増幅器として悪用) といったセキュリティ上の課題を抱えています。時刻を意図的にずらす攻撃は、TLS 証明書の有効期限チェックを回避したり、ログのタイムスタンプを操作して監査証跡を破壊したりする手段として悪用される可能性があります。
これらの課題に対応するため、NTS (Network Time Security) が RFC 8915 として 2020 年に標準化されました。NTS は TLS 1.3 をベースとした認証・暗号化メカニズムを NTP に追加し、パケットの改ざんと偽装を防止します。chrony 4.0 以降は NTS をサポートしており、Cloudflare (time.cloudflare.com) などが NTS 対応の公開サーバーを提供しています。
この記事は役に立ちましたか?