前言
如今一切都在往数字化方向发展,网络安全问题也变得越来越突出。尤其是当数据在网络中传输时,大家最担心的就是被窃取或篡改。HTTPS 就是为了解决这些问题而出现的。它是在 HTTP 的基础上升级而来的,在传输过程中加入了加密机制,不仅能保证信息不会被随意窥探,还能确保传输内容的完整性。同时,HTTPS 还能用来验证网站和用户的身份,让网络交流更加可信。接下来我们就以另一种视角来聊聊HTTPS。
对称加密
你和班上的女生谈恋爱了,但是你们坐的很远,只能靠其他同学来帮你们传纸条。但慢慢你就发现了几个问题:有些坏同学偷看你写的内容,并且还偷偷的帮你修改了内容导致你们经常吵架,这时候你必须要想个解决办法。但是所有的信息必须由中间的同学来帮你们传递。
这时候你想到一个办法:把你的小纸条放进一个带锁的盒子里,发消息的人先用钥匙上锁,读消息的人用钥匙解锁。这把钥匙加密了你的信息,你给他起了个名称叫做「密钥」,加密和解密信息都用相同的密钥,这种方式称为「对称加密」
非对称加密
很快你就发现了问题,你发现在你传递给对象密钥时,中间的同学也复制了一份。中间的同学还是能偷看你的纸条。于是你又发明一个神奇的锁,这个锁有两把钥匙 A 和 B。用密钥 A 加密时,需要用密钥 B 解锁。当然用密钥 B 加锁需要用密钥 A 解锁。这种加密和解密使用不同的密钥方式称为「非对称加密」。
公钥加密 -> 私钥解密 防偷看
回到这个场景,你先把密钥 B 传递给你的对象,而你自己偷偷保留了一个密钥 A。你的对象将纸条用密钥 B 上锁然后传递给你,即使中间的同学偷偷的复制了一份密钥 B,他也打不开这个锁,从而实现了防止他们偷看。
密钥 A 只有你自己拥有所以称为「私钥」,而密钥 B 对所有人公开则称为「公钥」。
从这里我们可以得出 公钥加密 -> 私钥解密 即可实现信息的保密传输
中间人攻击
回到一开始的问题,如果我们把非对称加密使用在传输对称加密的密钥上是不是就可以安全的使用对称加密来传输信息了。我们来试试
- 首先你准备非对称两把密钥,你的对象准备一把对称密钥
- 你把公钥 B 传递给你的对象
- 你的对象拿到公钥 B 后用公钥加密 对称密钥X
- 中间人只有公钥不能够解密,继而被公钥加密的 对称密钥X 就安全的到了你的手上
- 从此你们就用 对称密钥X 安全的进行通信
这样看貌似已经没什么问题了,中间的同学发现了你们俩的“阴谋”后非常的愤怒啊,同时他们也想到了办法来反击你们。
- 你在传递给你对象公钥 B 时,中间的同学直接把你的钥匙替换成了一把假的
- 你对象拿到假 公钥B 后,用它加密了 对称密钥 X 传递给你
- 中间的同学拿到之后,自己解密复制了 密钥X 再用真的 公钥B 加密起来传递给你
- 你成功的用 私钥A 解密且拿到了 密钥X,没发现任何的不对劲
- 最后你、中间的同学、你对象还是都拥有了 密钥X
这就是「中间人攻击」
私钥加密 -> 公钥解密 防篡改
那有没有方法是可以防止我的密钥防止被篡改呢,答案是有的。在传递公钥时再套一层非对称加密。如图所示。
- 再准备一套 私钥C 和 公钥D
- 用 私钥C 去加密 公钥B
- 这时候中间的同学虽然可以用 公钥D 去解密从而拿到 公钥B 且篡改为假公钥
- 但是他们篡改后无法再次用 私钥C 将内容重新上锁传递给你的对象
- 当你的对象发现没有上锁时,就可以拒绝后续的通信了
私钥加密通常被称为「签名」,公钥解密通常被称为「验签」
证书颁发机构
这时候你还是发现问题了,这个时候 公钥D 变成了明文传输,公钥D 就有了可能被篡改的风险了。不管用那种加密方式或者说嵌套加密,总是有一层的信息是有问题的。
这个时候就需要第三方来帮助你们了。
- 找一个可信的第三方把 公钥B 交给他
- 第三方用自己的 私钥C 加密你的 公钥B(等同于把公钥加签后发给你)
- 你把加密后的公钥以及你自己的 公钥B 再发送给你的对象
- 你的对象拿着第三方的公钥来解密拿到 公钥B,且可以比对两份公钥是否一致,有无被篡改
这时候有同学就要问了,这不就是把自己加密的过程改成了第三方加密吗,中间人难道不能伪造一个第三方公钥从而继续发起中间人攻击吗。答案是可以的。但中间人伪造的公钥不具备可信度,只要增加一步验证环节,如果这个 公钥D 不属于大家公认的第三方,那么就可以拒绝通信。我们把这个公认可信的第三方权威机构称为 CA(证书颁发机构)
总结
把你和对象换成电脑,中间的同学换成网络环境,那么这套用于网络安全传输的协议就叫做 HTTPS。