HTTPS
用信鸽来解释 密码学是一门很难理解的学科,它的大部分内容都是数学证明。对于普通人来说,大部分高阶复杂的理论是没有必要去了解的,除非你在开发加密系统。
如果你是希望了解怎么创建下一个HTTPS协议而打开这篇文章的,很抱歉,仅仅拿只鸽子来解释是不够的,否则,煮杯咖啡来享受这篇文章吧。
瓜瓜,皮皮... 和鸽子??
你在互联网网上做的所有事情(包括读这篇文章,在深水宝买东西,在渣浪上传一张猫的照片)都可以归纳为从服务器发送和接收消息。
尽管这有点儿抽象,所以让我们想象这些信息都是信鸽来传递的,我知道这可能有点儿随意,但是相信我,HTTPS也是这么工作的,就是比信鸽快点儿。
在这里,我们不讨论服务器,客户端和黑客,而是用瓜瓜,皮皮和小银子来代替他们。如果这不是你第一次尝试着来理解密码学的概念,你会发现有些词语十分眼熟,因为它们在文献中被广泛使用。
第一次简单的交流
如果瓜瓜想给皮皮捎个话,他把消息写在纸条上,然后把纸条绑在信鸽的腿上,放飞信鸽给皮皮。皮皮收到了瓜瓜的纸条,打开,并且读完了消息。一切正常。
但是如果小银子在信鸽飞行的途中逮住了它,并把纸条掉包了呢?皮皮并不知道瓜瓜发给他的消息在途中被别人修改过。
这就是HTTP如何工作的,有点可怕是不是?我不会通过HTTP来发送银行证书,你也不应该。
插一句话,有时用手机上网的时候,页面下方会有个运营商的流量球。没错,这个时候你的协议一定是HTTP的,而运营商就是上面的小银子。
安全码
瓜瓜和皮皮发现他们眉目传情的消息被小银子篡改了,觉得这样不行,他们当面商议好了一种方法来防止被偷窥。他们将消息中的所有字母右移了三位,例如 D-A
,E-B
,F-C
,原来的消息是 secret message
,加密后就变成了pbzobq jbppxdb
。
现在如果小银子拦截了信鸽,他并不能将纸条上的文字转为有用的信息,也不能理解纸条上说了什么,因为他不知道怎么加密的。
但是皮皮拿到消息后可以解密,通过 A-D
,B-E
,C-F
,纸条上的pbzobq jbppxdb
,解密后就是secret message
。
成功了!
这种方法就就是**对称密钥加密 **(symmetric key cryptography),因为如果你知道怎么加密消息的,你也就知道怎么解密。
我在上面描述的代码通常称为凯撒密码(Caesar cipher),在真实世界中,我们使用更高级和复杂的代码来加密,但是主要的思路是相同的。
我们如何决定密钥?
如果除了发送方和接收方之外,再没有人知道使用了什么样的密钥,那么对称密钥加密是非常安全的。在凯撒密码中,关键是我们移动了几个字母的偏移量,在我们的例子中,偏移量是3,当然,也可以是4或者12。
那么问题来了,如果瓜瓜和皮皮在利用信鸽发送消息之前没有见过面,他们将不能安全的建立密钥。如果他们在纸条中写了密钥,小银子在拦截消息时,就会发现密钥。这样的话,小银子就可以随意的更改消息内容了。
这就是一个典型的中间人攻击的示例,避免它的唯一方法就是同时改变加密方法。
带盒子的信鸽
所以瓜瓜和皮皮想了一个更好的方法,当瓜瓜想给皮皮发送消息时,他会这么做:
- 瓜瓜啥都没干,把信鸽发给了皮皮
- 皮皮在信鸽上绑了一个有锁的打开的盒子又发给了瓜瓜,但是把锁的钥匙留下了
- 瓜瓜把写了消息的纸条放进了盒子,并且锁上了盒子,把盒子送给了皮皮
- 皮皮收到了盒子,用钥匙打开了盒子并读到了瓜瓜发的消息
这样的话,小银子就不能通过拦截信鸽来修改纸条上的内容了,因为他没有钥匙。当皮皮想给瓜瓜发送消息的时候,用同样的方式就可以了。
瓜瓜和皮皮刚刚用了通常所说的非对称加密,之所以称作非对称的,是因为即使你可以加密消息(锁上盒子),你也不能解密他(打开一个关闭的盒子)。
在技术上,那个盒子被称为公钥(public key),打开盒子的钥匙称为密钥(private key)。
我该如何相信这个盒子
如果你仔细看,你会发现我们还是有一个问题。当瓜瓜收到那个打开的盒子的时候,他怎么确定盒子是皮皮发来的而不是小银子逮到信鸽换了个她有钥匙的盒子呢?
皮皮决定他把盒子发给瓜瓜的时候,他会在上面签上他的大名,这样当瓜瓜收到盒子的时候,检查签名就知道是皮皮发来的盒子。
这样的话你就会想,皮皮该怎么认出瓜瓜的签名呢?好问题,瓜瓜和皮皮也有同样的问题,所以他们决定,不让皮皮自己签了,找其他人去签,这个人就是铁锤。
铁锤是谁?铁锤是一个远近闻名,人人都信赖的人。铁锤给每个人都签名,大家都相信铁锤的签名,铁锤只会给合法的人签名。
如果他确定要求签名的人是皮皮,铁锤将签署一个皮皮的盒子。这样一来,小银子即使拿到皮皮的盒子并把盒子换成小银子的,当瓜瓜看到盒子的签名时就知道这个盒子不对劲,因为铁锤只会在验证身份后给人们签名。显然小银子是得不到铁锤的签名的。
在技术术语中,铁锤通常被称为证书颁发机构,你看这篇文章的浏览器已经打包了很多证书颁发机构的签名。
所以当你第一次打开网站的时候,你信任了他们的盒子,因为你信任铁锤,并且铁锤告诉你这个盒子是合法的。
盒子是很重的
瓜瓜和皮皮现在有了一个可靠的通信系统,但是他们发现带了盒子的信鸽比只携带纸条的信鸽慢。
他们决定使用盒子方法(非对称加密)来发送对称加密消息的的密钥(还记得凯撒密码吗?)
通过种方式,取其精华,去其糟粕。用非对称密码学的可靠性和对称密码学的效率来传输信息,稳了。
在现实世界中,可没有慢速的信鸽,但是使用非对称加密技术加密信息要比使用对称加密技术慢,因此我们只使用它来交换加密密钥。
现在,你应该知道HTTPS
如何工作了。