要約

  • 一致する PATH_RESPONSE は、特定の予測困難な PATH_CHALLENGE を受け取った相手が、その8バイトの値を返せたことを示す。
  • それは人、端末、アカウント、アプリケーションの身元、認可、暗号学的な相手の身元、MTU、将来の経路可用性を示さない。
  • 運用台帳では、経路の返答性を認証、認可、業務結果、保存方針から分離しなければならない。

運用担当者が一致する PATH_RESPONSE を見て、それを恒久的な身元や信頼の判定に変える。問題はこの一歩にある。RFC 9000 の経路検証は、ネットワーク経路を通じた相手への到達性を確認する仕組みだ。接続移行の際に使われ、新しいローカルアドレスを移行前に調べる用途にも使える。しかし、相手が誰であるかを確認する設計ではない。

エンドポイントは検証したい経路上で PATH_CHALLENGE を送る。データには少なくとも64ビットのエントロピーが必要で、予測困難な8バイト値が使われる。受信側は同じデータを PATH_RESPONSE に入れて返す。応答は、チャレンジが到着した経路で送信されなければならない。一方、開始側は一致する応答がどのネットワーク経路から到着しても受け入れる。この組み合わせが重要だ。応答側は受信経路で値を返せたことを示し、開始側が応答の到着経路を固定しないことで移行攻撃を招く条件を避ける。

以前に送った PATH_CHALLENGE のデータを含む PATH_RESPONSE を受け取れば検証は成功する。チャレンジを運んだパケットへの ACK だけでは不十分だ。悪意ある相手は ACK を偽装できるからである。損失に耐えるため複数のチャレンジを送ることはできるが、同じパケットに複数を置くべきではない。候補経路から届いた別のパケットやフレームは、必要な一致応答の代わりにならない。

検証対象は、その時点におけるアドレスと経路の状態であって、人、端末、アカウント、アプリケーション主体ではない。暗号学的な相手の身元、認可、取引結果、将来の経路可用性も証明しない。これは RFC 9000 の狭い成功条件から導かれる運用上の境界であり、経路検証が別途提供する身元情報ではない。暗号学的認証、アプリケーションの身元、認可、業務結果、保存方針は別々の項目にする必要がある。

経路検証と経路 MTU 検証も分けなければならない。1200バイト未満のデータグラムでチャレンジに成功しても、相手のアドレスや経路を検証できるだけで、必要な MTU を使えるとは限らない。MTU の確認には、さらに拡張したチャレンジが必要だ。PATH_RESPONSE のデータグラムは通常少なくとも1200バイトに拡張されるが、反増幅制限を超えてはならない。台帳ではアドレス検証結果と MTU 検証結果、データグラムサイズ、検証前後の反増幅状態を別に記録する。

応答が一度届かなかっただけで、直ちに失敗とはならない。RFC 9000 は、現在の経路と新しい経路の PTO の大きい方の3倍を基礎にしたタイマーを推奨し、単一の損失で結論が決まらないよう複数の PTO を許す。検証端が試行を放棄して初めて検証は失敗する。ある経路を放棄しても、別の有効な経路を使えるなら接続は必ずしも終了しない。新しい経路のプローブ失敗が意味するのは、その経路がその接続では使えないということだけだ。

NAT リバインディングを含む相手アドレスの変化が検出された場合、以前に検証済みでない限り経路を検証する必要がある。これは QUIC の経路検証が NAT トラバーサルになることを意味しない。RFC 9000 は有効な NAT トラバーサルに必要な同期機構を定義していない。移行先では容量やタイミングが変わり得るため、QUIC は以前の経路の測定を保証として使わず、輻輳制御と RTT の状態をリセットする。

運用台帳には、接続単位の経路識別子とプライバシーに配慮したチャレンジダイジェスト、チャレンジと応答の時刻、試験したローカル/リモートのアドレス組、データグラムサイズ、データの一致結果、応答の到着経路を記録するとよい。相手アドレス検証と MTU 検証、反増幅状態、現在経路と候補経路の PTO 入力、放棄理由、タイマー結果を分ける。NAT リバインディングまたは移行の契機、以前の検証済みアドレス、利用可能な代替経路も独立項目にする。ダイジェストや保存制御は運用上の推奨であり、QUIC の要件ではない。

五つの分離も維持する必要がある。TR-039 はアドレス検証前の反増幅予算、TR-033 は DNS Cookie の戻り経路の証拠、TR-043 は Retry の完全性、TR-040 は Connection ID と身元の分離、TR-061 は将来の接続で再利用する NEW_TOKEN のアドレス検証を扱う。PATH_RESPONSE はそれらの代替ではない。