跳到主要内容

Appendix C. 特殊注意事项 (Special Considerations)

Appendix C. 特殊注意事项 (Special Considerations)

以下段落澄清了特定行为并解释了实现的特殊注意事项.

C.1. Salting (加盐)

在哈希之前使用盐增加原始所有者名称会增加预先生成的哈希值字典的成本. 对于每一位盐, 预计算字典的成本加倍 (因为每个单词与每个可能的盐值组合都必须有一个条目).NSEC3 RR 可以使用最多 2040 位 (255 个八位字节) 的盐, 使成本乘以 2^2040. 这意味着攻击者在实践中必须在每次盐更改时重新计算字典.

包含盐 (无论大小) 不会影响构造 NSEC3 RR 的成本. 它确实会增加 NSEC3 RR 的大小.

区域中必须至少有一组完整的 NSEC3 RR 使用相同的盐值.

应该定期更改盐以防止使用单个盐进行预计算. 建议每次重新签名时更改盐.

请注意, 这可能导致解析器看到同一区域具有不同盐值的 RR. 这是无害的, 因为每个 RR 都是独立的 (即, 它拒绝一组所有者名称, 这些所有者名称的哈希值使用 NSEC3 RR 中的盐, 落在 NSEC3 RR 中的两个哈希值之间) -- 只有服务器需要一组具有相同盐的完整 NSEC3 RR 集合, 以便能够回答每个可能的查询.

在同一区域内拥有具有不同盐的 NSEC3 RR 没有禁止. 但是, 为了使权威服务器能够一致地找到覆盖的 NSEC3 RR, 权威服务器在选择 NSEC3 RR 时必须选择一组参数 (算法,盐和迭代) 来使用.

C.2. Hash Collision (哈希碰撞)

当不同的消息具有相同的哈希值时, 就会发生哈希碰撞. 对于长度为 n 位的哈希, 给出单个碰撞的 1/2 机会所需的预期域名数量约为 2^(n/2) (即, 对于 SHA-1 为 2^80). 尽管这个概率极低, 但以下段落处理在使用哈希碰撞的攻击事件中避免碰撞和评估可能的损害.

C.2.1. Avoiding Hash Collisions During Generation (生成期间避免哈希碰撞)

在生成 NSEC3 RR 期间, 哈希值应该是唯一的. 在发生碰撞的 (学术) 情况下, 必须选择替代盐, 并且必须重新生成所有哈希值.

C.2.2. Second Preimage Requirement Analysis (第二原像要求分析)

加密哈希函数具有第二原像抗性属性. 第二原像抗性属性意味着在计算上不可行找到与给定消息具有相同哈希值的另一个消息, 即, 给定原像 X, 找到第二原像 X' != X 使得 hash(X) = hash(X'). 查找第二原像的工作因子对于 SHA-1 为 2^160 的数量级. 要使用现有的 NSEC3 RR 发起攻击, 对手需要找到第二原像.

假设对手能够发起这样的极端攻击, 实际损害是可以生成一个响应消息, 声称某个 QNAME (即, 第二原像) 确实存在, 而实际上 QNAME 不存在 (误报), 这将导致安全感知的解析器重新查询不存在的名称, 或者使初始查询失败. 请注意, 对手无法对现有名称发起此攻击, 而只能对对手无法选择且尚不存在的名称发起攻击.