跳到主要内容

2.6. Key Localization Algorithm (密钥本地化算法)

2.6. Key Localization Algorithm (密钥本地化算法)

本地化密钥 (localized key) 是用户 U 与一个权威 SNMP 引擎 E 之间共享的秘密密钥。尽管用户可能只有一个密码, 因此整个网络只有一个密钥, 但用户与每个权威 SNMP 引擎之间共享的实际秘密将是不同的。这通过密钥本地化实现。

Purpose of Key Localization (密钥本地化的目的)

密钥本地化提供了几个重要的安全优势:

  1. 每个引擎的唯一密钥 (Unique Keys per Engine): 每个权威 SNMP 引擎对每个用户都有唯一的本地化密钥, 即使用户在任何地方都使用相同的密码。

  2. 有限的密钥泄露影响 (Limited Key Compromise Impact): 如果一个引擎上的本地化密钥被泄露, 它不会危及用户在其他引擎上的密钥。

  3. 特定引擎保护 (Engine-Specific Protection): 密钥以加密方式绑定到特定引擎的身份 (snmpEngineID)。

Key Localization Process (密钥本地化过程)

密钥本地化过程将用户的密钥 Ku (从其密码派生) 转换为特定于权威 SNMP 引擎 E 的本地化密钥 Kul。

步骤 1: 密码到密钥转换 (Password to Key Conversion)

首先, 如果用户使用密码, 则使用附录 A.2.1 和 A.2.2 中描述的两种算法之一将用户的密码转换为密钥 Ku:

  • 对于基于 MD5 的认证: 使用附录 A.2.1 中的密码到密钥算法
  • 对于基于 SHA 的认证: 使用附录 A.2.2 中的密码到密钥算法

这产生一个独立于任何特定 SNMP 引擎的用户密钥 Ku。

步骤 2: 密钥本地化 (Key Localization)

要将密钥 Ku 转换为用户 U 在权威 SNMP 引擎 E 处的本地化密钥 Kul, 使用以下算法:

  1. 将 snmpEngineID 附加到 Ku: 取密钥 Ku 并将权威 SNMP 引擎 E 的 snmpEngineID 附加到它。

  2. 再次附加 Ku: 将密钥 Ku 附加到步骤 1 的结果, 从而将 snmpEngineID 包裹在用户密钥 Ku 的两个副本中。

  3. 对结果进行哈希: 对连接的数据运行安全哈希函数。使用的哈希函数取决于为权威 SNMP 引擎 E 上的此用户 U 定义的认证协议:

    • 如果使用 HMAC-MD5-96 认证: 使用 MD5 哈希
    • 如果使用 HMAC-SHA-96 认证: 使用 SHA-1 哈希
  4. 结果是本地化密钥: 哈希函数的输出是用户 U 在权威 SNMP 引擎 E 处的本地化密钥 Kul。

Algorithm Pseudocode (算法伪代码)

输入:
Ku - 用户的密钥 (从密码派生)
snmpEngineID - 引擎的唯一标识符

过程:
Kul = Hash(Ku || snmpEngineID || Ku)

其中:
|| - 表示连接
Hash - 对于 HMAC-MD5-96 是 MD5, 对于 HMAC-SHA-96 是 SHA-1

输出:
Kul - 用户 U 在引擎 E 处的本地化密钥

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 (本地化密钥的使用)

一旦计算完成, 本地化密钥用于两个目的:

  1. 认证密钥 (Authentication Keys): 本地化认证密钥 (authKey) 从 Kul 派生, 用于消息认证的 HMAC 操作。

  2. 隐私密钥 (Privacy Keys): 本地化隐私密钥 (privKey) 从 Kul 派生, 用于加密/解密消息有效负载。

从 Kul 派生 authKey 和 privKey 在相应的认证和隐私协议规范 (第 6、7 和 8 节) 中描述。

Key Management Implications (密钥管理影响)

Key Storage (密钥存储)

实现应存储本地化密钥而不是原始密码或用户密钥 Ku。这提供了更好的安全性:

  • 如果设备被攻破, 只有该设备的本地化密钥被暴露
  • 用户的密码和其他设备的密钥保持安全

Key Updates (密钥更新)

当用户密码更改时:

  • 从新密码计算新的 Ku
  • 必须为用户访问的所有引擎计算新的本地化密钥 Kul
  • 应安全删除旧的本地化密钥

Initial Configuration (初始配置)

对于初始配置或密钥分发, 实现必须:

  • 使用密码到密钥和密钥本地化算法从配置的密码计算本地化密钥
  • 直接配置预计算的本地化密钥 (如果使用带外密钥分发)

Security Considerations (安全考虑)

  1. 单向函数 (One-way Function): 密钥本地化是单向函数。给定 Kul 和 snmpEngineID, 在计算上不可能派生 Ku。

  2. 引擎身份绑定 (Engine Identity Binding): 本地化密钥以加密方式绑定到引擎的身份, 防止跨引擎重用密钥。

  3. 哈希函数强度 (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)