原文地址:https://medium.freecodecamp.o...
密码学是一门很难理解的学科。它充满了数学证明。但是对我们来说,其中大部分的复杂性,是没有必要去理解其在高层次到底发生了什么。
如果你点开这篇文章,希望创建下一代HTTPS协议,那非常抱歉仅有鸽子是不够的。不过可以先煮杯咖啡,然后慢慢享受这篇文章。
Alice, Bob and … pigeons?
你通过网络做的任何事情(读该篇文章,在亚马逊上买东西,上传猫的照片)都可归结为发送信息给服务器并从服务器获取信息。
这可能有点抽象。让我们想象一下这些信息是通过信鸽传递的。我知道这看起来可能有点随意,但是请相信我https就是用相同的方式工作的,虽然它在速度上快很多。
同理,我们不讨论客户端,服务器和黑客。我们将谈论Alice, Bob 和 Mallory.如果你不是第一次尝试理解密码学的概念,这几个名字你应该不陌生,因为它们经常出现在技术文献里。
第一次天真的通信
如果Alice想给Bob发送一条消息,她把消息绑在信鸽的腿上然后发送给Bob。Bob收到消息,然后读消息,一切看起来都很好。
但如果Mallory在空中劫持了Alice的信鸽并换掉了消息会怎么样呢?Bob将没有办法知道Alice发送的消息在运送途中被更改了。
这就是http工作的方式。非常可怕是不是?我不会在HTTP上发送我的银行证书,你应该也不会这么做。
密码
现在如果Alice和Bob都很狡猾。他们同意使用密码来写他们的消息。他们将每个字符在字母表中的位置移动三个位置。如:D → A, E → B, F → C。明文信息“secret message”将变成“pbzobq jbppxdb”。
现在如果Mallory劫持信鸽,她将不能把信息改成一些有意义的,也不能理解消息里说了些什么。因为她不知道密码是什么。但是Bob可以轻松地反向应用密码然后解密消息(A → D, B → E, C → F)。然后密文“pbzobq jbppxdb”可解密成“secret message”。
成功!
这就是所谓的对称密钥加密。因为如果你知道怎么加密信息你也就知道如何解密。
上面描述的编码通常称为凯撒密码。在现实生活中,我们使用更加复杂的编码,但是主要的思想还是一样的。
我们怎么决定秘钥?
对称秘钥加密在除了发送方和接收方,没有其他人知道使用了什么秘钥时是安全的。在凯撒密码中,秘钥就是一个偏移量即每个字母移动的偏移数。在我们的例子中我们使用的偏移量是3,但也可以是4或者12。
问题在于如果Alice和Bob在利用信鸽发送消息之前没有见过面,他们没有办法安全地建立一个秘钥。如果他们在消息中同时发送秘钥,那Mallory可以劫持消息并发现秘钥。这就允许Mallory读取或者修改消息。
这就是属于中间人攻击的一个经典例子。并且唯一的避免方式就是一起改变加密系统。
携带盒子的鸽子
所以Alice和Bob想出了一个更好的系统。当Bob想给Alice发送一条消息时,他遵循以下的流程:
- Bob给Alice发送一只不含消息的鸽子
- Alice发送回一只携带一个盒子的鸽子,盒子上有一把打开的锁,但自己保留了钥匙。
- Bob把消息放进盒子里,关上锁,并把盒子发送给Alice.
- Alice接受盒子,用钥匙打开它然后读取消息。
这种方式Mallory无法通过劫持信息篡改消息,因为她没有秘钥。相同的流程用同样应用于Alice给Bob发送消息。
Alice和Bob就是应用了俗称的非对称秘钥加密。它被叫做非对称是因为你可以加密消息(锁上盒子)但是不能解密消息(打开关上的盒子)。在技术文献中这个盒子被称为公钥,打开它的钥匙被称为私钥。
如何信任盒子
如果你仔细思考你可能会发现我们还存在一个问题。当Bob接收到打开的盒子后如何确定它是来自Alice的并且Mallory没有拦截鸽子并替换成Mallory自己有秘钥的盒子呢。
Alice决定,她将给盒子签名。通过这种方式,当Bob接受到盒子时,他检查签名然后知道它是Alice发送过来的盒子。
你们可能会想,Bob第一次怎么辨别Alice的签名呢?这是一个好问题。Alice和Bob也有这个问题,所以,他们决定让Ted给盒子签名,而不是Alice。
谁是Ted? Ted就是著名的,值得信耐的朋友。Ted将他的签名给每一个人,每个人也相信他将只会给合法的人签名盒子。
只要当Ted确认请求签名的人是Alice时,他才会对盒子签名Alice。因此Mallory无法从Ted那获取Alice的签名来假冒Alice,Bob也会知道那个信盒是假冒的。因为Ted只在鉴定完请求者的身份后才会给他们的信盒签名。
Ted在技术上常被称作为证书颁发中心,你正在阅读这篇文章的浏览器就附带了各式各样的证书颁发中心。
所以当你第一次访问一个站点,你信任它的盒子,因为你信任Ted并且Ted告诉你那个盒子时合法的。
盒子很重
Alice和Bob现在有一个可信耐的系统去通信,但是他们发现携带盒子的鸽子比仅仅携带消息的鸽子更慢。
他们决定他们将仅使用盒子方法(非对称加密)选取一个秘钥,使用对称加密来加密消息(还记得凯撒密码吗)
这种方式结合了两者的优势。非对称加密的可靠性以及对称加密的效率。
在现实世界中没有慢的鸽子,但是无论如何使用对称加密总是比使用对称加密慢,因此我们仅使用它用于交换秘钥。
现在你知道HTTPS是如何工作的,你的咖啡也应该好了,去享受咖啡吧。
翻译若有不正之处,欢迎指出!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。