サーバが正しい時刻に設定されていることは重要であり、時刻同期に使用されるNTPにおいてもサーバの認証や改ざんを防ぎたいというモチベーションは理解できる。
IETFのNTP WGでは、まさにNTPを暗号的に保護する「Network Time Security for the Network Time Protocol」という仕様策定が進められている。
NTPにはいくつかモードがあるが client-server モードを前提としている。
NTPは詳しくないがざっと見てみる
(正しくはNTPの暗号化ではなく、保護的な感じはある)
目的
Network Time Securityの目的は以下の通り
- Identity: x.509 証明書で通信相手を確認する
- Authentication: 時刻同期のパケットを認証し、改ざんされていないことを確認する
- Confidentiality: 時刻情報に秘匿性はありませんが、NTP拡張フィールドの暗号化をサポートする
- Replay prevention: 以前のパケットが再送されても検知できるようにする
- Request-response consistency: クライアントの要求に対する応答で有ることを確かにする
- Unlinkability: クライアントが別のネットワークに移動して通信を行ったとしても、経路上からは同一クライアントか識別できないようにする
- Non-amplification: 増幅攻撃が行われないように、リクエストより大きなレスポンスを返さない
- Scalability: サーバはユーザ固有の状態を保存せず、多くのクライアントにサービスを提供できるようにする
プロトコル概要
暗号化するための鍵を交換するNTS Key Establishment と、NTPv4を暗号化してやりとりするための拡張を定義したNTS Extensions for NTPv4です。
NTS Key Establishment (NTS-KE)
NTPv4のNTS拡張領域で使用するキーマテリアル(お馴染み RFC5705)を取得するメカニズムです。
TLSを使用して鍵を交換し、クライアントに最初のCookie、NTPサーバのIP等を提供します。また、暗号アルゴリズムなどいくつかのパラメータをネゴシエーションします。
NTS Extensions for NTPv4
NTPv4でNTS用の拡張領域を持ちます。この領域によって正しいサーバと通信できており、時刻情報が改ざんされていないことを確認できるようになります。
具体的には以前に取得したキーマテリアルを使用してNTPv4を暗号的に保護する複数の拡張領域が定義されます。
すべての状態はクライアント側に保持され、サーバはクライアントの状態を保持する必要がないため、スケーラビリティがあります。これらの拡張フィールドには、NTS-KEハンドシェイクから抽出されたキーマテリアルを使用して計算されたCookieと認証タグが含まれます。
NTPサーバはこのクッキーを使用してこのキーマテリアルをリカバリし、認証されたレスポンスを返します。 レスポンスには新しく暗号化されたCookieが含まれます。クライアントは次はこのCookieを使用します。こうすることで、返されたレスポンスは自身のリクエストがあってから生成されたレスポンスであることが確認できます。