【翻译】用信鸽来解释 HTTPS

Posted on 2018 September 5
Words 224

原文链接:https://medium.freecodecamp.org/https-explained-with-carrier-pigeons-7029d2193351

强烈推荐阅读原文,毕竟翻译不咋地

/images/pigeons.png

密码学是一样很难懂的东西,因为它充满了数学上的证明。但是,除非你是需要开发密码系统的人,否则的话你可能并不需要完全搞懂密码学里那些复杂的细节部分。

如果你想要靠这篇文章来创建下一代 HTTPS 协议,那我只能很抱歉地告诉你,信鸽还不能做到这一点。否则的话,煮一杯咖啡,然后尽情享受这篇文章。

Alice、Bob 和 …信鸽?这些都是什么鬼?

你在互联网上做的任何事情(读这篇文章、在 Amazon 上买东西、上传猫的照片)都可以概括为向服务器发送消息和接收来自服务器的消息。

这可能有点抽象,所以,请想像成我们让 信鸽 来帮忙派发这些消息。我知道这看起来非常地奇怪,但是,相信我,HTTPS 的工作机制和信鸽是一样的,只是 HTTPS 比信鸽快得多。

同样道理,我们也不说服务器、客户端和黑客这些词语,我们用 Alice、Bob 和 Mallory 这些人名来代替。如果你之前了解过密码学的概念的话,这些名字你可能会有点眼熟,因为他们在技术书籍里被广泛地使用。

一次原始的通信

如果 Alice 想要发送消息给 Bob,她会将消息绑在信鸽的腿上然后发送给 Bob,最终 Bob 收到消息并查阅,这个过程似乎非常 OK。

但如果 Mallory 从空中拦截了 Alice 的信鸽并改变了消息的内容呢?Bob 并不知道消息在传输的过程中已经被修改过了。

这就是 HTTP 的工作机制。非常可怕,对吧。我是不会在 HTTP 上发送我的银行卡信息的,你也不要这样做。

一个秘密的代码

现在,Alice 和 Bob 变得非常聪明,他们决定使用一个秘密的代码来写信。他们将会对字母表里每个字母移动 3 个位置。例如,D -> A、E -> B、F -> C。那么明文 “secret message” 将会变成 “pbzobq jbppxdb”。

现在,如果 Mallory 拦截了信鸽,那她也不能将消息改变成有意义的东西或读懂消息,因为她不知道秘密的代码。但是,通过将代码反过来用, Bob 轻易地就可以解密消息,例如 A -> D、B -> E、C -> F。那么密文 “pbzobq jbppxdb” 就会解密回明文 “secret message”。

成功了!

这个加密的代码称为 对称秘钥密码( symmetric key cryptography),因为如果你知道了如何加密消息,那么你也就知道了如何解密消息。

上面我所提到的密码称为 凯撒密码(Caesar cipher),在现实当中,我们会使用更加复杂的代码,但是,主要的思想的一样的。

我们是如何决定秘钥的?

如果除了发送方和接收方之外,没有人知道使用了什么密钥,则对称密钥密码术是非常安全的。在凯撒密码中,秘钥是每个字母的偏移量。在我们的例子中,我们使用的偏移量是 3,也可以是 4 或 12。

问题是,如果 Alice 和 Bob 在用信鸽发送消息之前都没有见过面,那么它们就无法保证秘钥的安全。如果他们在消息本体中发送秘钥的话,Mallory 就可以拦截消息并发现其中的秘钥。那么即使之后 Alice 和 Bob 使用加密过的消息通信,Mallory 也可以像之前那样查看并改变明文。

这就是典型的 中间人攻击(Man in the Middle Attack) 的例子,避免中间人攻击的方法就是改变整个加密系统。

信鸽传送盒子

所以 Alice 和 Bob 提出了一个更好的系统。当 Bob 像要给 Alice 发送消息时,Alice 依次做下列的这些程序:

  • Bob 发送一个信鸽给 Alice,这个信鸽没有携带任何消息。
  • Alice 把这个发回给 Bob,并携带了一个盒子和一把开着的锁,Alice 自己保留着锁的钥匙。
  • Bob 把消息放进盒子里,然后用之前的那把锁锁上盒子,随后把盒子发给 Alice。
  • Alice 收到盒子后,用锁的钥匙打开盒子并阅读消息。

这样 Mallory 就不能通过拦截信鸽来改变消息了,因为她没有锁的钥匙。当 Alice 想发送消息给 Bob 的话也是同样的道理。

Alice 和 Bob 使用的就是熟知的 非对称秘钥密码(asymmetric key cryptography)。之所以称为非对称,是因为即使你可以加密消息(锁上盒子),你也不可以解密消息(打开一个锁上的盒子)。在技术层面的话,那个盒子就称为 公钥(public key),打开盒子的钥匙就称为 私钥(private key)

我怎么相信那个盒子呢?

如果你注意力集中的话你可以会注意到还有一个问题。当 Bob 接收到那个盒子的时候,他要怎么确定这个盒子是来自 Alice 的,而不是 Mallory 拦截了信鸽之后,将盒子改成了 Mallory 可以解开的盒子,然后发送给 Bob呢?

Alice 决定她要对盒子进行签名,这样当 Bob 接收到盒子的时候,他就会检查盒子的签名,知道这个盒子是否是 Alice 发的。

你可能会想,Bob 如何首次识别出 Alice 的签名呢?问的好。Alice 和 Bob 都有同样的问题,所以它们决定不用 Alice 对盒子进行签名,Ted 会对盒子签名。

谁是 Ted?Ted 是一个非常有名的、信得过的人。Ted 把他的签名给每个人并且每个人都相信他只会为合法的人签名。

当 Ted 确定请求签名的人是 Alice 时,则 Ted 就会在一个 Alice 的盒子上签名。所以 Mallory 不能代表 Alice 来获得有 Ted 签名的 Alice 的盒子,然后 Bob 就会知道这个盒子是假的,因为 Ted 只会为验证身份后的人进行对盒子的签名。

Ted 在技术术语中通常称为 证书颁发机构(Certification Authority),你阅读本文所使用的浏览器打包了各种证书颁发机构的签名。

所以,当你首次连接一个网站时,你就相信了它的盒子,因为你相信 Ted 而且 Ted 告诉你这个盒子是合法的。

盒子是很重的

现在,Alice 和 Bob 有了一个可靠的通信系统,但是他们认识到,信鸽携带盒子比携带消息要慢得多。

所以,他们决定只在用对称密码(还记得凯撒密码?)中,选择加密消息的秘钥的时候才使用这个盒子的方法(非对称密码)。

这样他们就可以同时得到了对称密码和非对称密码的优点。即非对称密码的可靠性和对称密码的高效性。

在真实世界中,当然不是使用慢速的信鸽,但是使用非对称密码来加密消息确实比使用对称密码要慢,所以,我们只会在交换加密秘钥时才使用非对称密码。

现在你应该知道 HTTPS 是怎样工作的了。好了,你的咖啡也应该好了😉。