前言
在网络上的任何流动都能够归结为服务器之前的收发音讯。咱们能够将这些音讯的收发,设想成由鸽子实现的。这很荒诞,但的确如此。
Http
有一天爱丽丝通过鸽子发送一条“我爱你”的音讯给鲍勃。然而爱丽丝的情敌马洛里,半路拦挡了鸽子,并将音讯批改为了“我不爱你”。然而鲍勃无奈晓得,音讯被篡改了。这就是 Http 的工作形式,十分的不牢靠。
一个明码
爱丽丝和鲍勃,筹备对音讯进行加密。比方将字母偏移 3 位,比方“A”应用“D”示意,“B”应用“E”示意。马洛里即便拦挡了鸽子,也无奈进行批改,因为他不分明加密的形式,无奈了解音讯的内容。然而鲍勃却能够轻松将音讯进行解密。
这被称为 symmetric key cryptography(对称密钥加密),你晓得如何加密也晓得如何解密。事实的生产中,会应用更简单的加密形式,然而主体思路是雷同的。
如何确定密钥
如果爱丽丝和鲍勃在发送音讯前不见面,他们无奈建设平安的密钥。如果在音讯自身之中,携带密钥。马洛里就会晓得音讯的内容,对其解密后进行篡改。
这就是典型的 MITM(中间人攻打), 防止中间人攻打咱们必须更改加密零碎。
一个盒子
爱丽丝和鲍勃设计出了一个更好的加密零碎,上面是操作步骤
- 鲍勃向爱丽丝,发送了一只没有任何音讯的鸽子
- 爱丽丝在鸽子腿上绑了一个带锁的盒子,盒子是开着的,然而盒子的钥匙爱丽丝留下了。鸽子又飞回到鲍勃哪里。
- 鲍勃写好消息,将音讯放进盒子,并锁了起来。而后鸽子将音讯带回给爱丽丝。
- 爱丽丝收到鸽子,应用钥匙关上了盒子,并读取了音讯
爱丽丝和鲍勃之间的通信应用了 asymmetric key cryptography(非对称密钥加密)。你能够加密音讯(把音讯放进盒子),然而你没方法解密(你没有钥匙)
盒子也能够称为“公钥”,盒子的钥匙被称为“私钥”。
是否是牢靠的盒子?
目前还有一个问题。如果马洛里拦挡了鸽子,将盒子换成了本人的盒子,怎么办?
爱丽丝能够在盒子上,增加上本人的签名,鲍勃就会晓得这个盒子是否来自爱丽丝。那么鲍勃一开始该如何辨认签名呢?
爱丽丝和鲍勃决定让泰德代替爱丽丝在盒子上签名。泰德是一个十分有名的,并且值得信赖的人。泰德只有确定是爱丽丝的盒子的状况下,才会在盒子上签名。而马洛里不会失去泰德的签名。
而泰德就是 Certification Authority(证书颁发机构)
盒子比拟重
带有盒子的鸽子,飞的比不带盒子的鸽子飞的慢,这该怎么办?
应用非对称加密比应用对称加密要慢。爱丽丝鲍勃决定,只应用盒子(非对称加密)替换加密的密钥。而后应用密钥对音讯进行对称加密。
- 鲍勃向爱丽丝发送一只什么都没有的鸽子
- 爱丽丝返回了一个带有盒子的鸽子
- 鲍勃本地生成了一个密钥(用于对称加密),而后把这个密钥放到盒子里,发送给爱丽丝
- 爱丽丝通过私钥对盒子解密,获取了鲍勃生成的密钥
- 之后发送音讯,鲍勃只须要应用密钥进行对称加密即可(这样速度就很快了)
这就是 Https 的原理。
原文
- HTTPS explained with carrier pigeons
参考
- Man-in-the-middle attack
- How does HTTPS actually work?