简述加密体系的发展

来源:互联网 发布:衣裤尺码软件 编辑:程序博客网 时间:2024/05/20 18:15

  梳理一下加密体系的发展,使得大家能够快速的了解互联网现有的证书体系的由来以及问题所在,当然还有针对问题的补救措施。

  A,B两方进行通信,为了防止第三方窃听到通信的内容,因此需要对A、B的通信内容进行加密处理。

  第一个阶段:对称加密阶段:

  对称加密指的是,加解密使用同一个秘钥,如图1。A将加密秘钥发送给B,B使用key1加密数据,然后将加密后的数据发送给A。由于A向B传输的过程之中则可能出现秘钥泄露的风险,因此这种传输是不安全的。加密算法经过多年发展,虽然越来越复杂,破解难度越来越高(代表算法是DES和AES),但是秘钥泄露这个致命弱点始终存在。

图1

  第二阶段:非对称加密阶段:

  非对称加密指的是加密和解密使用不同的秘钥,如图2。这个阶段解决了第一个阶段中秘钥传输过程中泄露的问题。由A生成秘钥对,即公钥和私钥。对于任何一个想向A传输数据的一方来说,只要使用A广播出来的公钥进行加密,将加密后的数据传输给A即可。由于经过公钥加密之后的数据,只有私钥能够解密,而私钥有没有经过任何的传输。所以第一个阶段的秘钥泄露问题得到了解决。当然这里面有一点比较关键,那就是使用公钥来逆向计算出相应的私钥是不可能(当让这是基于现有的数学理论基础以及现有计算能力的)。代表算法有RSA,DH。

图2

  第三个阶段:证书阶段:

  第二个阶段的确能够保证私钥不泄露,但是我们最终的目标是保证数据不泄露。通信过程中公钥是任何人都可以知道的,那么就存在一个问题:B想向A传送数据,但是B接收到的公钥是否是A的公钥,如果是,则没有问题,如果不是,则可能会出现图3的场景。在秘钥交互阶段,A和B的通信被C截获,当A和C通信是,C伪装成B;当B和C通信时,C伪装成A,然后B传输给A的数据就被C获取了。

图3

  证书的作用就是证明B所接受到的公钥是A发出的,如果不能够证明公钥的所属,则B随时可以终止通信过程。图4是在证书保证下的传输过程。

 

图4

  A所拥有的证书是整个证书管理体系中的关键,是由可信的第三方组织进行下发的,例如verisign,entrust等。图4的过程与图2非常相似,只是图4传输的是A的证书。而证书中不仅包含了用于加密数据传输用途的公钥,而且包含了相应的签名信息用于证明跟B通信的就是A。以实际报文中的数据为例,证书的结构如图5。(当然我们这里面所描述的场景仅仅是一方需要认证的情况,再涉及到双向认证的场景,则双方都需要提供证书以自证。)

图5

  图5显示证书的内容包含了证书版本,证书编号,签名算法,签发者,有效期,使用者,公钥等信息,最后的encrypted所包含的信息就是相应的签名信息,是确认身份用的,即证明A的合法身份。而这部分签名则是证书CA机构对报文中的明文信息通过摘要算法形成摘要,再对其签名形成的,而相应的认证过程则是由根证书,或者证书链一步步去确认的。我们看到有了证书,B就可以确认与其通信方的合法性。

  第四个阶段:证书透明度阶段:

  有了证书,MITM这种行为还存在吗,答案是肯定的。因为图4中B能够确认A合法性基础是在B中存取了对A颁发证书的CA机构的公钥或者说是CA机构的根证书(这里面只是简单说明,至于证书链的情况,原理是一致的)。也就是说只要中间人C能够通过某种方式使得B信任或者存储了C的根证书,这时候C其实伪装的是一个CA机构,那么相应的MITM场景还是会发生的。图6引用自http://www.freebuf.com/vuls/101479.html,很好的说明了中间人伪造证书的场景:

图6

  正常情况的通信,如图6中的浅灰色线条所示,而中间人场景则是黑色线条所示。可以看到用户最终收到了红色的对网站的伪造证书以及黑色的中间人的自签名证书(用于解开伪造网站证书中的签名信息),从而避开了由真正的白色CA根证书去验证这一环节。图6中我认为其实描述的是两个场景:1,由步骤1a申请的浅蓝色证书,其实是可以直接跟PC进行交互的,因为这个时候浅蓝色的证书也是有合法的机构签发的,只是证书中的公钥部分被替换成为中间人的公钥。PC这个时候是信任中间人的,因为根证书的存在。很多CA机构审核不够严格,出现的误签发证书就是这种情况。2,由步骤1b,2,3和PC进行通信,这个时候是中间人通过自签名根证书以及签发网站证书。这时候是需要PC信任其自签的根证书的。使用fiddler进行中间人代理就是属于这种情况。

  那么证书体系最大的问题是什么呢?B选择信任C的根证书是B的权利,这并不是整个证书体系的问题所在,因为你不能够要求你的用户去做些什么(也你不能责怪用户出现泄密的根由是用户信任了假的第三方),用户总是小白,很多时候技术是要保持对用户的透明性。那么问题在于C能够随意签发证书,尽管其不是真正的CA机构,因此整个证书体系最大的漏洞在于任何人都能够对某一个网站签发证书,而真实的网站拥有者A对此并不知情,同时用户不能够辨别真伪。怎么样去解决这样一个问题呢?

  由于假证书的泛滥,因此谷歌发起了一个叫做证书透明度的项目CT。而CT的作用就是验证证书的合法性,对假证书进行甄别。其基本思路就是建立一个证书白名单,而这个白名单则是由各个正规的CA机构在签发证书之前,将证书信息提交给Google的CT服务器,而谷歌则返回给CA一个SCT信息嵌入到相应的证书之中。也就是说谷歌有了几乎所有网站的证书信息,有了这样一个白名单,则每次使用chrome访问网页的时候,在server hello阶段进行证书验证的时候,chrome在白名单中搜索相应的证书信息,如果找到,则为合法的证书;如果找不到,则提示用户网站的安全性,其基本原理如图7。

  步骤1向CT服务器添加白名单,步骤4,5可以向服务器请求查询相应的证书是否合法。


图7


图8

  图8显示了百度的CA签发机构赛门铁克也都加入了CT计划当中。据说谷歌将在2017年全面实施CT计划,通过这种方法就可以有效的解决假证书泛滥问题,届时通过没有加入CT的网站,通过chrome可能会不能访问。但是标榜着不作恶的Google在拥有了这项监控全世界的权利之后(因为我们看到CT服务器是在所有人之上的),是否能坚守住底线,是值得时间去检验的。毕竟其不作恶的信仰曾被多次打破。


0 0