文章目录

  • 1. 引言
    • 1.1 背景和相关文档
    • 1.2 关键字
  • 2. DNSKEY资源记录
    • 2.1 DNSKEY RDATA 有线格式
      • 2.1.1 标志(Flags)字段
      • 2.1.2 协议(Protocol)字段
      • 2.1.3 算法(Algorithm)字段
      • 2.1.4 公钥(Public Key)字段
      • 2.1.5 关于DNSKEY RDATA设计的说明
    • 2.2 DNSKEY RR 的表现形式
    • 2.3 DNSKEY RR 例子
  • 3. RRSIG 资源记录
    • 3.1 RRSIG RDATA 有线格式
      • 3.1.1 类型覆盖字段
      • 3.1.2 算法编号字段
      • 3.1.3 标签(label)字段
      • 3.1.4 原始TTL字段
      • 3.1.5 签名过期和初始字段
      • 3.1.6 Key Tag 字段
      • 3.1.7 签名者名字字段
      • 3.1.8 签名字段
    • 3.2 RRSIG RR 表现形式
    • 3.3 RRSIG RR 例子
  • 4 NSEC资源记录
    • 4.1 NSEC RDATA有线格式
      • 4.1.1 下一个域名字段
      • 4.1.2 类型比特映射字段
      • 4.1.3 NSEC RDATA中包含通配符名称
    • 4.2 NSEC RR 表现形式
    • 4.3 NSEC RR 示例
  • 5 DS 资源记录
    • 5.1 DS RDATA有线格式
      • 5.1.1 Key Tag 字段
      • 5.1.2 算法字段
      • 5.1.3 摘要类型字段
      • 5.1.4 摘要字段
    • 5.2 验证响应时对DS RRs的处理
    • 5.3 DS RR 的表现形式
    • 5.4 DS RR 的例子
  • 6 资源记录的规范形式和顺序
    • 6.1 DNS名字顺序规范
    • 6.2 RR格式规范
    • 6.3 一个RRser中RR顺序的规范
  • A. DNSSEC算法和摘要类型
    • A.1 DNSSEC算法类型
      • A.1.1 私有算法类型
    • A.2 DNSSEC摘要类型
  • B. Key Tag计算
    • B.1 算法1(RSA/MD5)的Key Tag

1. 引言

DNS安全扩展(DNSSEC)引入了4种新的DNS资源记录类型:DNS公钥(DNSKEY)、资源记录签名(RRSIG)、Next Secure (NSEC)和委托签名者(DS)。本文档定义了每个资源记录(RR)、RR的RDATA格式及其表示格式(ASCII表示)的用途。

1.1 背景和相关文档

这个文档是定义DNSSEC的文档系列的一部分,应该作为一个集合一起阅读。

[RFC4033]包含对DNSSEC的介绍和常用术语的定义;读者应该熟悉这份文件。[RFC4033]还包含由本文档集更新和废止的其他文档列表。

[RFC4035]定义了DNSSEC协议操作。

读者还应该熟悉[RFC1034]、[RFC1035]中描述的基本DNS概念,以及随后更新它们的文档,特别是[RFC2181]和[RFC2308]。

本文档定义了DNSSEC资源记录。本文档中给出的所有数字DNS类型代码都是十进制整数。

1.2 关键字

本文件中“必须”、“不得”、“必须”、“必须”、“不得”、“应当”、“不应当”、“建议”、“可以”、“可选”等关键词的解释见[RFC2119]。

2. DNSKEY资源记录

DNSSEC使用公钥加密对DNS资源记录集(RRset)进行签名和身份验证。公钥存储在DNSKEY资源记录中,并用于[RFC4035]中描述的DNSSEC身份验证过程:区域使用私钥签署其权威RRset,并将相应的公钥存储在DNSKEY RR中。然后,解析器可以使用公钥验证区域中覆盖rrset的签名,从而对它们进行身份验证。

DNSKEY RR不是用来存储任意公钥的记录,也不能用来存储与DNS基础设施没有直接关系的证书或公钥。

