3.4. The KRB_SAFE Exchange (KRB_SAFE交換)
3.4. The KRB_SAFE Exchange (KRB_SAFE交換)
KRB_SAFEメッセージは, 交換するメッセージの変更を検出する機能を必要とするクライアントによって使用されることができます (MAY)。これは, ユーザーデータといくつかの制御情報の鍵付き衝突耐性チェックサムを含めることによって実現されます。チェックサムは暗号化鍵 (通常はサブキーを介して交渉された最後の鍵, または交渉が行われていない場合はセッション鍵) で鍵付けされます。
3.4.1. Generation of a KRB_SAFE Message (KRB_SAFEメッセージの生成)
アプリケーションがKRB_SAFEメッセージを送信したい場合, そのデータと適切な制御情報を収集し, それらに対してチェックサムを計算します。チェックサムアルゴリズムは, サブセッションまたはセッション鍵に使用される暗号システムと共に実装することが義務付けられている鍵付きチェックサムであるべきです (SHOULD)。チェックサムは, 存在する場合はサブセッション鍵を使用して生成され, そうでない場合はセッション鍵を使用して生成されます。一部の実装ではKRB_SAFEメッセージに異なるチェックサムアルゴリズムを使用していますが, 相互運用可能な方法でそうすることが常に可能であるとは限りません。
KRB_SAFEメッセージの制御情報には, タイムスタンプとシーケンス番号の両方が含まれます。KRB_SAFEメッセージを使用するアプリケーションの設計者は, 2つのメカニズムのうち少なくとも1つを選択しなければなりません (MUST)。この選択は, アプリケーションプロトコルのニーズに基づいて行うべきです (SHOULD)。
シーケンス番号は, 送信されるすべてのメッセージがピアによって受信される場合に有用です。接続状態は現在セッション鍵を維持するために必要であるため, 次のシーケンス番号を維持することは追加の問題を提示しないはずです。
アプリケーションプロトコルが再送信されることなく失われたメッセージを許容することが期待される場合, タイムスタンプの使用が適切なリプレイ検出メカニズムです。タイムスタンプの使用は, すべてのピアが共通のサブセッション鍵を共有しているが, 一部のメッセージがピアのサブセットに送信されるマルチキャストプロトコルにも適切なメカニズムです。
チェックサムを計算した後, クライアントはセクション5.6.1で指定されたメッセージ形式で情報とチェックサムを受信者に送信します。
3.4.2. Receipt of KRB_SAFE Message (KRB_SAFEメッセージの受信)
アプリケーションがKRB_SAFEメッセージを受信すると, 次のように検証します。エラーが発生した場合, アプリケーションが使用するエラーコードが報告されます。
メッセージは最初に, プロトコルバージョンとタイプフィールドがそれぞれ現在のバージョンとKRB_SAFEに一致することを確認することによってチェックされます。不一致は KRB_AP_ERR_BADVERSION または KRB_AP_ERR_MSG_TYPE エラーを生成します。アプリケーションは, 使用されるチェックサムが, 適切なサブセッションまたはセッション鍵 (またはセッションまたはサブセッション鍵から派生したアプリケーション鍵) と互換性のある鍵を使用する衝突耐性鍵付きチェックサムであることを検証します。そうでない場合, KRB_AP_ERR_INAPP_CKSUM エラーが生成されます。送信者のアドレスは制御情報に含まれていなければなりません (MUST)。受信者は, オペレーティングシステムが報告する送信者のアドレスがメッセージ内の送信者のアドレスと一致すること, および (受信者のアドレスが指定されているか, 受信者がアドレスを必要とする場合) 受信者のアドレスの1つがメッセージ内の受信者のアドレスとして表示されることを検証します。ネットワークアドレス変換で動作するために, 送信者は送信者アドレスにセクション8.1で指定された方向性アドレスタイプを使用してもよく (MAY), 受信者アドレスを含めないことができます。いずれかのケースで一致に失敗すると, KRB_AP_ERR_BADADDR エラーが生成されます。次に, タイムスタンプとusec および/または シーケンス番号フィールドがチェックされます。タイムスタンプとusecが期待されているが存在しない場合, または存在するが現在のものでない場合, KRB_AP_ERR_SKEW エラーが生成されます。タイムスタンプは厳密に順序付けされている必要はありません。それらはスキューウィンドウ内にあることだけが要求されます。サーバー名が, クライアント名, 時刻, およびAuthenticatorからのマイクロ秒フィールドと共に, 最近見た (送信または受信した) そのようなタプルのいずれかと一致する場合, KRB_AP_ERR_REPEAT エラーが生成されます。不正なシーケンス番号が含まれている場合, またはシーケンス番号が期待されているが存在しない場合, KRB_AP_ERR_BADORDER エラーが生成されます。タイムスタンプとusecもシーケンス番号も存在しない場合, KRB_AP_ERR_MODIFIED エラーが生成されます。最後に, チェックサムがデータと制御情報に対して計算され, 受信したチェックサムと一致しない場合, KRB_AP_ERR_MODIFIED エラーが生成されます。
すべてのチェックが成功した場合, アプリケーションは, メッセージがピアによって生成され, 転送中に変更されなかったことを保証されます。
実装は, 十分なセキュリティとサブセッションまたはセッション鍵と互換性のある鍵の両方を持つ, 実装する任意のチェックサムアルゴリズムを受け入れるべきです (SHOULD)。鍵なしまたは非衝突耐性チェックサムは, この用途には適していません。