对称加密|非对称加密
你和班上的同学谈恋爱了,但你们座位太远,只能靠中间的同学帮你们传递纸条。一开始还挺甜蜜,但慢慢出现了两个问题:
一、有人偷看纸条,把你们的小甜蜜当作饭后谈资;
二、有人篡改内容,让你们之间产生了很多误会。
这必须得想个办法解决。不过有个前提,你们不能私下沟通,所有的信息交互必须通过中间人来传递。
最初的想法很简单,就是把要传递的消息放到一个带锁的盒子里,发消息的人先用钥匙上锁,读消息的人再用钥匙解锁,这把钥匙起到了加密信息的作用。你给它起了个名字,叫做密钥。加密和解密都使用相同的密钥,你把这种加密方式叫做对称加密。在现实生活中,这种情况再正常不过了,但别忘了所有的信息都必须通过中间人来传递,这把密钥也要通过中间人来传递。
所以,一旦中间人知道了这个密钥的信息,你们的通信也就不再安全了。那怎么样才能把这个密钥安全地传给对方呢?再把这个密钥放到一个带锁的盒子里吗?外面这个新盒子的密钥又该怎么办呢?
看来仅仅使用对称加密的方式,不论套多少层,始终存在最外层的密钥泄露的问题,进而里面的所有密钥都无法保证安全。于是聪明的你们发明了一种神奇的锁,锁有两把钥匙a和b。如果用a加锁,那么需要用b解锁;反之,如果用b加锁,那么需要用a解锁。你给这种加密和解密使用不同密钥的加密方式起了个名字,叫做非对称加密。
公钥加密+私钥解密=防偷看
你们通过这样的方式,居然可以在别人的眼皮子底下秘密通信,而且中间人即便知道了你们的策略,也没有办法,不愧是顶级策略。你把密钥a叫做私钥,只有你自己知道;密钥b叫做公钥,对所有人公开。这时我们得出一个结论:公钥加密、私钥解密可以实现消息的保密传输。那我们一开始的问题是对称加密的密钥在传递的过程中会被中间人偷看到,我们把这个方法用在传输对称密钥本身上不就可以了吗?
你手里准备一个私钥a和一个公钥b,你对象手里准备一个你们今后对称加密的密钥m。现在你们的目的就是让你对象把m安全传输到你的手里。和刚刚一样,总共分三步:
一、你把公钥传给你对象,相当于对外公开了;
二、你对象用公钥b加密他手里的对称密钥m;
三、把加密后的消息传给你,你用私钥a解密得到对称密钥m。
双方手握同一个对称密钥m,于是你们就可以安全地通信了。中间人由于没有你手里的私钥a,所以无法解密,问题完美搞定了。
那些中间人并非易对付,其手段之恶劣难以想象。我们回顾一下,最初担心通信内容被中间人看到,因此采用对称加密保护信息安全。但对称加密的密钥传输存在不安全的问题。为保护密钥传输,我们采用公钥加密、私钥解密的方式,防止密钥被中间人看到,这保证了密钥传输的安全。但同时也暴露了一个新问题,即公钥传输仍为明文,虽不怕中间人看到,但中间人是否可能篡改它呢?
来看下面这个巧妙的过程,传递公钥时,中间人直接扣下公钥,替换成自己伪造的公钥,发送给接收方。接收方用中间人伪造的公钥加密信息m,此时中间人可解密获取m。同时,中间人再用真正的公钥加密m,发送给发送方。对发送方来说,用私钥解密顺理成章地拿到m,未发现任何问题。对接收方来说,收到公钥也未发现问题。最终,中间人在神不知鬼不觉的情况下获取了通信密钥m,这就是中间人攻击。如何解决这一问题呢?
私钥加密+公钥解密=防篡改
回到流程中出现的问题,即公钥的传输存在被中间人篡改的可能。是否有办法让信息传递即使被看到,但仍不能被篡改呢?有的,那就是用私钥加密、公钥解密。在传递公钥时,再套一层非对称加密,用私钥c加密,让对方用公钥d解密。为何这样做就不会被篡改呢?
因为中间人如果想篡改信息,就需要用私钥c重新加密。但私钥c中间人并不知道,因此无法篡改。私钥加密通常叫做签名,公钥解密则是验证签名的过程,叫做验签,这是防止信息被篡改或伪造的经典手段。好了,问题再次得到解决,我们下次再见。
但想必你也发现问题了,此时公钥d又变为明文传输,仍有可能被中间人篡改。难道要再套一层非对称加密来保证公钥d不被篡改吗?这样就没完没了了。最终总有一层信息的传递存在问题。那这可怎么办呢?仅凭双方无法解决根本问题,需要引入第三方来协助。回到这个场景。
CA证书颁发机构|数字签名
回到上一步的问题,现在的问题是公钥b在传输过程中无法防止被篡改。你可以先把公钥b交给一个可信的第三方,第三方也有一对公钥和私钥。第三方用自己的私钥对公钥b进行加密,做一个数字签名,然后发给你。你把这个数字签名和你的公钥b发给你对象,你对象用第三方的公钥解密,一方面可以拿到你的公钥b,另一方面也可以进行对比,看是否被篡改。这时有同学可能要问。这不就是把你对公钥b进行签名的过程改成了第三方对公钥b进行签名的过程吗?那凭什么中间人不能伪造一个第三方的公钥,进而像之前那样进行中间人攻击呢?
答案是可以的。但中间人胡乱生成的公钥不具备可信度,若对方增加一步验证环节,且该公钥不属于大家公认可信的第三方,则可拒绝后续的通信过程,我们将公认可信的第三方权威机构称为CA级证书颁发机构。
HTTPS网络安全传输协议
将通信双方换成电脑,中间传递信息的过程换成网络环境,则这一套用于网络安全传输的协议就称为HTTPS。现在我们访问的网站,基本都是HTTPS开头的地址,例如用Chrome浏览器打开百度,可以看到CA机构的名称、网站的公钥以及数字签名等信息。若中间人伪造了一个CA机构,浏览器会弹出一个安全提示。使用Wireshark抓包,或直接查看HTTPS的官方文档,也可以看到整个HTTPS握手的全过程。
总结来说,HTTPS的目标是为通信双方协商出一个用于对称加密的密钥M,而中间人的目标则是设法神不知鬼不觉地获取这个密钥M。为保护密钥M的传递,需先套上一层非对称加密传输该密钥M;又为保护这层非对称加密中的公钥的传输,还需通过CA机构进行签名以防止公钥被篡改。所以,当你毫不犹豫地在浏览器里输入一串地址,看到前面毫不起眼,甚至经常被隐藏显示的HTTPS时,请记住,这是人类的智慧结晶,是身处完全不可信的网络环境中的一套顶级策略。它让你能在全世界的注视下与远方的人安心对话,这就是HTTPS。