DNSKEY RR类型的是48。

DNSKEY RR与class无关。

DNSKEY RR没有特殊的TTL要求。

2.1 DNSKEY RDATA 有线格式

DNSKEY RR的RDATA由2个八字节标记字段、1个八字节协议字段、1个八字节算法字段和公钥字段组成。

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|              Flags            |    Protocol   |   Algorithm   |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/                                                               //                            Public Key                         //                                                               /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.1.1 标志(Flags)字段

flag字段的第7位是区域key tag。如果第7位为1,那么DNSKEY记录就有一个DNS区域key,而DNSKEY RR的所有者名称必须是一个区域的名称。如果第7位为0,那么DNSKEY记录就会保留其他类型的DNS公钥,不能用来验证该值的RRSIGs。

Flags字段的第15位是安全入口点标志,在[RFC3757]中有描述。如果第15位的值为1,那么DNSKEY记录持有一个密钥,该密钥将用作安全入口点。此标志仅为区域签名或调试软件使用此DNSKEY记录的提示;在签名验证过程中,验证器不能根据这个位的设置以任何方式改变它们的行为。这也意味着带有SEP位集的DNSKEY RR也需要设置区域密钥标志,以便能够合法地生成签名。带有SEP设置和未设置区域密钥标志的DNSKEY RR不能用于验证覆盖rrset的RRSIGs。

0-6位和8-14位被保留:这些位在创建DNSKEY RR时值必须为0,在接收时必须被忽略。

2.1.2 协议(Protocol)字段

协议字段必须为3,如果在签名验证期间发现DNSKEY RR是3以外的值,则必须将其视为无效。

2.1.3 算法(Algorithm)字段

算法字段标识公钥的加密算法,并确定公钥字段的格式。DNSSEC算法类型的列表可以在附录A.1中找到

2.1.4 公钥(Public Key)字段

公钥字段包含公钥材料。格式取决于存储密钥的算法,并在单独的文档中进行描述。

2.1.5 关于DNSKEY RDATA设计的说明

尽管Protocol字段的值始终为3,但保留它是为了向后兼容密钥记录的早期版本。

2.2 DNSKEY RR 的表现形式

RDATA部分的表示格式如下:

标记字段必须表示为无符号的十进制整数。给定当前定义的标志,可能的值是:0、256和257。

协议字段必须表示为值为3的无符号十进制整数。

算法字段必须表示为无符号十进制整数,或者表示为附录A.1中指定的算法助记符。

公钥字段必须表示为公钥的Base64编码。Base64文本中允许有空格。有关Base64编码的定义,请参见[RFC3548]。

2.3 DNSKEY RR 例子

下面的DNSKEY RR存储example.com的DNS区域key。

example.com. 86400 IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3Cbl+BBZH4b/0PY1kxkmvHjcZc8nokfzj31GajIQKY+5CptLr3buXA10hWqTkF7H6RfoRqXQeogmMHfpftf6zMv1LyBUgia7za6ZEzOJBOztyvhjL742iU/TpPSEDhm2SNKLijfUppn1UaNvv4w==  )

前四个文本字段指定所有者名称、TTL、类和RR类型(DNSKEY)。值256表示Flags字段中的区域键位(第7位)的值为1。值3是固定的协议值。值5表示公钥算法。附录A.1将算法类型5标识为RSA/SHA1,并指出RSA/SHA1公钥字段的格式定义在[RFC3110]中。剩下的文本是公钥的Base64编码。

3. RRSIG 资源记录

DNSSEC使用公钥加密对RRset进行签名和身份验证。数字签名存储在RRSIG资源记录中,并用于[RFC4035]中描述的DNSSEC身份验证过程。验证器可以使用这些RRSIG RRs来验证区域中的rrset。RRSIG RR只能用于携带用于保护DNS操作的验证材料(数字签名)。

RRSIG记录包含具有特定名称、类和类型的RRset的签名。RRSIG RR指定签名的有效间隔,并使用算法、签名者的名称和key tag来标识包含公钥的DNSKEY RR,验证器可以使用公钥来验证签名。

