2.4. 状態同期と接続タイムアウト
2.4. 状態同期と接続タイムアウト
IKE エンドポイントは, いつでも IKE SA と対応する Child SA の集合に関連付けられたすべての状態を忘れることが許可されています。これは, エンドポイントのクラッシュと再起動が発生した場合に予想される動作です。エンドポイントが失敗するか, その状態を再初期化するときに, 相手のエンドポイントがそれらの状態を検出し, 破棄された SA 上でパケットを送信してブラックホールに落ち込ませることによってネットワーク帯域幅を無駄にし続けないことが重要です。
INITIAL_CONTACT 通知は, この IKE SA が認証された識別情報の間で現在アクティブな唯一の IKE SA であることを宣言します。これは, クラッシュ後に IKE SA が確立されたときに送信してもよい (MAY) ものであり, 受信者はこの情報を使用して, タイムアウトを待たずに同じ認証された識別情報に対する他の IKE SA を削除してもよい (MAY)。この通知は, 複製される可能性のあるエンティティ (たとえば, ユーザーが 2 つのリモートシステムから同時に企業ファイアウォールに接続することを許可されているローミングユーザーの資格情報) によって送信してはなりません (MUST NOT)。INITIAL_CONTACT 通知は, 送信する場合, 最初の IKE_AUTH 要求または応答内に含めなければならず (MUST), その後に別個の交換として含めてはなりません。受信当事者は, 他のメッセージ内でそれを無視してもよい (MAY)。
IKE はネットワークからの DoS 攻撃にもかかわらず動作するように設計されているため, エンドポイントは, 任意のルーティング情報 (たとえば ICMP メッセージ) または暗号的に保護されずに到着する IKE メッセージ (たとえば, 未知の SPI について不満を述べる通知メッセージ) に基づいて, 相手のエンドポイントが失敗したと結論付けてはなりません (MUST NOT)。エンドポイントは, 相手への接続の試みを繰り返してもタイムアウト期間にわたって応答がない場合, または同じ認証された識別情報に対する別の IKE SA 上で暗号的に保護された INITIAL_CONTACT 通知を受信した場合にのみ, 相手のエンドポイントが失敗したと結論付けなければなりません (MUST)。エンドポイントは, ルーティング情報に基づいて相手のエンドポイントが失敗した疑いを持ち, 相手が生存しているかどうかを確認するための要求を開始すべきです。相手側が生存しているかどうかを確認するために, IKE は空の INFORMATIONAL メッセージを指定しており, これは (すべての IKE 要求と同様に) 確認応答を必要とします (IKE SA のコンテキスト内では,"空の"メッセージは IKE ヘッダーと, ペイロードをまったく含まない Encrypted ペイロードで構成されることに注意してください)。最近相手側から暗号的に保護された (新しく, すなわち再送されていない) メッセージが受信された場合, 保護されていない通知メッセージは無視してもよい (MAY)。実装は, 保護されていないメッセージに基づいてアクションを実行するレートを制限しなければなりません (MUST)。
再試行の回数とタイムアウトの長さは, 相互運用性に影響を与えないため, この仕様では扱われません。SA をあきらめる前に, 少なくとも数分の期間にわたってメッセージを少なくとも 12 回再送することが推奨されますが, 環境によって異なるルールが必要になる場合があります。優れたネットワーク市民であるために, 再送時間は指数関数的に増加させなければなりません (MUST)。既存の輻輳状態を悪化させたり, ネットワークにフラッディングを引き起こしたりしないようにするためです。IKE SA に関連付けられたすべての SA 上で送信のみが行われていた場合, ブラックホールを回避するために相手エンドポイントの生存性を確認することが不可欠です。IKE SA またはその Child SA のいずれかで最近暗号的に保護されたメッセージが受信されていない場合, システムは, 死んだピアにメッセージを送信しないようにするために, 生存性チェックを実行する必要があります。(これは "デッドピア検出 (dead peer detection)" または "DPD" と呼ばれることもありますが, 実際には死んだピアではなく生存しているピアを検出しています。) IKE SA またはその Child SA のいずれかで新しい暗号的に保護されたメッセージを受信すると, IKE SA とそのすべての Child SA の生存性が保証されます。これは IKE エンドポイントの障害モードに要件を課すことに注意してください。実装は, 何らかの障害が関連するすべての SA 上で受信することを妨げる場合, 任意の SA 上での送信を停止する必要があります。システムが, 関連する IKE SA が削除メッセージを送信できない状態で互いに独立して失敗できる Child SA を作成する場合, そのシステムはそのような Child SA を別個の IKE SA を使用してネゴシエートしなければなりません (MUST)。
IKE SA のイニシエータに対する DoS 攻撃がありますが, これはイニシエータが適切な注意を払えば回避できます。SA セットアップの最初の 2 つのメッセージは暗号的に保護されていないため, 攻撃者は本物のレスポンダの前にイニシエータのメッセージに応答して, 接続セットアップの試みを汚染する可能性があります。これを防ぐために, イニシエータは, 最初のメッセージに対する複数の応答を受け入れ, それぞれを潜在的に正当なものとして扱い, それに応答し, そしてその要求のいずれかに対する有効な暗号的に保護された応答を受信したときに, すべての無効なハーフオープン接続を破棄してもよい (MAY)。暗号的に有効な応答が受信されたら, その後のすべての応答は, 暗号的に有効であるかどうかに関係なく無視すべきです。
これらのルールにより, SA の生存期間をネゴシエートして合意する理由はないことに注意してください。IKE が IKE メッセージに対する確認応答の欠如の繰り返しに基づいてパートナーが死んでいると推定する場合, IKE SA とその IKE SA を通じて確立されたすべての Child SA が削除されます。
IKE エンドポイントは, いつでも非アクティブな Child SA を削除して, それらの状態を保持するために使用されるリソースを回収してもよい (MAY)。IKE エンドポイントが Child SA を削除することを選択した場合, 削除を通知する Delete ペイロードを相手端に送信しなければなりません (MUST)。同様に IKE SA をタイムアウトさせてもよい (MAY)。IKE SA を閉じると, 関連するすべての Child SA が暗黙的に閉じられます。この場合, IKE エンドポイントは, 相手エンドポイントがもはや応答していない場合を除き, IKE SA を閉じたことを示す Delete ペイロードを送信すべきです (SHOULD)。