5.5. Client/Server (CS) Message Specifications (クライアント/サーバーメッセージ仕様)
5.5. Client/Server (CS) Message Specifications (クライアント/サーバーメッセージ仕様)
このセクションでは, クライアントとアプリケーションサーバー間の認証に使用されるメッセージの仕様を定義します。
5.5.1. KRB_AP_REQ Definition (KRB_AP_REQ定義)
KRB_AP_REQは, クライアントがサービスに対して自身を認証するために使用されます。
メッセージ構造
AP-REQ ::= [APPLICATION 14] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (14),
ap-options [2] APOptions,
ticket [3] Ticket,
authenticator [4] EncryptedData
}
フィールドの説明
- pvno: プロトコルバージョン番号 (常に5)
- msg-type: メッセージタイプ (AP-REQは14)
- ap-options: APオプションフラグ
- USE-SESSION-KEY: セッション鍵を使用
- MUTUAL-REQUIRED: 相互認証が必要
- ticket: KDCから取得したチケット
- authenticator: クライアントによって生成された認証子 (セッション鍵で暗号化)
Authenticator (認証子)
認証子には以下が含まれます:
- authenticator-vno: 認証子バージョン番号 (5)
- crealm: クライアントのレルム
- cname: クライアントプリンシパル名
- cksum: チェックサム (オプション, アプリケーションデータの完全性保護)
- cusec: マイクロ秒
- ctime: クライアントの現在時刻
- subkey: サブセッション鍵 (オプション)
- seq-number: シーケンス番号 (オプション)
- authorization-data: 認可データ (オプション)
鍵使用値
- Authenticator暗号化: 鍵使用値 11
- Authenticatorチェックサム: 鍵使用値 10
5.5.2. KRB_AP_REP Definition (KRB_AP_REP定義)
KRB_AP_REPは, 相互認証のためにサーバーがクライアントに送信します。
メッセージ構造
AP-REP ::= [APPLICATION 15] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (15),
enc-part [2] EncryptedData
}
暗号化部分 (EncAPRepPart)
セッション鍵またはサブセッション鍵で暗号化された部分:
- ctime: クライアントの時刻 (Authenticatorから)
- cusec: マイクロ秒 (Authenticatorから)
- subkey: サーバーが選択したサブセッション鍵 (オプション)
- seq-number: シーケンス番号 (オプション)
鍵使用値
- AP-REP暗号化部分: 鍵使用値 12
5.5.3. Error Message Reply (エラーメッセージ応答)
認証が失敗した場合, サーバーはKRB-ERRORメッセージを返します。
エラーメッセージには以下が含まれます:
- pvno: プロトコルバージョン番号
- msg-type: メッセージタイプ (30)
- ctime: クライアント時刻 (オプション)
- cusec: マイクロ秒 (オプション)
- stime: サーバー時刻
- susec: サーバーマイクロ秒
- error-code: エラーコード
- crealm: クライアントレルム (オプション)
- cname: クライアント名 (オプション)
- realm: サーバーレルム
- sname: サーバー名
- e-text: エラーテキスト (オプション)
- e-data: エラーデータ (オプション)
相互認証の流れ
相互認証を使用する場合:
- クライアントがMUTUAL-REQUIREDフラグを設定してAP-REQを送信
- サーバーがチケットとAuthenticatorを検証
- サーバーがAP-REPを返して自身のアイデンティティを証明
- クライアントがAP-REPを検証
サブセッション鍵
サブセッション鍵は以下の場合に使用されます:
- 長期間の会話でセッション鍵を変更する
- 追加のセキュリティレイヤーを提供する
- 異なるセキュリティコンテキストを分離する
サブセッション鍵の優先順位:
- クライアントとサーバーの両方がサブセッション鍵を提供した場合, サーバーの鍵を使用
- 一方のみが提供した場合, その鍵を使用
- どちらも提供しない場合, チケットのセッション鍵を使用
セキュリティ考慮事項
実装者は以下に注意すべきです:
- リプレイ保護: タイムスタンプとシーケンス番号を使用
- チェックサム検証: Authenticatorのチェックサムを検証すべき (SHOULD)
- 相互認証: 機密性の高いアプリケーションでは相互認証を使用すべき (SHOULD)
- サブセッション鍵: 長期間の会話ではサブセッション鍵を使用することを検討すべき (SHOULD)
完全な仕様とASN.1定義については, RFC 4120のセクション5.5を参照してください。