3.5. The KRB_PRIV Exchange (KRB_PRIV交換)
3.5. The KRB_PRIV Exchange (KRB_PRIV交換)
KRB_PRIVメッセージは, プライベートで安全な通信を提供します。メッセージは暗号化され, タイムスタンプとシーケンス番号を使用してリプレイ攻撃を防ぎます。KRB_PRIVメッセージは, KRB_SAFEメッセージと似ていますが, ユーザーデータが暗号化され, チェックサムは暗号化アルゴリズムの一部として含まれる点が異なります。
3.5.1. Generation of a KRB_PRIV Message (KRB_PRIVメッセージの生成)
アプリケーションがKRB_PRIVメッセージを送信したい場合, そのデータと適切な制御情報を収集し, それらを暗号化します。暗号化アルゴリズムは, サブセッションまたはセッション鍵に使用される暗号システムに対して義務付けられている暗号化アルゴリズムであるべきです (SHOULD)。暗号化は, 存在する場合はサブセッション鍵を使用して行われ, そうでない場合はセッション鍵を使用して行われます。
KRB_PRIVメッセージの制御情報には, タイムスタンプとシーケンス番号の両方が含まれます。KRB_PRIVメッセージを使用するアプリケーションの設計者は, 2つのメカニズムのうち少なくとも1つを選択しなければなりません (MUST)。この選択は, アプリケーションプロトコルのニーズに基づいて行うべきです (SHOULD)。
データと制御情報を暗号化した後, クライアントはセクション5.7.1で指定されたメッセージ形式で情報を受信者に送信します。
3.5.2. Receipt of KRB_PRIV Message (KRB_PRIVメッセージの受信)
アプリケーションがKRB_PRIVメッセージを受信すると, 次のように検証します。エラーが発生した場合, アプリケーションが使用するエラーコードが報告されます。
メッセージは最初に, プロトコルバージョンとタイプフィールドがそれぞれ現在のバージョンとKRB_PRIVに一致することを確認することによってチェックされます。不一致は KRB_AP_ERR_BADVERSION または KRB_AP_ERR_MSG_TYPE エラーを生成します。アプリケーションは次に, 適切なサブセッションまたはセッション鍵を使用してメッセージを復号化しようとします。復号化に失敗した場合, KRB_AP_ERR_BAD_INTEGRITY エラーが生成されます。
送信者のアドレスは制御情報に含まれていなければなりません (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 エラーが生成されます。
すべてのチェックが成功した場合, アプリケーションは, メッセージがピアによって生成され, 転送中に読み取られたり変更されたりしなかったことを保証されます。