因为区域中的每个权威RRset都必须受到数字签名的保护,所以对于包含CNAME RR的名称,必须提供RRSIG RRs。这是对传统DNS规范[RFC1034]的一个更改,该规范规定,如果一个名称存在CNAME,那么它是该名称中唯一允许的类型。RRSIG和NSEC(参见第4节)必须与已签名区域中的CNAME资源记录具有相同的名字。

RRSIG RR类型的Type value是46。

RRSIG RR与class无关。

RRSIG RR必须与它所覆盖的RRset具有相同的类。

RRSIG记录包含具有特定名称、类和类型的RRset的签名。RRSIG RR指定签名的有效间隔,并使用算法、签名者的名称和key tag来标识包含公钥的DNSKEY RR,验证器可以使用公钥来验证签名。

3.1 RRSIG RDATA 有线格式

RRSIG RR的RDATA由2字节的类型覆盖字段,1字节的算法字段,1字节的标签,4字节的原始TTL字段,字节的签名到期字段,4字节的签名起始字段,2字节的key tag字段,以及签名者的名字字段和签名字段。

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|        Type Covered           |  Algorithm    |     Labels    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                         Original TTL                          |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Signature Expiration                     |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Signature Inception                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|            Key Tag            |                               /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+         Signer's Name         //                                                               /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/                                                               //                            Signature                          //                                                               /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.1.1 类型覆盖字段

3.1.2 算法编号字段

3.1.3 标签(label)字段

3.1.4 原始TTL字段

3.1.5 签名过期和初始字段

3.1.6 Key Tag 字段

Key Tag字段包含验证此签名的DNSKEY RR的Key Tag值,以网络字节顺序排列。附录B解释了如何计算键标签值。

3.1.7 签名者名字字段

3.1.8 签名字段

3.2 RRSIG RR 表现形式

3.3 RRSIG RR 例子

4 NSEC资源记录

NSEC资源记录列出了两个单独的东西:下一个所有者名称(在区域的规范顺序中),它包含权威数据或委托点NS RRset,以及NSEC RR的所有者名称[RFC3845]处的RR类型集。区域中的完整NSEC RRs集指示区域中存在哪些权威rrset,并在区域中形成权威所有者名称链。如[RFC4035]所述,此信息用于为DNS数据提供经过身份验证的否认存在。

因为区域中的每个权威名称都必须是NSEC链的一部分,所以对于包含CNAME RR的名称,NSEC RRs必须出现。这是对传统DNS规范[RFC1034]的一个更改,该规范规定,如果一个名称存在CNAME,那么它是该名称中唯一允许的类型。RRSIG(参见第3节)和NSEC必须与带签名区域中的CNAME资源记录具有相同的名称。

请参阅[RFC4035],以了解区域签名者如何精确地确定它必须在区域中包含哪些NSEC RRs。

NSEC RR的Type value是47。

NSEC RR与class无关。

NSEC RR应该具有与SOA最小TTL字段相同的TTL值。这就是负缓存的精神([RFC2308])。

4.1 NSEC RDATA有线格式

NSEC RR的RDATA如下图所示:

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/                      Next Domain Name                         /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/                       Type Bit Maps                           /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4.1.1 下一个域名字段

4.1.2 类型比特映射字段

4.1.3 NSEC RDATA中包含通配符名称

4.2 NSEC RR 表现形式

4.3 NSEC RR 示例

5 DS 资源记录

DS RR引用一个DNSKEY RR,并在DNS DNSKEY身份验证过程中使用。通过存储key tag、算法编号和DNSKEY RR的摘要,DS RR引用DNSKEY RR。请注意,虽然摘要应该足以识别公钥,但存储key tag和密钥算法有助于提高标识过程的效率。通过对DS记录进行身份验证,解析器可以对DS记录指向的DNSKEY RR验证。密钥认证过程在[RFC4035]中有描述。

