NTP(ネットワークタイムプロトコル)とは?基礎知識を整理

「時刻を自動的に設定」というオプションの裏側で、静かに働き続けているプロトコルです。

NTP(ネットワークタイムプロトコル)とは

NTPは、コンピューターやサーバー、ネットワーク機器が持つ内部時計を、インターネット上の正確な時刻サーバーと定期的に照合できるようにする標準プロトコルで、UDPの123番ポートを使用します。人がラジオの時報で腕時計を合わせるのと同じように、機器同士が自動的に時刻を問い合わせて自分の時計を補正します。

時刻の正確さが重要な理由

ブラウザはHTTPS証明書の有効期限を自分の機器の時計と比較して判定するため、時計が大きくずれていると正常なサイトでも証明書エラーが表示されることがあります。ワンタイムパスワード(OTP)認証アプリは現在時刻を基準にコードを生成するため、サーバーと機器の時刻差が大きいと認証に失敗し続けます。複数サーバーのログを時系列で正しく比較する作業も、各サーバーの時計が合っていて初めて意味を持ちます。

ストラータム(階層)構造

ストラータム0は、それ自体はネットワークに接続されていない原子時計やGPS受信機のような最上位の基準時刻源を指します。この基準に直接接続されたサーバーがストラータム1となって他のサーバーに時刻を提供し、ストラータム1を参照するサーバーはストラータム2、というように階層が下がっていきます。数字が小さいほど、基準時刻源に近いことを意味します。

NTPが誤差を補正する仕組み

NTPクライアントは複数の時刻サーバーに問い合わせを送り、リクエスト送信から応答受信までの時間から往復の通信遅延を推定した上で、自分の時計とサーバーの時刻とのずれ(オフセット)を計算します。極端に外れた値は除外し、時計を一気に前後させるのではなく、時計の進む速度を少しずつ調整して徐々に合わせていく方式を取ります。この方法により、通常は数ミリ秒から数十ミリ秒程度の精度で同期を維持できます。

身近な機器で使われているNTP

Windows、macOS、Android、iOSはいずれもインターネット経由で時刻を自動的に合わせる機能を標準搭載しており、これはNTPを利用したものです。この設定をオフにしていたり、ファイアウォールがNTP通信(UDPの123番ポート)を遮断していたりすると、内部時計が少しずつずれていき、後になってサインインの失敗や証明書エラーといった予期しない問題につながることがあります。

NTPに関連するセキュリティリスク

設定が甘い公開NTPサーバーは、攻撃者がわずかなリクエストではるかに大きな応答を誘発させる増幅攻撃(NTP増幅DDoS攻撃)に悪用されることがあります。自前でNTPサーバーを運用する場合は、不特定多数からの問い合わせに応答しないようアクセスを制限し、既知の脆弱性が修正された最新版のソフトウェアを維持することが推奨されます。

1回のやり取りで記録される4つの時刻

NTPのやり取りでは、クライアントの送信時刻(T1)、サーバーの受信時刻(T2)、サーバーの返信時刻(T3)、クライアントの受信時刻(T4)の4つが記録されます。往復遅延は(T4-T1)からサーバー内の処理時間(T3-T2)を引いたもの、時計のずれは((T2-T1)+(T3-T4))/2で推定されます。この計算は往路と復路の所要時間がほぼ等しいことを前提としているため、経路が非対称だと小さな誤差が残ります。

NTPとSNTPの違い

SNTP(Simple NTP)は同じパケット形式を使いますが、フィルタリングや時計の補正アルゴリズムを省き、1台のサーバーに問い合わせて時計を合わせるだけの簡易版です。スマートフォンや組み込み機器の多くは軽量なSNTPを使っています。ntpdやchronyのような本格的な実装は複数のサーバーに問い合わせてノイズを除き、内部時計のずれの傾向も追跡するため、より安定した結果が得られます。

公開サーバーとNTPプール

家庭の機器はWindowsのtime.windows.comやAppleのtime.apple.comといったメーカー既定のサーバーを使うことが多く、Linuxではボランティアが運営するpool.ntp.orgがよく使われます。これは1つの名前に多数のサーバーを割り当てて負荷を分散する仕組みです。大きな組織では社内にNTPサーバーを立てて上位と同期させ、社内の機器はそのサーバーに問い合わせるのが一般的です。

うるう秒とスミアリング

地球の自転は一定ではないため、UTCにはときどきうるう秒が挿入されます。ソフトウェアにとって扱いにくく、同じ秒を繰り返す実装も止める実装もあります。大手事業者の中には、数時間かけて時計の進みをわずかに遅らせ、追加の1秒を少しずつ吸収するスミアリングという方式を採るところがあります。スミアリングするサーバーとしないサーバーを同じクライアントの設定に混ぜると、ずれが不自然に見えることがあるため、方式を統一するのが賢明です。

