首页 > 代码库 > SSL/TLS的原理以及互联网究竟是如何工作的(5)—DNS和他的兄弟
SSL/TLS的原理以及互联网究竟是如何工作的(5)—DNS和他的兄弟
我:话说上次好不容易送走了TLS,这次......
DNS:(突然蹦出来)这次当然是我的专场啦!大家好,我叫DNS(Domain Name System,域名系统),我出生于1987年,在我出生之前计算机科学家们是用hosts.txt文件解决主机名与对应IP地址的对应问题的,但随着互联网中主机数量的增长,hosts文件变得越来越臃肿,也越来越用户不友好,我就横空出世啦!(不过各操作系统中的hosts文件依旧保留至今,历史的遗迹啊)
我主要工作在UDP/IP协议之上,实质是一个分布式的公开数据库系统,存储着各网站域名和IP地址对应的数据,又称作RRsets(Resourse Record,资源记录集合),这里面域名和对应IP地址形成了映射......
我:D!N!S!为什么你们这些协议都有着爱打断别人的话的毛病啊?还有,你不必在这叽里呱啦了,我已经让你出场过两次了!
DNS:不行,我这次还就不走了,因为:1,你在这大肆嘲笑我,说我傻乎乎的工作在不可靠无连接的UDP之上从而让GFW很轻易的就能钻空子;2,我有一个兄弟你没有提到,今天我一定要把他介绍给大家,让大家看看我们DNS家族没有你想象的那么弱不经风!
我:关于第一点,我想我说的一点都没错:你工作在不可靠的UDP之上,没有任何安全机制,的确是很傻啊:)
DNS:难道你就没有想过我为什么主要工作在UDP之上呢?
我:很简单,因为面向连接的TCP工作时需要经历复杂的建立连接和拆除连接的过程,建立一条逻辑上的“专线”(Virtual circuit,虚电路,或者直接叫做Connection)以保证数据传输的可靠性,而UDP就没有这些工作步骤了,只管发送不管到达。而你这个懒鬼不肯经历TCP那些麻烦的工作步骤,所以就选择了UDP啊......
DNS:住口!我才不是什么懒鬼呢!你想过没有,TCP那复杂的连接建立与拆除过程是要消耗相当数量的资源的? 你想过没有,每一个Resolver(域名解析服务器,负责和客户端通信)和Name Server(域名权威服务器,储存有RRsets,负责和Resolver通信)每天都要面对着极大量的查询请求?你想过没有,域名解析是一个非常短暂的过程,如果采用TCP,那么很多时候连接建立和拆除的过程都比查询过程要长!
我:......如果采用TCP,那么每一个相关的服务器消耗的计算资源都会疯涨,而1987年服务器的计算能力怕是连今天的PC都赶不上,再加上连接建立与拆除的时间,用户体验会变得极为糟糕的,服务器维护成本也会暴增......OK,我明白了,对不起,DNS。
DNS:你明白就好。说起来,我没有任何安全机制很大程度上也是因为性能。不过我的创造者们也的确太欠考虑了,我在互联网中是极为关键的一环,没有任何安全机制的确是说不过去,所以我这回把我的兄弟DNSSEC叫来了。
我:DNSSEC?DNS Security Extension Protocol(DNS安全扩展协议)?
DNSSEC:正是本人。我出生于1999年,可惜迄今为止还是没有被大规模部署,懒惰的人类啊,一个个拖延症都那么重!
我:(汗)哈哈,是的,不过言归正传吧,上次我在这里]就提到了几条应对针对DNS的攻击的思路,你实现了几条呢?
DNSSEC:让我看看......我添加了身份认证机制,还有就是端到端的完整性校验了,我没有加密,也没有基于TCP工作......
我:添加了身份认证机制?这样倒是可以使GFW伪造查询结果的手段失效了,可是如果说没有加密的话,还是无法防止真正的查询结果被篡改啊......
DNSSEC:不,我可以防止真正的查询结果被篡改的!
我:怎么说?
DNSSEC:重点在于我实现了“端到端的完整性校验”,听说过数字签名吗?我就是利用了数字签名的机制进行完整性校验的,从而保证了服务器传回的查询结果没有被篡改。
我:我不清楚“端到端”是什么意思。
DNSSEC:所谓的“端到端(end-to-end)”是和“跳板到跳板(hop-to-hop)”对应的,hop-to-hop是指这样一种机制:在计算机网络中一个路由器p收到了一条分组(massage)m,p可以确定分组m的确来自于合法通信方路由器q,而且m既没有被篡改也不是被攻击者重放的旧消息(有空我会介绍一下重放攻击);p和q都是负责存储转发的路由器,起到了信息跳板的作用,所以叫做“跳板到跳板”。
而end-to-end则是指客户端可以确认收到的分组的确是来自于目标服务器的,没有被篡改也不是重放的消息;客户端和目标服务器都是通信终端,所以被称作“端到端”。
我:这样啊。我看了一下,数字签名和散列值是用来进行文件完整性校验的,也能用于查询结果啊?
DNSSEC:当然可以啦!我的身份认证机制也是通过数字签名实现的,GFW可出示不了等价的有效数字签名呢!包括在进行缓存动态更新的时候,我也可以通过同样的机制来防止缓存投毒!
我:听起来不错,但你能对付流氓ISP的DNS劫持吗?
DNSSEC:这......我对付不了,因为DNS是公开的分布式数据库......
我:“公开的”意思就是没有权限限制,任何人都能查看修改数据是吧!好吧,这一点都不奇怪。不过如果服务器本身就不靠谱,那么其他安全机制再完善都没用了。
DNSSEC:不是这样的!没有权限限制和随便什么人都能查看修改数据可不是一回事!我的意思是,我可以通过检验缓存中的RRsets的数字签名来确认服务器缓存是否被投毒了,但这前提是服务器已经运行了一段时间了!第一次运行的时候,我可没地方去比对数字签名!
我:看来你离完美很远呢......
DNSSEC:这个世界上没有完美!
我:我知道,但你为什么不加密呢?就你这样,虽说GFW无法玩伪造和篡改的花招了,但用户请求内容还是被GFW知道了啊!
DNSSEC:这我也没办法,当初我的设计者出于性能考虑放弃了加密了,而且也没让我工作在TCP之上。
我:真的应该好好改造你!我还以为以不靠谱著称的DNS家族终于有了一个例外呢,原来还是个水货!行了,你们DNS家族的出场机会用光了,回应用层工作室去吧!
TLS:下次是不是应该讲讲我的兄弟DTLS了?
我:对不起,不行!下次是IP的专场!
(IP:终于想起我来了,感动啊!)
DNS:(突然蹦出来)这次当然是我的专场啦!大家好,我叫DNS(Domain Name System,域名系统),我出生于1987年,在我出生之前计算机科学家们是用hosts.txt文件解决主机名与对应IP地址的对应问题的,但随着互联网中主机数量的增长,hosts文件变得越来越臃肿,也越来越用户不友好,我就横空出世啦!(不过各操作系统中的hosts文件依旧保留至今,历史的遗迹啊)
我主要工作在UDP/IP协议之上,实质是一个分布式的公开数据库系统,存储着各网站域名和IP地址对应的数据,又称作RRsets(Resourse Record,资源记录集合),这里面域名和对应IP地址形成了映射......
我:D!N!S!为什么你们这些协议都有着爱打断别人的话的毛病啊?还有,你不必在这叽里呱啦了,我已经让你出场过两次了!
DNS:不行,我这次还就不走了,因为:1,你在这大肆嘲笑我,说我傻乎乎的工作在不可靠无连接的UDP之上从而让GFW很轻易的就能钻空子;2,我有一个兄弟你没有提到,今天我一定要把他介绍给大家,让大家看看我们DNS家族没有你想象的那么弱不经风!
我:关于第一点,我想我说的一点都没错:你工作在不可靠的UDP之上,没有任何安全机制,的确是很傻啊:)
DNS:难道你就没有想过我为什么主要工作在UDP之上呢?
我:很简单,因为面向连接的TCP工作时需要经历复杂的建立连接和拆除连接的过程,建立一条逻辑上的“专线”(Virtual circuit,虚电路,或者直接叫做Connection)以保证数据传输的可靠性,而UDP就没有这些工作步骤了,只管发送不管到达。而你这个懒鬼不肯经历TCP那些麻烦的工作步骤,所以就选择了UDP啊......
DNS:住口!我才不是什么懒鬼呢!你想过没有,TCP那复杂的连接建立与拆除过程是要消耗相当数量的资源的? 你想过没有,每一个Resolver(域名解析服务器,负责和客户端通信)和Name Server(域名权威服务器,储存有RRsets,负责和Resolver通信)每天都要面对着极大量的查询请求?你想过没有,域名解析是一个非常短暂的过程,如果采用TCP,那么很多时候连接建立和拆除的过程都比查询过程要长!
我:......如果采用TCP,那么每一个相关的服务器消耗的计算资源都会疯涨,而1987年服务器的计算能力怕是连今天的PC都赶不上,再加上连接建立与拆除的时间,用户体验会变得极为糟糕的,服务器维护成本也会暴增......OK,我明白了,对不起,DNS。
DNS:你明白就好。说起来,我没有任何安全机制很大程度上也是因为性能。不过我的创造者们也的确太欠考虑了,我在互联网中是极为关键的一环,没有任何安全机制的确是说不过去,所以我这回把我的兄弟DNSSEC叫来了。
我:DNSSEC?DNS Security Extension Protocol(DNS安全扩展协议)?
DNSSEC:正是本人。我出生于1999年,可惜迄今为止还是没有被大规模部署,懒惰的人类啊,一个个拖延症都那么重!
我:(汗)哈哈,是的,不过言归正传吧,上次我在这里]就提到了几条应对针对DNS的攻击的思路,你实现了几条呢?
DNSSEC:让我看看......我添加了身份认证机制,还有就是端到端的完整性校验了,我没有加密,也没有基于TCP工作......
我:添加了身份认证机制?这样倒是可以使GFW伪造查询结果的手段失效了,可是如果说没有加密的话,还是无法防止真正的查询结果被篡改啊......
DNSSEC:不,我可以防止真正的查询结果被篡改的!
我:怎么说?
DNSSEC:重点在于我实现了“端到端的完整性校验”,听说过数字签名吗?我就是利用了数字签名的机制进行完整性校验的,从而保证了服务器传回的查询结果没有被篡改。
我:我不清楚“端到端”是什么意思。
DNSSEC:所谓的“端到端(end-to-end)”是和“跳板到跳板(hop-to-hop)”对应的,hop-to-hop是指这样一种机制:在计算机网络中一个路由器p收到了一条分组(massage)m,p可以确定分组m的确来自于合法通信方路由器q,而且m既没有被篡改也不是被攻击者重放的旧消息(有空我会介绍一下重放攻击);p和q都是负责存储转发的路由器,起到了信息跳板的作用,所以叫做“跳板到跳板”。
而end-to-end则是指客户端可以确认收到的分组的确是来自于目标服务器的,没有被篡改也不是重放的消息;客户端和目标服务器都是通信终端,所以被称作“端到端”。
我:这样啊。我看了一下,数字签名和散列值是用来进行文件完整性校验的,也能用于查询结果啊?
DNSSEC:当然可以啦!我的身份认证机制也是通过数字签名实现的,GFW可出示不了等价的有效数字签名呢!包括在进行缓存动态更新的时候,我也可以通过同样的机制来防止缓存投毒!
我:听起来不错,但你能对付流氓ISP的DNS劫持吗?
DNSSEC:这......我对付不了,因为DNS是公开的分布式数据库......
我:“公开的”意思就是没有权限限制,任何人都能查看修改数据是吧!好吧,这一点都不奇怪。不过如果服务器本身就不靠谱,那么其他安全机制再完善都没用了。
DNSSEC:不是这样的!没有权限限制和随便什么人都能查看修改数据可不是一回事!我的意思是,我可以通过检验缓存中的RRsets的数字签名来确认服务器缓存是否被投毒了,但这前提是服务器已经运行了一段时间了!第一次运行的时候,我可没地方去比对数字签名!
我:看来你离完美很远呢......
DNSSEC:这个世界上没有完美!
我:我知道,但你为什么不加密呢?就你这样,虽说GFW无法玩伪造和篡改的花招了,但用户请求内容还是被GFW知道了啊!
DNSSEC:这我也没办法,当初我的设计者出于性能考虑放弃了加密了,而且也没让我工作在TCP之上。
我:真的应该好好改造你!我还以为以不靠谱著称的DNS家族终于有了一个例外呢,原来还是个水货!行了,你们DNS家族的出场机会用光了,回应用层工作室去吧!
TLS:下次是不是应该讲讲我的兄弟DTLS了?
我:对不起,不行!下次是IP的专场!
(IP:终于想起我来了,感动啊!)
SSL/TLS的原理以及互联网究竟是如何工作的(5)—DNS和他的兄弟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。