2.6. Key Localization Algorithm (鍵ローカライゼーションアルゴリズム)
2.6. Key Localization Algorithm (鍵ローカライゼーションアルゴリズム)
ローカライズされた鍵 (localized key) は, ユーザー U と 1 つの権威ある SNMP エンジン E の間で共有される秘密鍵です。ユーザーがネットワーク全体で 1 つのパスワードしか持たず, したがって 1 つの鍵しか持たない場合でも, ユーザーと各権威ある SNMP エンジンの間で共有される実際の秘密は異なります。これは鍵ローカライゼーションによって実現されます。
Purpose of Key Localization (鍵ローカライゼーションの目的)
鍵ローカライゼーションはいくつかの重要なセキュリティ上の利点を提供します:
-
エンジンごとの一意の鍵 (Unique Keys per Engine): 各権威ある SNMP エンジンは, ユーザーがどこでも同じパスワードを使用している場合でも, 各ユーザーに対して一意のローカライズされた鍵を持ちます。
-
限定的な鍵漏洩の影響 (Limited Key Compromise Impact): 1 つのエンジン上でローカライズされた鍵が漏洩しても, 他のエンジン上のユーザーの鍵は漏洩しません。
-
エンジン固有の保護 (Engine-Specific Protection): 鍵は特定のエンジンの ID (snmpEngineID) に暗号的にバインドされています。
Key Localization Process (鍵ローカライゼーションプロセス)
鍵ローカライゼーションプロセスは, ユーザーの鍵 Ku (パスワードから派生) を権威ある SNMP エンジン E に固有のローカライズされた鍵 Kul に変換します。
ステップ 1: パスワードから鍵への変換 (Password to Key Conversion)
まず, ユーザーがパスワードを使用する場合, 付録 A.2.1 および A.2.2 で説明されている 2 つのアルゴリズムのいずれかを使用して, ユーザーのパスワードが鍵 Ku に変換されます:
- MD5 ベースの認証の場合: 付録 A.2.1 のパスワードから鍵へのアルゴリズムを使用
- SHA ベースの認証の場合: 付録 A.2.2 のパスワードから鍵へのアルゴリズムを使用
これにより, 特定の SNMP エンジンに依存しないユーザー鍵 Ku が生成されます。
ステップ 2: 鍵ローカライゼーション (Key Localization)
鍵 Ku を権威ある SNMP エンジン E でのユーザー U のローカライズされた鍵 Kul に変換するために, 次のアルゴリズムが使用されます:
-
snmpEngineID を Ku に追加: 鍵 Ku を取り, 権威ある SNMP エンジン E の snmpEngineID をそれに追加します。
-
Ku を再度追加: ステップ 1 の結果に鍵 Ku を追加し, ユーザーの鍵 Ku の 2 つのコピー内に snmpEngineID を包み込みます。
-
結果をハッシュ: 連結されたデータに対してセキュアハッシュ関数を実行します。使用されるハッシュ関数は, 権威ある SNMP エンジン E でこのユーザー U に定義された認証プロトコルに依存します:
- HMAC-MD5-96 認証を使用する場合: MD5 ハッシュを使用
- HMAC-SHA-96 認証を使用する場合: SHA-1 ハッシュを使用
-
結果がローカライズされた鍵: ハッシュ関数の出力は, 権威ある SNMP エンジン E でのユーザー U のローカライズされた鍵 Kul です。
Algorithm Pseudocode (アルゴリズム擬似コード)
入力:
Ku - ユーザーの鍵 (パスワードから派生)
snmpEngineID - エンジンの一意識別子
プロセス:
Kul = Hash(Ku || snmpEngineID || Ku)
ここで:
|| - 連結を示す
Hash - HMAC-MD5-96 の場合は MD5, HMAC-SHA-96 の場合は SHA-1
出力:
Kul - エンジン E でのユーザー U のローカライズされた鍵
Example (例)
仮定:
- ユーザー U のパスワードは "myPassword"
- パスワードは鍵 Ku に変換される (パスワードから鍵へのアルゴリズムを使用)
- 権威あるエンジン E の snmpEngineID = 0x80001F8880...
すると:
Kul = MD5(Ku || 0x80001F8880... || Ku)
この Kul は, エンジン E 上のユーザー U に固有です。同じユーザーが engineID 0x80001F8881... を持つ別のエンジン E2 にアクセスする場合, 異なるローカライズされた鍵が計算されます:
Kul2 = MD5(Ku || 0x80001F8881... || Ku)
Localized Key Usage (ローカライズされた鍵の使用)
計算されると, ローカライズされた鍵は 2 つの目的で使用されます:
-
認証鍵 (Authentication Keys): ローカライズされた認証鍵 (authKey) は Kul から派生し, メッセージ認証の HMAC 操作で使用されます。
-
プライバシー鍵 (Privacy Keys): ローカライズされたプライバシー鍵 (privKey) は Kul から派生し, メッセージペイロードの暗号化/復号化に使用されます。
Kul からの authKey および privKey の派生は, それぞれの認証およびプライバシープロトコル仕様 (セクション 6, 7, および 8) で説明されています。
Key Management Implications (鍵管理の影響)
Key Storage (鍵ストレージ)
実装は, 元のパスワードやユーザー鍵 Ku ではなく, ローカライズされた鍵を保存する必要があります。これにより, より良いセキュリティが提供されます:
- デバイスが侵害された場合, そのデバイスのローカライズされた鍵のみが露出する
- ユーザーのパスワードと他のデバイスの鍵は安全なまま
Key Updates (鍵の更新)
ユーザーのパスワードが変更されると:
- 新しいパスワードから新しい Ku が計算される
- ユーザーがアクセスするすべてのエンジンに対して新しいローカライズされた鍵 Kul を計算する必要がある
- 古いローカライズされた鍵は安全に削除する必要がある
Initial Configuration (初期構成)
初期構成または鍵配布の場合, 実装は次のいずれかを行う必要があります:
- 構成されたパスワードからローカライズされた鍵を計算するためにパスワードから鍵へおよび鍵ローカライゼーションアルゴリズムを使用
- 事前に計算されたローカライズされた鍵を直接構成 (アウトオブバンド鍵配布が使用される場合)
Security Considerations (セキュリティに関する考慮事項)
-
一方向関数 (One-way Function): 鍵ローカライゼーションは一方向関数です。Kul と snmpEngineID が与えられた場合, Ku を導出することは計算上不可能です。
-
エンジン ID バインディング (Engine Identity Binding): ローカライズされた鍵はエンジンの ID に暗号的にバインドされており, エンジン間での鍵の再利用を防ぎます。
-
ハッシュ関数の強度 (Hash Function Strength): 鍵ローカライゼーションのセキュリティは, 使用されるハッシュ関数 (MD5 または SHA-1) の強度に依存します。
References (参考文献)
鍵ローカライゼーションの概念とアルゴリズムは以下でさらに詳細に説明されています:
- [Localized-key]: "Key Derivation for Network Management Applications" (ネットワーク管理アプリケーションの鍵導出), U. Blumenthal, B. Wijnen, K. McCloghrie, Internet Draft (作業進行中)
- パスワードから鍵へのアルゴリズム: この RFC の付録 A.2.1 (MD5) および A.2.2 (SHA)