密码学是一门深奥难懂的学科,它充满了数学证明;但除非是正在开发密码系统,否则不必了解太多深层次的知识
如果你打开这篇文章是希望创造下一代 HTTPS 协议,那么很抱歉,只有“鸽子”是远远不够的;如果你的目的不在于此,那么请欣赏这篇文章
爱丽丝、鲍勃和 ...... 鸽子?
在互联网上的任何活动(阅读这篇文章、在 Amazon 平台购买商品、上传猫咪图片)归根结底是同服务器发送或者接收消息
可能听起来有点抽象,所以让我们想象一下这些信息是由信鸽(carrier pigeons)传递的,我知道这个比喻看起来很随意,但相信我,HTTPS 的工作方式是一样的,尽管要快得多
此外,后面会使用爱丽丝、鲍勃、马洛里来代替服务器、用户和黑客;如果这不是你第一次尝试理解密码概念,你会认出这些名字,因为它们在相关技术文献中被广泛使用
第一次幼稚的交流
如果爱丽丝想要发送一条消息给鲍勃,她将这条消息绑在信鸽的腿上让它飞向鲍勃;鲍勃收到了消息,看了看觉得非常好
但是如果马洛里拦截了爱丽丝正在飞行的信鸽随后替换了消息呢?鲍勃无法知道消息在运输的过程中被篡改了
这就是 HTTP 的工作原理,很可怕对吧,我不会通过 HTTP 发送我的银行凭证,你也不会
加密
如果爱丽丝和鲍勃很狡猾,他们互相定义了一套加密规则来书写消息,例如将字母表中的每一个字母都位移 3 位来表示
举个例子:D -> A,E -> B,F -> C,原本的消息 “secret message” 将会被替换成 “pbzobq jbppxdb”
现在如果马洛里拦截了信鸽,她将无法将信息转换为有意义的内容,也无法理解它的意思,因为她不知道加密方式(secret code);但是鲍勃可以轻易地将消息反向解码,根据 A -> D,B -> E,C -> F 的规则,将 “pbzobq jbppxdb” 解码回 “secret message”
成功了!
这就被称为对称加密(symmetric key cryptography),因为如果知道了如何解码,就知道了如何加密
上面描述的密码通常被称为凯撒密码(Caesar cipher);在现实生活中,我们通常使用更为复杂的方式,但主要思想是一样的
我们如何确定密钥?
如果除了发送者和接收者之外没有人知道使用了什么密钥,对称加密是非常安全的;在凯撒密码中,密钥是我们将每个字母移动多少个字母的偏移量;在上述示例中,使用了偏移量 3,也可以使用 4 或 12 等等
这个例子的问题是,如果爱丽丝和鲍勃在开始用鸽子发送消息之前没有见面,他们将无法安全地建立密钥;如果他们将密钥随消息一起发送,那么马洛里就会拦截并发现密钥,这将会导致马洛里在爱丽丝和鲍勃在给消息加密之后依然可以随意获取、篡改消息
这就是中间人攻击(Man in the Middle Attack)的典型示例,避免这种攻击的唯一方法是一起更改加密系统
信鸽携带的盒子
所以爱丽丝和鲍勃想出了一个更好的方案,当鲍勃想要向爱丽丝发送消息时,将遵循以下步骤:
- 鲍勃给爱丽丝发送一只鸽子,身上不携带任何信息
- 爱丽丝让这只鸽子携带一个盒子,盒子有锁而且是打开状态,钥匙在爱丽丝这里,将鸽子返还给鲍勃
- 鲍勃将消息放入盒子,锁上锁,并再次将鸽子发给爱丽丝
- 爱丽丝获取到盒子,使用自己的钥匙打开盒子后阅读盒子内的消息
这种方式马洛里在拦截到信鸽后也无法修改内容,因为他并没有盒子的钥匙;当爱丽丝希望给鲍勃发送消息时,遵循同样的流程
爱丽丝和鲍勃就是使用了通常称为非对称加密(asymmetric key cryptography)的技术,之所以称为不对称(asymmetric),是因为即使可以对消息进行加密(锁上盒子),也无法解密消息(打开盒子)
在技术术语中,盒子被称为公钥(public key),盒子外锁的钥匙称为私钥(private key)
如何相信这个盒子?
如果理解了上述内容,会发现依然存在一个问题;当鲍勃接收到盒子时,如何确定这个盒子发送于爱丽丝而不是马洛里拦截了鸽子,将盒子换成了她持有钥匙的盒子呢?
爱丽丝决定在盒子上签名,这样当鲍勃收到盒子时,他检查签名就可以知道这是不是爱丽丝发送的盒子
可能会有人这样想,鲍勃一开始是如何识别爱丽丝的签名的?爱丽丝和鲍勃面临同样的问题,所以他们决定,让泰德来代替爱丽丝来进行签名
谁是泰特?泰德是一个非常有名、知名且值得信赖的人,泰德给任何个人签名,每个人都相信他只会给合法的人签名
接下来,泰德只有在确定要求签名的人是爱丽丝的情况下才会在爱丽丝盒子上签名;因此马洛里让泰德在自己的盒子上签上爱丽丝的名字,所以会被鲍勃发现这是一个骗局
在技术术语中,泰德通常被称为认证机构(Certification Authority),您阅读本文时使用的浏览器附带了各种认证机构的签名
所以当我们第一次连接网络并且相信盒子,是因为我们相信泰德,并且泰德告诉我们这个盒子是合法的
沉重的盒子
爱丽丝和鲍勃现在有了一个可靠的通信系统,但他们意识到携带盒子的鸽子比只携带信息的鸽子飞行的要慢,因为盒子有一定重量
所以他们决定,将使用盒子(非对称加密)来加密密钥,而使用对称密码对消息进行加密(还记得凯撒密码吗?)
这样就可以两全其美:兼顾非对称密码的可靠性和对称密码的效率
在现实世界中,没有飞行缓慢的鸽子,但使用非对称加密消息比使用对称加密更慢,因此我们只使用非对称加密来交换加密密钥