3.6. The KRB_CRED Exchange (KRB_CRED交換)
3.6. The KRB_CRED Exchange (KRB_CRED交換)
KRB_CREDメッセージは, クライアントが別のクライアントに認証情報 (credentials) を送信するために使用されます。これは通常, チケットとそれに関連するセッション鍵を転送するために使用されます。KRB_CREDメッセージは, プロキシまたは転送されたチケットを別のホストに送信するため, またはユーザーのチケット取得チケット (Ticket-Granting Ticket, TGT) をユーザーの資格情報キャッシュ (credentials cache) に送信するために使用できます。
3.6.1. Generation of a KRB_CRED Message (KRB_CREDメッセージの生成)
アプリケーションがKRB_CREDメッセージを送信したい場合, チケット, セッション鍵, およびその他の情報を収集し, それらを暗号化します。
チケット自体は既に暗号化されているため, 再度暗号化する必要はありません。セッション鍵と追加情報は, 送信者と受信者の間で事前に確立された暗号化鍵を使用して暗号化されます。この鍵が存在しない場合, KRB_CREDメッセージは暗号化されずに送信される可能性があります (MAY) が, これはセキュアでないチャネルでは推奨されません。
KRB_CREDメッセージを生成する際, 送信者はセクション5.8.1で指定された形式に従わなければなりません (MUST)。メッセージには以下の情報が含まれます:
- tickets: 転送されるチケットのシーケンス
- enc-part: チケットに関連する暗号化された情報 (セッション鍵, クライアント名, タイムスタンプなど)
enc-part が暗号化される場合, 送信者と受信者の間で共有されるサブセッション鍵またはセッション鍵を使用して暗号化されるべきです (SHOULD)。
3.6.2. Receipt of KRB_CRED Message (KRB_CREDメッセージの受信)
アプリケーションがKRB_CREDメッセージを受信すると, 次のように処理します。エラーが発生した場合, アプリケーションが使用するエラーコードが報告されます。
メッセージは最初に, プロトコルバージョンとタイプフィールドがそれぞれ現在のバージョンとKRB_CREDに一致することを確認することによってチェックされます。不一致は KRB_AP_ERR_BADVERSION または KRB_AP_ERR_MSG_TYPE エラーを生成します。
enc-part が暗号化されている場合, アプリケーションは適切な鍵を使用してそれを復号化しようとします。復号化に失敗した場合, KRB_AP_ERR_BAD_INTEGRITY エラーが生成されます。
enc-part が暗号化されていない場合 (これは安全でないチャネルでは推奨されません), 受信者はメッセージの信頼性を他の手段で検証する必要があります。
復号化が成功した場合, 受信者は以下の情報を検証します:
- タイムスタンプが存在し, 現在の時刻の許容範囲内にあることを確認します。タイムスタンプが古すぎる場合, KRB_AP_ERR_SKEW エラーが生成されます。
- 送信者のアドレスが含まれている場合, それがオペレーティングシステムが報告するアドレスと一致することを確認します。一致しない場合, KRB_AP_ERR_BADADDR エラーが生成されます。
- nonce が存在する場合, それが期待される値と一致することを確認します。
すべてのチェックが成功した場合, 受信者はチケットとセッション鍵を自分の資格情報キャッシュに保存し, 後でサービスへの認証に使用できます。
KRB_CREDメッセージは機密性の高い情報 (セッション鍵) を含むため, セキュアでないチャネルで暗号化されずに送信されるべきではありません (SHOULD NOT)。可能な限り, 送信者と受信者の間で共有される鍵を使用して enc-part を暗号化するべきです (SHOULD)。