DS RR及其对应的DNSKEY RR拥有相同的所有者名称,但是它们存储在不同的位置。DS RR只出现在委托的上级(父级)侧,是父区中的权威数据。例如,“example.com”的DS RR存储在“com”区域(父区域)中,而不是存储在 “example.com” 区域(子区域)中。对应的DNSKEY RR存储在“example.com”区域(子区域)中。这简化了DNS区域管理和区域签名,但为DS RR引入了特殊的响应处理需求;这些在[RFC4035]中有描述。

DS记录的Type value是43。

DS资源记录是class独立的。

DS RR没有特殊的TTL要求。

5.1 DS RDATA有线格式

一个DS RR的RDATA包含一个2字节的key tag字段、一个1字节的算法字段、一个1字节的摘要类型字段和一个摘要字段。

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|           Key Tag             |  Algorithm    |  Digest Type  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/                                                               //                            Digest                             //                                                               /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

5.1.1 Key Tag 字段

Key Tag字段以网络字节顺序列出DS记录引用的DNSKEY RR的key tag。

DS RR使用的key tag与RRSIG RRs使用的key tag相同。附录B描述了如何计算key tag。

5.1.2 算法字段

算法字段列出DS记录引用的DNSKEY RR的算法编号。

DS RR使用的算法编号与RRSIG和DNSKEY RRs使用的算法编号相同。附录A.1列出了算法编号类型。

5.1.3 摘要类型字段

通过包含DNSKEY RR的摘要,DS RR引用DNSKEY RR。摘要类型字段标识用于构造摘要的算法。附录A.2列出了可能的摘要算法类型。

5.1.4 摘要字段

DS记录通过包含DNSKEY RR的摘要来引用DNSKEY RR。

通过将DNSKEY RR的完全限定所有者名的规范形式与DNSKEY RDATA连接起来,然后应用摘要算法,计算摘要。

 //   “|” 表示连接
digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA);
DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key.

摘要的大小取决于摘要算法和DNSKEY RR大小。在撰写本文时,唯一定义的摘要算法是SHA-1,它生成一个20字节的摘要。

5.2 验证响应时对DS RRs的处理

DS RR跨区域边界链接身份验证链,因此在处理时需要格外小心。在DS RR中引用的DNSKEY RR必须是DNSSEC区域key。DNSKEY RR标志必须设置第7位标志。如果DNSKEY标志没有指明DNSSEC区域key,那么在验证过程中不能使用DS RR(和它引用的DNSKEY RR)。

5.3 DS RR 的表现形式

RDATA部分的表示格式如下:

key tag字段必须表示为无符号十进制整数。

算法字段必须表示为无符号十进制整数或附录A.1中指定的算法助记符。

摘要类型字段必须表示为无符号十进制整数。

摘要必须表示为不区分大小写的十六进制数字序列。允许在十六进制文本中使用空格。

5.4 DS RR 的例子

下面的例子显示了一个DNSKEY RR和它对应的DS RR。

dskey.example.com. 86400 IN DNSKEY 256 3 5 ( AQOeiiR0GOMYkDshWoSKz9XzfwJr1AYtsmx3TGkJaNXVbfi/2pHm822aJ5iI9BMzNXxeYCmZDRD99WYwYqUSdjMmmAphXdvxegXd/M5+X7OrzKBaMbCVdFLUUh6DhweJBjEVv5f2wwjM9XzcnOf+EPbtG9DMBmADjFDc2w/rljwvFw==) ;  key id = 60485
dskey.example.com. 86400 IN DS 60485 5 1 ( 2BB183AF5F22588179A53B0A98631FAD1A292118 )

前四个文本字段指定名称、TTL、类和RR类型(DS)。值60485是对应的“dskey.example.com”的key tag。值5表示这个“dskey.example.com”使用的算法。DNSKEY RR。值1是用来构造摘要的算法,其余的RDATA文本是十六进制的摘要。

6 资源记录的规范形式和顺序

本节定义了资源记录的规范形式、DNS名称的规范排序和RRset内的资源记录的规范排序。构造NSEC名称链需要一个规范的名称顺序。为了构造和验证RRSIG RRs,需要一个规范的RR表单和RRset中的排序。

