メインコンテンツまでスキップ

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: エラーデータ (オプション)

相互認証の流れ

相互認証を使用する場合:

  1. クライアントがMUTUAL-REQUIREDフラグを設定してAP-REQを送信
  2. サーバーがチケットとAuthenticatorを検証
  3. サーバーがAP-REPを返して自身のアイデンティティを証明
  4. クライアントがAP-REPを検証

サブセッション鍵

サブセッション鍵は以下の場合に使用されます:

  • 長期間の会話でセッション鍵を変更する
  • 追加のセキュリティレイヤーを提供する
  • 異なるセキュリティコンテキストを分離する

サブセッション鍵の優先順位:

  1. クライアントとサーバーの両方がサブセッション鍵を提供した場合, サーバーの鍵を使用
  2. 一方のみが提供した場合, その鍵を使用
  3. どちらも提供しない場合, チケットのセッション鍵を使用

セキュリティ考慮事項

実装者は以下に注意すべきです:

  • リプレイ保護: タイムスタンプとシーケンス番号を使用
  • チェックサム検証: Authenticatorのチェックサムを検証すべき (SHOULD)
  • 相互認証: 機密性の高いアプリケーションでは相互認証を使用すべき (SHOULD)
  • サブセッション鍵: 長期間の会話ではサブセッション鍵を使用することを検討すべき (SHOULD)

完全な仕様とASN.1定義については, RFC 4120のセクション5.5を参照してください。