Episode 2
新记录类型
为了验证 DNS 数据的真伪,DNSSEC 引入了少量新的 DNS 记录类型。
你给域名配上 DNSSEC 之后,DNS 服务商要做的第一件事,就是把所有记录打包成 RRset。
RRset 里的 RR 是资源记录(Resource Records)的意思。说人话……呃,其实这是种高大上的说法,指一个区(zone)里「类型和名称都相同的记录」。
RRset 把同类型、同名称的记录捆成一捆,然后整捆做数字签名。
在现实世界里,人类用签名来确认一份文件出自谁手、内容保真。
这个套路,搬到 DNSSEC 世界照样好使。
权威服务器用一对区签名密钥(zone-signing key pair),给每个 RRset 签名。
后面还会登场更多密钥,先记住:这对密钥专门负责给区里的记录生成和验证签名。
每个区签名密钥都由一把私钥和一把公钥组成。这就是非对称加密的基本盘。
私钥和公钥是天生一对。用私钥加密的数据,可以用公钥解密、验明真伪。
公钥可以随便发,见者有份。它是公开的,谁都能拿。
私钥嘛——你猜对了——是私密的,打死也不能给别人。
千万别让螃蟹顺走它!
这对密钥合体,带来两大超能力!
第一:验明内容确实出自正主。
第二:验明内容自打出炉后没人动过一丁点。
注意,这对密钥并不会把记录内容整个加密。数字签名的做法是:取 RRset 的一部分,先做哈希,再加密。
哈希这一步,可不只是为了验证。
哈希能把内容压缩成固定长度,签名也跟着小巧起来。
这很关键,因为我们希望 DNS 协议一直保持苗条轻盈。
签名存在一种叫 RRSIG(资源记录签名)的 DNS 记录里。
而解开 RRSIG 所需的公钥,则存在另一种新记录类型 DNSKEY 里。
好戏是这么上演的……
先从 RRset 里取一部分内容,过一遍哈希算法。
哈希结果再用区签名密钥的私钥加密,一条 RRSIG 记录就出炉了。
然后,权威服务器把 RRset 和 RRSIG 打包发给解析器。
解析器照方抓药,像权威服务器刚才那样,用同样的算法把 RRset 再哈希一遍。
解析器再用区签名密钥的公钥解开签名记录,也得到一串哈希值。
两串哈希一对比,完全吻合?解析器就知道:回答出自正主,且没人中途动过手脚。
至于那些不支持 DNSSEC、或者缺了哈希算法的解析器,会直接无视随记录返回的签名。
下面就是解析器请求 www.dnsimple.com 的 A 记录时的完整流程。
权威服务器返回 A 记录,附赠 RRset 和 RRSIG 记录。
接着,解析器再索要 DNSKEY 记录,好验证这份记录货真价实、来源可信。
解析器靠着 RRset、RRSIG 和 DNSKEY 三件套,完成验证。
可是……万一 DNSKEY 自己都被攻破了呢?