6.1 DNS名字顺序规范

出于DNS安全的目的,通过将单个标签视为无签名左对齐的字节串来对所有者名进行排序。如果没有一个八位元,则在零值八位元之前进行排序,并且大写的US-ASCII字母被视为小写的US-ASCII字母。

要计算一组DNS名称的规范顺序,首先要根据最重要(最右边)的标签对名称进行排序。对于最重要的标签相同的名称,继续按照它们的下一个最重要的标签排序,依此类推。

例如,以下名称按规范DNS名称顺序排序。最重要的标签是“example”。在这个级别,“example”首先排序,然后是以“a.example”结尾的名字,然后以"z.example"结尾的名字。每一层的名称都以相同的方式排序。

             examplea.exampleyljkjljk.a.exampleZ.a.examplezABC.a.EXAMPLEz.example\001.z.example*.z.example\200.z.example

6.2 RR格式规范

出于DNS安全的考虑,RR的规范形式是RR的连线格式:

  1. RR中的每个域名都是完全展开的(没有DNS名称压缩),并且是完全限定的
  2. RR所有者名称中的所有大写US-ASCII字母都被相应的小写US-ASCII字母替换
  3. 如果NS RR的类型,医学博士,曼氏金融CNAME, SOA, MB, MG,先生,PTR, HINFO, MINFO, MX, HINFO, RP, AFSDB, RT,团体,PX, NXT, NAPTR, KX,深水救生艇,DNAME, A6, RRSIG,或NSEC,所有大写us - ascii字母的DNS名称中包含RDATA替换为相应的小写us - ascii字母
  4. 如果RR的所有者名称是通配符名称,则所有者名称是原始的未扩展形式,包括“*”标签(没有通配符替换);并且,
  5. RR的TTL被设置为它在原始权威区域或覆盖RRSIG RR的原始TTL字段中出现的原始值。

6.3 一个RRser中RR顺序的规范

出于DNS安全的目的,对具有相同所有者名称、类和类型的RRs进行排序,方法是将每个RR的规范形式的RDATA部分视为左对齐的无符号八字节序列,其中在零八字节之前没有八字节。

[RFC2181]指定RRset不允许包含重复的记录(具有相同所有者name、class、type和RDATA的多个RRs)。因此,如果实现在将RRset置于规范形式时检测到重复的RRs,则必须将其视为协议错误。如果实现选择在健壮性原则的精神下处理这个协议错误(它接受的内容是自由的),那么为了计算RRset的规范形式,它必须删除所有的重复RR(s),只有一个例外。

A. DNSSEC算法和摘要类型

A.1 DNSSEC算法类型

DNSKEY、RRSIG和DS RRs使用8位数字来识别所使用的安全算法。这些值存储在资源记录RDATA中的“Algorithm Number”字段中。

有些算法只适用于区域签名(DNSSEC),有些只适用于事务安全机制(SIG(0)和TSIG),有些同时适用于两者。可用于区域签名的可能出现在DNSKEY、RRSIG和DS RRs中。如[RFC2931]所述,那些可用于事务安全的将在SIG(0)和密钥RRs中出现。

                                ZoneValue Algorithm [Mnemonic]  Signing  References   Status----- -------------------- --------- ----------  ---------0   reserved1   RSA/MD5 [RSAMD5]         n      [RFC2537]  NOT RECOMMENDED2   Diffie-Hellman [DH]      n      [RFC2539]   -3   DSA/SHA-1 [DSA]          y      [RFC2536]  OPTIONAL4   Elliptic Curve [ECC]              TBA       -5   RSA/SHA-1 [RSASHA1]      y      [RFC3110]  MANDATORY252   Indirect [INDIRECT]      n                  -253   Private [PRIVATEDNS]     y      see below  OPTIONAL254   Private [PRIVATEOID]     y      see below  OPTIONAL255   reserved

6-251 可供IETF标准行动分配。

A.1.1 私有算法类型