NTSによる認証付き時刻同期

従来のNTPのパケットは標準では認証されないため、経路上の攻撃者がクライアントの時計をずらす余地が理論上ありました。RFC 8915で標準化されたNTS(Network Time Security)は、TLSによる鍵交換と認証付きのNTPパケットを加えます。chronyの新しいバージョンや一部の公開サービスが対応しており、利用できる環境では有効にする価値があります。

GPSが普及した今でもNTPが必要な理由

GPS受信機は非常に正確な時刻を提供しますが、ノートパソコンや屋内のスマートフォン、IoTセンサー、データセンター内のサーバーなど、身の回りの機器の多くはGPS受信機を内蔵しておらず、そもそも衛星が見える環境にもありません。そこでストラータム階層の出番です。GPSや原子時計に接続されたごく少数のストラータム1サーバーが、公開・組織内の膨大な数のNTPサーバー群を通じて時刻を配信することで、自前の基準時計を持たないほぼすべてのインターネット接続機器にまで正確な時刻が行き渡ります。

補足:NTPの精度にも限界がある

一般的なNTPの同期精度は数ミリ秒から数十ミリ秒程度で、ウェブ閲覧や認証、通常のログ記録には十分すぎるほどです。一方、金融取引システムや通信ネットワーク、マイクロ秒・ナノ秒単位の精度が必要な科学機器では、オープンなインターネットではなく制御された低遅延ネットワーク向けに設計された、より厳密な規格であるPTP(Precision Time Protocol)が使われます。要件にミリ秒未満のタイミング精度が含まれる場合、NTP単体では通常不十分です。

時計がずれたときの確認と対処

Windowsでは日付と時刻の設定で自動設定がオンか確認し、コマンドw32tm /query /statusで同期元と最後の同期時刻を確認できます。Linuxではtimedatectlで同期済みかどうかが分かり、chronyを使っているならchronyc trackingで現在のずれを見られます。同期できない場合は、外向きのUDP 123番ポートが開いているか、時刻サーバー名をDNSで解決できるか、ハードウェア時計が極端にずれていないかを確認してください。仮想マシンではホストとゲストが時刻を取り合うことがあるため、同期の方法は1つに絞ります。自分で管理するネットワークでは、すべての機器を同じ社内サーバーに向けると、各機器のログの時刻が揃います。

2036年問題への備え

NTPは1900年を起点とした32ビットの秒カウンターを使っており、この値は2036年に一巡します。プロトコルにはエラ(era)という番号による対処が用意されており、最近の実装は現在の日付に近い時刻と解釈して曖昧さを解決します。ただし更新できない古い組み込み機器は誤動作する可能性があるため、産業用コントローラーなど長く使う機器は早めに洗い出しておくとよいでしょう。UNIX時刻の2038年問題と似ていますが、別の問題です。

よくある質問

コンピューターの時計がずれると、実際にどんな問題が起きますか?

代表的な例としては、正常なHTTPSサイトにアクセスしているのに証明書エラーが表示される、2段階認証(OTP)のコードが何度入力しても無効と判定される、複数サーバーのログを正しい時系列順に比較しづらくなる、といった問題が挙げられます。

スマートフォンもNTPで時刻を合わせていますか?

はい。ほとんどのスマートフォンは、設定で「ネットワーク提供の時刻を使用」のようなオプションを有効にしておくと、通信キャリアのネットワークやインターネットを通じて自動的に時刻を同期します。このオプションをオフにすると端末自身の時計だけに頼ることになり、時間とともに少しずつずれていく可能性があります。

NTPの増幅攻撃は今も問題ですか?

よく知られた事例は、ntpdの古いmonlistコマンドが直近のクライアントの長い一覧を返したことによるもので、後のバージョンで修正されています。更新済みで、想定したクライアントにだけ応答するよう設定されたサーバーは、攻撃者にとってあまり役に立ちません。リスクが残るのは、更新されないままインターネットに公開された古い機器です。

スマートフォンが通信キャリアから受け取る時刻とNTPは別のものですか?

携帯電話網でも時刻が配信されており、端末は設定に応じてそちらかNTP方式のインターネット同期を使います。どちらも同じUTCを基準にしていますが、キャリアの時刻は精度が粗いことがあり、細かい精度が必要な場合はインターネット同期が使われます。

クライアントは何台のサーバーを指定すべきですか?

独立した3〜4台以上を指定すると、1台が間違っていてもそれを見抜いて除外できます。1台だけでは単一障害点になり、2台だと食い違ったときにどちらが正しいか判断できません。