【第1379期】鸽子传信解释 HTTPS
前言
最近好像关于“程序员”的消息还蛮多的。今日早读文章由@hhking翻译授权分享。
正文从这开始~~
密码学是个很难理解的课程。它包含很多的数学证明。但是其中很多复杂性都不需要深入的去理解,除非你要去开发加密系统。
如果你希望通过阅读这篇文章来创造出下一代的 HTTPS 协议,我只能说抱歉了,通过信鸽来解释是不够的。不是的话,那就一边煮点咖啡,一边阅读这篇文章。
Alice, Bob and … pigeons?
你在网上的一切行为活动(比如:阅读这篇文章;在亚马逊买东西;上传猫的照片)都可以归结为:向服务器发送信息或者接收来自服务器的信息。
这样说可能有点抽象,所以我们想象一下:这些信息通过信鸽传送。我知道这样看起来任性,但是相信我,HTTPS 虽然速度快很多,但是它们 的工作方式相同的。
同样的,我们使用 Alice、Bob 和 Mallory 来指代服务器(servers)、客户端(clients)和黑客(hackers)。如果这不是你第一次尝试去了解加密概念,你会发现这些名称很熟悉,因为它们经常出现在技术文献中。
一次简单的通信 (A first naive communication)
如果 Alice 想给 Bob 发信息,她只需要把信息绑在信鸽的腿上,然后由信鸽传给 Bob。接着 Bob 收到信息。这看起来没什么问题。
但是,如果在信鸽载着信息飞向 Bob 的途中,Mallory 拦截了信鸽,并修改了信鸽携带的信息。而 Bob 无从得知 Alice 传来的信息在传送过程中被修改了。
这就是 HTTP 的工作方式。是不是觉得很可怕?我不会使用 HTTP 来发送我都银行凭证,你也不应该这样做。
密码 (A secret code)
现在假设 Alice 和 Bob 非常的机智。他们达成共识,使用密码加密他们的信息。他们的加密方式是:他们按字母表把每个字母向前移动三个位置,比如: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)。现实生活中,我们使用更高级更复杂的密码,但是原理是一样的。
如何确定密钥 (How do we decide the key?)
如果只有发送者和接收者知道密钥(key),那么对称密钥加密(symmetric key cryptography) 是非常安全的。在凯撒密码 (Caesar cipher) 中,密钥就是对每一个字母做的偏移量的值。上面的例子使用的偏移量是 3,当然我们也可以使用 4 或者 12 之类的。
现在问题是,如果 Alice 和 Bob 在使用信鸽通信之前没有见面交流,那么他们如何安全的建立密钥呢?如果他们通过发送信息来发送密钥,那么 Mallory 就可以截取信息从而发现密钥。这样 Alice 和 Blob 加密或者不加密信息,Mallory 都可以获取或者篡改他们的信息。
这就是典型的 中间人攻击(Man in the Middle Attack) 的例子,避免它的唯一方法就是双方一起更改加密系统。
信鸽携带信箱 (Pigeons carrying boxes)
所以 Alice 和 Bob 又想出一个更好的加密系统。当 Bob 要给 Alice 发送信息的时候,他就按以下步骤操作:
Bob 向 Alice 派出一只不携带任何信息的信鸽
Alice 给信鸽一个开着锁的信箱,并且自己保管钥匙(key),让信鸽飞回 Bob 那边
Bob 把信息塞到信箱里并锁上,然后让信鸽把信箱带回给 Alice
Alice 收到信箱,用保管的钥匙打开信箱拿到里面的信息。
Alice 和 Bob 使用的就是 非对称密钥加密(asymmetric key cryptography)。因为你只能加密信息(锁上信箱)而不能解密信息(给信箱开锁),所以被称为非对称。在专业术语中,“信箱”就是指 公钥(public key),开锁的“钥匙”就是指 密钥(private key)。
如何相信信箱(How do I trust the box?)
你可能注意到,我们还有一个问题!Bob 如何确定收到的信箱(上述第三步)是 Alice 发来的,而不是 Mallory 截取信鸽之后替换成她有钥匙的那个信箱呢?
为了解决这个问题,Alice 决定对信箱进行签名,以便 Bob 收到信箱后可以通过检查签名来确认信箱是 Alice 的。
你可能会想到,在首次通信时 Bob 又是如何鉴定 Alice 的签名呢?好问题!Alice 和 Bob 也为此苦恼。所以他们决定,让 Ted 替代 Alice 对信箱进行签名。
Ted 又是谁?Ted 是一位非常出名、广为人知并且值得信赖的人。由 Ted 给所有人就行签名,并且大家都相信他只会给合法的人签名信箱。
Ted 只有确认是 Alice 请求签名,才会对 Alice 的一个信箱进行签名。这样 Mallory 无法从 Ted 那获得 Alice 的签名信箱来假冒 Alice,因为 Ted 只有鉴定对方身份之后才会对信箱进行签名,所以 Bob 可以知道(Mallory 发送的)信箱是假冒的。
在专业术语中,Ted 通常被称为证书颁发机构。当前你用来阅读这篇文章的浏览器,便附带着各个证书颁发机构的签名。
当你第一次访问某个网站的时候,你会信任它给的“信箱”,因为你信任 Ted 并且 Ted 告诉你这个“信箱”是合法的。
沉重的信箱 (Boxes are heavy)
现在 Alice 和 Bob 可以通过可靠的加密系统来交流,但同时他们也意识到:装载着信箱的信鸽比只携带信息的信鸽速度更慢!
因此,他们决定,只使用“信箱法(非对称加密)”来加密信息 —— 用于确定对称加密的密码(key)的信息(还记得上面说到的凯撒密码吗?)。
这是个两全其美的方法:既有非对称加密的可靠性,又有对称加密的高效性。
现实生活中,并不是使用慢速的信鸽,但是尽管如此,使用非对称加密确实比对称加密慢,所以我们只在交换加密密码的时候使用非对称加密。
现在你知道 HTTPS 是如何工作的了,你的 coffee 应该也煮好了,去好好享受吧!
关于本文
译者:@hhking
译文:
https://blog.hhking.cn/2018/08/25/https-explained-with-carrier-pigeons/
作者:@Andrea Zanin
原文:
https://medium.freecodecamp.org/https-explained-with-carrier-pigeons-7029d2193351
最后,为你推荐