算法编号253保留给私人使用,永远不会分配给特定的算法。DNSKEY RR中的公钥区域和RRSIG RR中的签名区域以有线编码的域名开始,该域名不能被压缩。域名表示要使用的私有算法,公钥区域的其余部分由该算法确定。实体应该只使用它们控制的域名来指定它们的私有算法。

算法编号254保留给私人使用,永远不会分配给特定的算法。DNSKEY RR中的公钥区域和RRSIG RR中的签名区域以一个无符号长度字节开始,后跟该长度的BER编码的对象标识符(ISO OID)。OID表示正在使用的私有算法,其余的区域是该算法所需要的区域。实体应该只使用它们控制的oid来指定它们的私有算法。

A.2 DNSSEC摘要类型

DS资源记录类型中的“Digest Type”字段标识资源记录使用的加密摘要算法。下表列出了当前定义的摘要算法类型。

              VALUE   Algorithm                 STATUS0      Reserved                   -1      SHA-1                   MANDATORY2-255    Unassigned                 -

B. Key Tag计算

RRSIG和DS资源记录类型中的key tag字段提供了一种有效选择公钥的机制。在大多数情况下,所有者名称、算法和key tag的组合可以有效地识别DNSKEY记录。RRSIG和DS资源记录都有相应的DNSKEY记录。当有多个候选DNSKEY RR可用时,可以使用RRSIG和DS记录中的Key tag字段来帮助有效地选择相应的DNSKEY RR。

但是,必须注意,key tag不是惟一的标识符。从理论上讲,两个不同的DNSKEY RRs可能具有相同的所有者名称、相同的算法和相同的key tag。key tag用于限制可能的候选键,但它不能唯一地标识DNSKEY记录。实现不能假设key tag唯一地标识DNSKEY RR。

除了算法1外,所有DNSKEY算法类型的key tag都是相同的(算法1的key tag定义见附录B.1)。首先,将RDATA(有线格式)分成一系列的2个字节组。然后将这些组相加,忽略任何进位。

key tag算法的一个参考实现是一个ANSI C函数,如下所示,使用DNSKEY RR的RDATA部分作为输入。没有必要逐字使用下面的参考代码,但是key tag的数值必须与参考实现为相同的输入生成的数值相同。

请注意,计算key tag的算法与我们所熟悉的其他Internet协议中使用的校验和算法几乎相同,但并不完全相同。key tag必须使用这里描述的算法来计算,而不是使用互补校验和。

下面的ANSI C参考实现计算key tag的值。此参考实现适用于除算法1之外的所有算法类型(参见附录B.1)。输入是DNSKEY RR的RDATA部分的连线格式。代码是为了清晰而不是效率而编写的。

   /** Assumes that int is at least 16 bits.* First octet of the key tag is the most significant 8 bits of the* return value;* Second octet of the key tag is the least significant 8 bits of the* return value.*/unsigned intkeytag (unsigned char key[],  /* the RDATA part of the DNSKEY RR */unsigned int keysize  /* the RDLENGTH */){unsigned long ac;     /* assumed to be 32 bits or larger */int i;                /* loop index */for ( ac = 0, i = 0; i < keysize; ++i )ac += (i & 1) ? key[i] : key[i] << 8;ac += (ac >> 16) & 0xFFFF;return ac & 0xFFFF;}

B.1 算法1(RSA/MD5)的Key Tag

由于历史原因,算法1 (RSA/MD5)的key tag的定义与所有其他算法的key tag不同。对于使用算法1的DNSKEY RR,key tag被定义为公钥模量(即公钥模量的第4到最后一个字节和第3到最后一个字节)中24位中最有效的16位。

请注意,不推荐使用算法1。

