Episode 2

新记录类型

为了验证 DNS 数据的真伪,DNSSEC 引入了少量新的 DNS 记录类型。

为了验证 DNS 数据的真伪,DNSSEC 引入了少量新的 DNS 记录类型。

你给域名配上 DNSSEC 之后,DNS 服务商要做的第一件事,就是把所有记录打包成 RRset

你给域名配上 DNSSEC 之后,DNS 服务商要做的第一件事,就是把所有记录打包成 **RRset**。

RRset 里的 RR 是资源记录(Resource Records)的意思。说人话……呃,其实这是种高大上的说法,指一个区(zone)里「类型和名称都相同的记录」。

RRset 里的 RR 是资源记录(Resource Records)的意思。说人话……呃,其实这是种高大上的说法,指一个区(zone)里「类型和名称都相同的记录」。

RRset 把同类型、同名称的记录捆成一捆,然后整捆做数字签名。

RRset 把同类型、同名称的记录捆成一捆,然后整捆做数字签名。

在现实世界里,人类用签名来确认一份文件出自谁手、内容保真。

在现实世界里,人类用签名来确认一份文件出自谁手、内容保真。

这个套路,搬到 DNSSEC 世界照样好使。

这个套路,搬到 DNSSEC 世界照样好使。

权威服务器用一对区签名密钥(zone-signing key pair),给每个 RRset 签名。

权威服务器用一对**区签名密钥(zone-signing key pair)**,给每个 RRset 签名。

后面还会登场更多密钥,先记住:这对密钥专门负责给区里的记录生成和验证签名。

后面还会登场更多密钥,先记住:这对密钥专门负责给区里的记录生成和验证签名。

每个区签名密钥都由一把私钥和一把公钥组成。这就是非对称加密的基本盘。

每个区签名密钥都由一把**私钥**和一把**公钥**组成。这就是非对称加密的基本盘。

私钥和公钥是天生一对。用私钥加密的数据,可以用公钥解密、验明真伪。

私钥和公钥是天生一对。用私钥加密的数据,可以用公钥解密、验明真伪。

公钥可以随便发,见者有份。它是公开的,谁都能拿。

公钥可以随便发,见者有份。它是公开的,谁都能拿。

私钥嘛——你猜对了——是私密的,打死也不能给别人。

千万别让螃蟹顺走它!

公钥可以随便发,见者有份。它是公开的,谁都能拿。

这对密钥合体,带来两大超能力!

这对密钥合体,带来两大超能力!

第一:验明内容确实出自正主。

第二:验明内容自打出炉后没人动过一丁点。

这对密钥合体,带来两大超能力!

注意,这对密钥并不会把记录内容整个加密。数字签名的做法是:取 RRset 的一部分,先做哈希,再加密。

注意,这对密钥并不会把记录内容整个加密。数字签名的做法是:取 RRset 的一部分,先做哈希,再加密。

哈希这一步,可不只是为了验证。

哈希能把内容压缩成固定长度,签名也跟着小巧起来。

注意,这对密钥并不会把记录内容整个加密。数字签名的做法是:取 RRset 的一部分,先做哈希,再加密。

这很关键,因为我们希望 DNS 协议一直保持苗条轻盈。

这很关键,因为我们希望 DNS 协议一直保持苗条轻盈。

签名存在一种叫 RRSIG(资源记录签名)的 DNS 记录里。

签名存在一种叫 **RRSIG**(资源记录签名)的 DNS 记录里。

而解开 RRSIG 所需的公钥,则存在另一种新记录类型 DNSKEY 里。

而解开 RRSIG 所需的公钥,则存在另一种新记录类型 **DNSKEY** 里。

好戏是这么上演的……

好戏是这么上演的……

先从 RRset 里取一部分内容,过一遍哈希算法。

先从 RRset 里取一部分内容,过一遍哈希算法。

哈希结果再用区签名密钥的私钥加密,一条 RRSIG 记录就出炉了。

哈希结果再用区签名密钥的私钥加密,一条 RRSIG 记录就出炉了。

然后,权威服务器把 RRset 和 RRSIG 打包发给解析器。

然后,权威服务器把 RRset 和 RRSIG 打包发给解析器。

解析器照方抓药,像权威服务器刚才那样,用同样的算法把 RRset 再哈希一遍。

解析器照方抓药,像权威服务器刚才那样,用同样的算法把 RRset 再哈希一遍。

解析器再用区签名密钥的公钥解开签名记录,也得到一串哈希值。

解析器再用区签名密钥的公钥解开签名记录,也得到一串哈希值。

两串哈希一对比,完全吻合?解析器就知道:回答出自正主,且没人中途动过手脚。

两串哈希一对比,完全吻合?解析器就知道:回答出自正主,且没人中途动过手脚。

至于那些不支持 DNSSEC、或者缺了哈希算法的解析器,会直接无视随记录返回的签名。

至于那些不支持 DNSSEC、或者缺了哈希算法的解析器,会直接无视随记录返回的签名。

下面就是解析器请求 www.dnsimple.com 的 A 记录时的完整流程。

下面就是解析器请求 www.dnsimple.com 的 A 记录时的完整流程。

权威服务器返回 A 记录,附赠 RRset 和 RRSIG 记录。

权威服务器返回 A 记录,附赠 RRset 和 RRSIG 记录。

接着,解析器再索要 DNSKEY 记录,好验证这份记录货真价实、来源可信。

接着,解析器再索要 DNSKEY 记录,好验证这份记录货真价实、来源可信。

解析器靠着 RRset、RRSIG 和 DNSKEY 三件套,完成验证。

解析器靠着 RRset、RRSIG 和 DNSKEY 三件套,完成验证。

可是……万一 DNSKEY 自己都被攻破了呢?

可是……万一 DNSKEY 自己都被攻破了呢?
继续阅读 →