此前我们写过很多加密算法和加密技术相关的文章,但是关于公钥技术的消息并不多,今天我们主要是讲解这个。
DNSSEC采用公钥技术对DNS 信息进行数字签名,DNSSEC提供两方面的验证:DNS源发送方身份认证;DNS数据包完整性验证。
DNS 数据认证需要用请求者接收的公钥对接收的DNS 数据进行解密比对以保证数据完整性与正确性,DNSSEC采用委托信任链机制实现公钥的分发与认证,DNSSEC 建立一个信任链表,使得ZONE 父区对子区的公钥进行认证,保证解析请求者本地DNS 获得正确的公钥。
DNSSEC在原有的DNS域名解析体系上加入公钥技术为ZONE区域产生一个公钥/私钥对并存放于权威域名服务器中,权威DNS服务器利用私钥对DNS 数据进行数字签名,域名解析请求者本地DNS 服务器利用得到的公钥对接收到的加密DNS 数据进行解密,如果验证通过则确定DNS 数据是由正确的权威DNS发送,同时保证了DNS 数据传输中没有被篡改。
图 发送方对DNS数据进行数字签名
图中为DNS消息发送方先使用Hash函数对要发送的DNS信息进行Hasn 计算得到相应的的Hash 信息摘要,然后发送方利用非对称私钥对其数字签名,最后将经签名后的摘要数据和DNS原数据一起发送至接收方。
图 接收方对签名后的DNS数据进行解密
图中为接收方利用先前接收到的非对称公钥对接收到的DNS数据包中加密过的数据进行解密得到Hash摘要,然后利用与发送方相同的Hash函数对接收到的DNS原始数据进行Hash 计算,得到Hash摘要,将此Hash摘要与解密后得到的Hash摘要进行比对,如果两者相同则接收发送方的身份,同时确认接收到的DNS信没有被篡改。
在以上通信过程中,DNS数据包发送前经过了一次Hash计算和一次非对称加密计算,DNS 数据包在接收后再次进行了一次Hash计算和一次非对称加密计算,两次对DNS信息的非对称密钥计算在一定程度上加大了双方CPU 计算时间和负载。