0001田杉山脈 ★
2020/01/16(木) 17:30:51.08ID:CAP_USERCloudFlareの無償タイムサービスであるtime.cloudflare.comは、NTPに加えて最新のNTSプロトコルをサポートしているが、リリース時点では、利用可能なNTSクライアントがあまり多くはなかった。新たなCNFTSプロジェクトのリリースによって同社は、NTSプロトコルの普及を促進したいと考えている。また、先日リリースされたNTPSecもNTSをサポートしている。
CloudFlareでは、NTPsecまたは同社のCNFTSプロジェクトでtime.cloudflare.comを使用することを推奨している。注意する点としては、使用に際してTLS 1.3をサポートするデーモンが必要なことだ。
NTSは2つのサブプロトコルからなるスイートである。1番目のNetwork Time Security Key Exchange(NTS-KE)は、キーマテリアルの生成処理と、第2のプロトコルであるNTPv4のためのパラメータネゴシエーションを担当する。現行のNTPプロトコルであるNTPv4は、クライアントがリモートサーバとの時間同期を行うことを可能にする。
CloudFlareの暗号処理エンジニアであるWatson Ladd氏と、同社ソフトウェアエンジニアのPop Chunhapanya氏は、次のように述べている。
NTPv4のスケーラビリティを維持する上で重要なのは、サーバがクライアント毎の状態を保持する必要のないことです。ごく小規模なサーバでも、数百万台のNTPクライアントに対応が可能なのです。この特徴を維持しながらセキュリティを提供するために、クッキーを使用して、サーバの状態をクライアントに提供しています。
第1ステージでこれを実現するため、クライアントはNTS-KEサーバにリクエストを送信し、TLS経由で応答を受信する。このステージにはいくつかの機能がある。
第2ステージで使用するAEADアルゴリズムのネゴシエーション
第2プロトコルのネゴシエーション(現在の標準では、NTPv4を使用するNTSの動作のみが定義されている)
NTPサーバのIPアドレスとポートのネゴシエーション
第2ステージで使用するクッキーの生成
TLSセッションによる2つの対象鍵(C2SとS2C)の生成
第2ステージでは、クライアントが、ネゴシエーションしたNTPサーバとの時間同期を安全に行うことができる。これを実現するため、クライアントは、NTPv4パケットを4つのエクステンションを加えて送信する。第1のエクステンションであるユニークIDエクステンション(unique identifier extension)には、リプレイ攻撃を防ぐためのランダムなナンス(nonce)が含まれている。次のNTSクッキーエクステンション(NTS cookie extension)は、2つのクッキーのひとつをクライアントに提供する。2つのAEAD鍵(C2SとS2C)はクライアントのみが記憶しているため、サーバが鍵を取得するためにこのクッキーが必要なのだ。このクッキーには、サーバの秘密鍵で暗号化された鍵情報が格納されている。
第3のエクステンションであるNTSクッキープレースホルダエクステンション(NTS cookie placeholder extension)では、サーバからの追加クッキーを要求するために、クライアントからシグナルが送信される。これは、要求に対する応答が必要以上に長いものでないことを保証して、アンプ攻撃(amplification attack)を防止するために必要なものだ。最後のエクステンションであるNTS認証及び暗号化エクステンションフィールドエクステンション(NTS authenticator and encrypted extension fields extension)には、C2Sを鍵に使用したAEADアルゴリズムによる暗号化テキスト(ciphertext)とNTPヘッダ、タイムスタンプ、および関連データとしてこれまでのすべてのエクステンションが含まれている。このヘッダは、タイムスタンプのなりすまし(spoof)を防止するために必要となる。
以下ソース
https://www.infoq.com/jp/news/2020/01/cloudflare-open-source-nts/