我想知道为什么 NSEC3 记录应该包含盐?我无法想象解析器为什么以及如何使用盐?
1 回答
NSEC3 案例中使用的盐会随着时间而改变。甚至建议更改。因此,在任何给定时间点,您都可以使用不同的盐计算 2 个 NSEC3 记录。
见https://www.rfc-editor.org/rfc/rfc5155#appendix-C.1
对于使用相同盐值的区域,必须至少有一组完整的 NSEC3 RR 。盐应该定期更换,以防止使用单一盐进行预计算。建议
每次重新签名时更改盐。
之后更详细:
请注意,这可能会导致解析器看到同一区域具有不同盐值的 RR。这是无害的,因为每个 RR 都是独立的(也就是说,它拒绝使用 NSEC3 RR 中的盐,其散列位于 NSEC3 RR 中的两个散列之间的所有者名称集)——只有服务器需要一整套具有相同盐的 NSEC3 RR,以便能够回答每个可能的查询。
没有禁止在同一区域内具有不同盐的 NSEC3 RR。但是,为了让权威服务器能够始终如一地找到覆盖 NSEC3 RR,权威服务器必须选择一组参数(算法、盐和
迭代)以在选择 NSEC3 RR 时使用。
盐不用于计算 NSEC3 记录,它用于,名称被证明不存在,被散列,请参阅https://www.rfc-editor.org/rfc/rfc5155#section-5完整的算法。
阅读https://www.rfc-editor.org/rfc/rfc7129会有所帮助,例如第 5.5 节。解析器需要对名称本身进行哈希处理(因此需要知道哈希算法、盐值和迭代次数,这些都在 NSEC3 记录中),以查看哪些 NSEC3 记录适用。
使用上述参考中的所有详细信息,对于查询x.2.example.org TXT
,回复为:
15bg9l6359f5ch23e34ddua6n1rihl9h.example.org. (
NSEC3 1 0 2 DEAD 1AVVQN74SG75UKFVF25DGCETHGQ638EK NS SOA RRSIG
DNSKEY NSEC3PARAM )
1avvqn74sg75ukfvf25dgcethgq638ek.example.org. (
NSEC3 1 0 2 DEAD 75B9ID679QQOV6LDFHD8OCSHSSSB6JVQ )
75b9id679qqov6ldfhd8ocshsssb6jvq.example.org. (
NSEC3 1 0 2 DEAD 8555T7QEGAU7PJTKSNBCHG4TD2M0JNPJ TXT RRSIG )
这是解析器内部发生的事情:
“x.2.example.org”的哈希是“ndtu6dste50pr4a1f2qvr1v31g00i2i1”。
在第一个 NSEC3 上检查此哈希会产生它不落在以下区间之间:“15bg9l6359f5ch23e34ddua6n1rihl9h”到“1avvqn74sg75ukfvf25dgcethgq638ek”。对于第二个 NSEC3,答案也是否定的:哈希在“1avvqn74sg75ukfvf25dgcethgq638ek”和“75b9id679qqov6ldfhd8ocshsssb6jvq”描述的区间之外排序。而且,间隔为“75b9id679qqov6ldfhd8ocshsssb6jvq”到
“8555t7qegau7pjtksnbchg4td2m0jnpj”的第三个 NSEC3 也没有任何帮助。
然后解析器将通过执行以下操作发现最近的相遇:
解析器不断地从查询名称中散列越来越短的名称,直到 NSEC3 的所有者名称匹配。此所有者名称是最接近的附件。
因此,简而言之,验证解析器需要哈希来完成所有这些工作。