用信鸽来解释 HTTPS
文件来源
在这个基础之上做了一些修改。
人物介绍
- 韩梅梅和李雷: 普通沟通者
- 汤姆 : 潜在的威胁者
- 泰德 : 权威人士
信息的传递
你在互联网上从事的任何活动(聊天,浏览网站,打联网游戏)归结到底都是从某台服务器上发送和接收信息。
不如让我们假设这些消息都是由信鸽来传递的。
我知道这个假设有些太过随意,但相信我 HTTPS 就是这样工作的,尽管它的速度快的多。
初级交流
如果韩梅梅想要给李雷发送一段信息,她会把信息绑在信鸽的腿上然后送往李雷那里。李雷收到了信息,并阅读了信息,非常完美。
但如果汤姆拦截了韩梅梅的鸽子并且篡改了信息呢?李雷就没有办法去知道韩梅梅发出的信息在传递过程中遭到了修改。
这就是 HTTP 如何运作的。看起来很可怕对吧?我是不会通过 HTTP 来发送一些重要的信息,并且你也不应如此。
隐蔽的密码
那么如果韩梅梅和李雷都非常的机智。他们一致认同使用一种隐蔽的密码来书写他们的信息。他们会将信息中的每个字母按照字母表中的顺序前移三位。比如,D→A,E→B,F→C。如此一来,原文为 “secret message” 的信息就变成了 “pbzobq jbppxdb”
那现在如果汤姆再截获了信鸽,他既不能做出有意义的修改同时也不会知道信息的内容,因为他不知道隐蔽的密码到底是什么。然而李雷却可以很容易反转密码,依靠 A → D, B → E, C → F 之类的规则破译信息的内容。加密后的信息 “pbzobq jbppxdb” 会被破解还原为 “secret message” 。
这就是对称密匙加密
,因为如果你知道如何加密一段信息那么你同样可以解密这段信息。
上述的密码通常被称为凯撒码。在现实生活中,我们会使用更为奇特和复杂的密码,但原理相同。
我们如何决定密匙?
如果除了发信者和收信者之外没有人知道使用的是什么密匙,对称密匙加密是非常安全的。在凯撒加密中,密匙就是每个字母变到加密字母需要移动多少位的偏移量。我之前的距离中,使用的偏移量是 3 ,但是也可以用 4 或者 12 。
问题是如果韩梅梅和李雷在开始用信鸽传信之前没有碰过头,他们没有一个安全的方式来确立密匙。如果他们自己来在信中传递密匙,汤姆就会截获信息并发现密匙。这就使得汤姆可以在韩梅梅和李雷开始加密他们的信息之前或之后,阅读到他们信息的内容并按照她的意愿来篡改信息。
这是一个中间人攻击
的典型例子,避免这个问题的唯一方法就是收发信的两方一起修改他们的编码系统。
通过信鸽传递盒子
所以韩梅梅和李雷就想出了一个更好的系统。当李雷想要给韩梅梅发送信息时,他会按照如下的步骤来进行:
- 李雷向韩梅梅送一只没有携带任何信息的鸽子。
- 韩梅梅给李雷送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,韩梅梅保管着锁的钥匙。
- 李雷把信放进盒子中,把锁锁上然后把盒子送给韩梅梅。
- 韩梅梅收到盒子,用钥匙打开然后阅读信息。
这样汤姆就不能通过截获鸽子来篡改信息了,因为她没有打开盒子的钥匙。当韩梅梅要给李雷发送消息的时候同样按照上述的流程。
韩梅梅和李雷所使用的流程通常被称为非对称密钥加密
。之所以称之为非对称,是因为即使是你把信息编码(锁上盒子)也不能破译信息(打开锁住的盒子)。
在术语中,盒子被称为公匙
而用来打开盒子的钥匙被称为私匙
。
如何信任盒子
如果你稍加注意你就会发现还是存在问题。当李雷收到盒子时他如何能确定这个盒子来自韩梅梅而不是汤姆截获了鸽子然后换了一个她有钥匙能打开的盒子呢?
韩梅梅决定签名标记一下盒子,这样李雷收到盒子的时候就可以检查签名来确定是韩梅梅送出的盒子了。
那么你们之中的一些人可能就会想了,李雷如何打一开始就能识别出韩梅梅的签名呢?这是个好问题。韩梅梅和李雷也确实有这个问题,所以他们决定让泰德代替韩梅梅来标记这个盒子。
那么谁是泰德呢?泰德很有名的,是一个值得信任的家伙。他会给任何人签名并且所有人都信任他只会给合法的人签名标记盒子。
如果泰德可以确认索要签名的人是韩梅梅,他就会在韩梅梅的盒子上签名。因此汤姆就不可能搞到一个有着泰德代表韩梅梅签了名的盒子,因为李雷知道泰德只会给他确认过的人签名,从而识破汤姆的诡计。
泰德的角色在术语中被称为认证机构
。而你阅读此文时所用的浏览器打包存有许多认证机构的签名。
所以当你首次接入一个网站的时候你可以信任来自这个站点的盒子因为你信任泰德而泰德会告诉你盒子是合法的。
沉重的盒子
现在韩梅梅和李雷有了一个可靠的系统来进行交流,然他们也意识到让鸽子携带盒子比原本只携带信件要慢一些。
因此他们决定只有在选择用对称加密来给信息编码(还记得凯撒加密法吧?)的密匙时,使用传递盒子的方法(非对称加密)。
这样就可以二者的优点兼具了,非对称加密的可靠性和对称加密的高效性。
现实世界中我们不会用信鸽这样慢的送信手段,但用非对称加密来编码信息仍要慢于使用对称加密技术,所以我们只有在交换编码密匙的时候会使用非对称加密技术。