DNSSEC资源记录安全扩展(RFC4034翻译)相关推荐

  1. 其他资源记录类型及应用示例

    为了不使一些网友认为我给出的资源记录类型太不全面,所以在本篇文章中给出另一些资源记录类型.这些其实也非常常见.本篇以下内容摘自笔者编著的<网管员必读--网络组建>(第2版)一书. 7.6. ...

  2. c#v2.0 扩展特性 翻译(1)

    c#v2.0 扩展特性 翻译(1) Introduction to C# 2.0 C# 2.0 introduces several language extensions, the most imp ...

  3. DNS(3)- 详解DNS的资源记录

    资源记录:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 每个 ...

  4. DNS中的七大资源记录介绍

    在Microsoft产品系列中,ADDS是一个很出色的设计平台,说到AD,那么我们就不得不提起他的合作伙伴--DNS,相信大家都知道,DNS在AD中的重要地位,就如男人和女人一样,要想有所作为,他们2 ...

  5. windows之DNS7种资源记录和flushdns命令清除DNS缓存以及nslookup解析域名和ipconfig/all命令查看网络配置使用总结

    1.DNS7种资源记录 DNS分为正向查找区域和反向查找区域,然后在分为,主要,辅助,存根区域,在这些区域里,又存在着很多的记录,今天,就让我们来看看这些记录: 1,A记录 A记录也称为主机记录,是使 ...

  6. DNS资源记录类型的总结

    资源记录类型: A (host),即是A记录,也称为主机记录,是DNS名称到IP地址的映射,用于正向解析. CNAME:CNAME记录,也是别名记录,用于定义A记录的别名. MX (mail exch ...

  7. DNS 学习笔记之三- 详解DNS的资源记录

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />       最 ...

  8. 【学习笔记】域名资源记录(Resource Record)

    Zone file描述了DNS zone.DNS zone是层级DNS结构的子集,往往是单独的域.Zone file包括域名到IP地址及其他资源的映射,以RR文本形式表示.zone file可能是一个 ...

  9. DNS之资源记录(RR)以及配置

    一.简介 DNS数据库中每一个条目称作为一个资源记录(ResourceRecord,RR),说白了就是一条解析记录 二.某区域的配置样例(/var/named/*.zone) $TTL 1D #缓存时 ...

最新文章

  1. spring mvc web.xml 例子
  2. 关于工具类应用产品界面设计的一点思考
  3. vb 访问远程计算机,vb 怎么访问远程电脑SQL SERVER数据库
  4. Navicat for MySQL中如何新建用户并赋予权限
  5. 【英语学习】【科学】【Glencoe Science】【D】Human Body Systems 目录及术语表
  6. java如何把方法封装成接口,RxJava配合Retrofit实现网络封装
  7. 如何在Linux桌面环境下自动启动程序?
  8. Linkswap宣布为DigiByte启动RenVM桥接器
  9. MSRCRGIMP(基于GIMP版本的多尺度Retinex)
  10. LINUX下打包jar
  11. 计算机核心期刊论文模板,中文核心期刊(论文)模板.doc
  12. PDM系统与PLM系统
  13. 解决打开excel报文件格式或文件扩展名无效的问题
  14. Android 关于 ActionBarSherlock 的使用
  15. fatal: unable to access 'https://chromium.googlesource.com/webm/libwebp/': Failed to connect to chro
  16. 闭环控制步进电机对比传统开环控制的优点
  17. PSM倾向匹配详细步骤和程序
  18. Octotree 下载安装
  19. 如何画热图(heatmap)
  20. 热水结冰比冷水快?半世纪争议终于解开

热门文章

  1. 亚马逊云计算服务器在哪,亚马逊云服务(AWS)的“服务器型号“已近400种
  2. 毕业十年内年入百万,我是怎么做到的?
  3. 如何高效设计游戏——游戏兵种平衡的技巧与思路
  4. 全球领先智能理货ceaspectusT实现港口岸边自动化高效能,中集集团人工智能企业中集飞瞳打造全球超一流智慧港口码头智能理货
  5. python数据挖掘(5.Apriori算法)
  6. C#将数据库连接方式写到配置文件中
  7. 墨刀点击按钮实现弹窗(超详细
  8. 开始时间、时间间隔、结束时间的计算(借助 moment.js)
  9. 基于asp.net732汽车4s店销售网站
  10. 房贷计算器(java)