为什么要公开NSEC3记录的盐?

时间:2019-04-24 21:40:42

标签: dns dnssec

我想知道为什么NSEC3记录中应该包含盐?我无法想象解析器为什么以及如何使用盐?

1 个答案:

答案 0 :(得分:0)

在NSEC3情况下使用的盐可能会随时间变化。甚至建议对其进行更改。因此,在任何给定时间点,您都可以使用不同的盐计算出2条NSEC3记录。

请参见https://tools.ietf.org/html/rfc5155#appendix-C.1

  

该区域必须至少有一套完整的NSEC3 RR
  使用相同的盐值。

     

应定期更换盐以防止预先计算   用一种盐。建议将盐更改为
  每次重新签名。

以下内容会更详细:

  

请注意,这可能会导致解析器看到具有不同   同一区域的盐值。这是无害的,因为每个RR   独立存在(也就是说,它拒绝其所有者名称集   使用NSEC3 RR中的盐散列在两个散列之间   在NSEC3 RR中)-只有服务器需要完整的服务器   相同盐的NSEC3 RR的数量,以便能够回答每个   可能的查询。

     

不禁止具有不同盐的NSEC3 RR   在同一区域内。但是,为了使权威服务器能够   能够始终如一地找到涵盖NSEC3 RR的权威   服务器必须选择一组参数(算法,盐和
  迭代)来选择NSEC3 RR。

salt不用于计算NSEC3记录,而是使用其名称(经证明不存在)进行哈希处理,有关完整算法,请参见https://tools.ietf.org/html/rfc5155#section-5

阅读https://tools.ietf.org/html/rfc7129会有所帮助,例如5.5节。解析程序需要对名称本身进行哈希处理(因此需要了解哈希算法,salt值和迭代次数,这些都在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”所描述的时间间隔之外排序。   并且,第三个NSEC3(间隔为“ 75b9id679qqov6ldfhd8ocshsssb6jvq”)到
  “ 8555t7qegau7pjtksnbchg4td2m0jnpj”也没有任何帮助。

然后解析器将通过执行以下操作来发现最接近的遭遇:

  

解析器不断从中散列越来越短的名称   查询名称,直到NSEC3的所有者名称匹配为止。这个拥有者   名称是最接近的封闭器。

简而言之,验证解析器需要哈希来完成所有这些工作。