[翻译]用信鸽解释HTTPS协议

在freecodecamp.org中阅读到Andrea Zanin用信鸽来解释HTTPS协议的文章,其实也适用于各种over SSL协议的入门文章,作为基本概念介绍非常浅显易懂。原文网站上有韩语、葡萄牙语、西班牙语、蒙古语、波斯语、越南语的翻译链接。在这个疫情肆虐、呆家里就是为国为民的冠状病毒假期,把文章翻译成中文,供大家参考。

原文标题:《HTTPS explained with carrier pigeons》
原文链接:
https://www.freecodecamp.org/news/https-explained-with-carrier-pigeons-7029d2193351/

在这里插入图片描述

密码学是门不易理解的学科,它充满了数学证明。不过,除非你正在开发密码系统,否则并不需要了解大部分复杂的高级内容。

如果您打开这篇文章是希望实现HTTPS协议,那么很抱歉,信鸽恐怕远远不够。否则的话,请开始煮杯咖啡,让我们一起开始吧。

爱丽丝、鲍伯和信鸽?

在互联网上的所有活动(包括读这篇文章、在亚马逊购物、上传照片)都需要与一个服务器发送和接收信息。

这听上去有些抽象,因此我们可以想象成这些“信息”由**信鸽(carrier pigeons)**来传递。这种比喻咋看虽有些无厘头,但请相信我,除了速度要快得多之外,HTTPS的工作方式与之非常相似。

同样的,我们使用爱丽丝(Alice)、鲍伯(Bob)和马洛里(Mallory)来替代服务端(Servers)客户端(Clients)黑客(Hackers)。如果这不是首次了解密码学知识,你应该知道这些在技术文章中广泛使用的名字。

第一次原始通讯

如果爱丽丝希望发消息给鲍伯,她应该把写有消息的纸条绑在信鸽的腿上然后发给鲍伯。鲍伯收到消息后读完消息,这是正常的过程。

但如果马洛里拦截了爱丽丝飞行中的信鸽,更改了消息怎么办?鲍伯将无从知晓爱丽丝发出来的消息是否在传送过程中被更改。

HTTP协议就是这样工作的。是不是很害怕?我不会通过HTTP协议来传递银行卡信息,希望你也不要这样做。

秘密的编码

现在假设爱丽丝和鲍伯非常机灵,他们约定使用一种秘密的编码来编写消息。他们会根据字母表把消息中的每个字母向前移3个位置,例如D → A, E → B, F → C。如果原始信息是"plain message"那么就会转换成"pbzobq jbppxdb"。

这样一来,如果马洛里拦截了信鸽,既无法修改成有意义的消息,也无法得知消息的含义,因为她不知道是怎样编码的。而鲍伯能简单的通过反转的方式A → D, B → E, C → F解出原始消息内容。消息"pbzobq jbppxdb"很容易被解密还原成"plain message"。

是不是很棒!

这被成为对称密码算法(symmetric key cryptography)。如果你知道如何加密一段消息,就能知道如何解密它。

上文中使用的编码方式被称为凯撒密码(Caesar cipher)。在真实世界中,我们使用更加精巧且复杂的编码方法,但思路是一致的。

我们如何确定使用的密钥

在除发送者和接受者之外,无人知晓密钥的情况下,对称密码算法非常安全。在凯撒密码中,密钥就是把每个字母移动的位置数。在我们的例子中使用了3个位置的偏移,但我们也可以使用4或者12。

问题就在于如果爱丽丝和鲍伯在使用信鸽传递消息前没有见过面,他们就无法安全地确立使用的密钥。如果他们在消息中直接发送密钥,马洛里就有可能截获消息并发现密钥。这会使马洛里可以在爱丽丝和鲍伯加密信息前后读或修改消息。

这个例子是典型的中间人攻击(Man in the Middle Attack),要避免这个问题,仅有的解决方法就是更换整个加密系统。

携带信箱的鸽子

所以爱丽丝和鲍伯需要一套更好的系统。如果鲍伯需要发送消息给爱丽丝可以按照以下过程:

  • 鲍伯发一只没有任何消息的信鸽给爱丽丝
  • 爱丽丝把这只信鸽带上一个开了锁的信箱发回给鲍伯,留下钥匙
  • 鲍伯把消息放入信箱后上锁(上锁不需要钥匙),然后把信箱发给爱丽丝
  • 爱丽丝用先前留下的钥匙打开收到的信箱,就可以读到鲍伯发来的信息

通过这种方式,即使马洛里截获了信鸽也无法改变消息,因为她没有信箱的钥匙。当爱丽丝要发消息给鲍伯的时候也使用同样的过程。

在这个过程中爱丽丝和鲍伯就使用了大家熟知的非对称密码算法(asymmetric key cryptography)。之所以称为“非对称”,是因为即便你可以加密消息(把信箱锁上),也无法解密消息(打开信箱)。
用技术用语描述,信箱就是公钥(public key),用于打开信箱的钥匙就是私钥(private key)

如何确定信箱是可信的

如果你仔细思考,会注意到这样仍然存在问题:当鲍伯收到一个打开的信箱,他怎么能确定这就是爱丽丝发过来的,而马洛里没有截获鸽子换成自己有钥匙的另一个信箱呢?

于是爱丽丝决定在信箱上签名(signature),这样一来鲍伯就可以在收到后检查上面的签名来确认是不是爱丽丝发的信箱。

有些人还会想到,鲍伯首先如何能识别爱丽丝的签名呢(马洛里完全可以在信箱上伪造爱丽丝的签名呀)?这是个好问题!爱丽丝和鲍伯都有这样的问题,所以他们想到一个办法,由泰德(Ted)来帮爱丽丝签名。

谁是泰德?泰德是一个非常有名且值得信任的人。泰德可以向所有人签名,而每个人都相信他只会为合法人群签名。

泰德只会在确认要求签名的人是爱丽丝的情况下,才会给信箱签上爱丽丝的签名。所以马洛里无法获得泰德代表她签名的爱丽丝信箱,因为鲍伯会知道信箱是假的,原因是泰德仅在验证其身份后才为人们签名。

从技术术语上说,泰德就是认证机构(Certification Authority),你看这篇文章正在使用的浏览器就有许多个认证结构的签名。

因此当你首次访问一个网站的时候,你信任“它的信箱”因为你信任泰德,而泰德告诉你这个信箱是合法的。

沉沉的信箱

爱丽丝和鲍伯现在拥有一套可信赖的系统用于交流,但也意识到携带着信箱的信鸽比那些只带着消息的信鸽要慢很多。

于是他们决定仅使用信箱(非对称算法)来传递密钥,而使用对称算法来加密信息(想起凯撒密码了吗?)。

通过这样的方式两全了非对称密钥的可靠性和对称密钥的效率。

真实世界中其实没有慢鸽子,因为使用非对称算法来加密信息要远慢于对称算法,所以我们仅仅用非对称算法来传输对称算法的密钥。

现在您是否大致了解HTTPS协议是如何工作的吗?本文开始时的那杯咖啡已经煮好了,把它作为了解新知识的奖励吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值