密码学是一门难以理解的学科,因为它充满了数学定力。但是除非你要实际开发出一套加密算法系统,否则你是没必要强制理解哪些深奥的数学定理的。
如果你月度本文的目的是享受涉及下一套HTTPS协议,那我只能抱歉的说本文的知识远远不够;如果不是的话,那么就煮杯咖啡,轻松愉悦的月度本文吧。
爱丽丝、鲍伯和......信鸽?
你在互联网上从事的任何活动(阅读这篇文章、在小猫小狗上购物、上传图片等)归结到底都是从某天服务器上发送和接受信息。
这个说起来可能有点抽象,不然让我们假设这些消息都是由信鸽来传递的。我知道这个假设有些太过随意,但相信我HTTPS就是这样工作的,尽管它的速度快的多。
我们先不谈服务器、客户端或者黑客攻击,先来聊一下爱丽丝、鲍伯和马洛里。如果这已不是你第一次接触密码学理论,你应该会认识这些名字,因为他们经常在各种密码学文献中被提及。
一个简单的通信方式
如果爱丽丝想给鲍伯发个消息,她会把消息绑在信鸽的腿上寄给鲍伯。然后鲍伯收到了消息,并阅读了它。这一切都是美好的。
但如果马洛里拦截了爱丽丝飞翔中的信鸽并且修改消息内容呢?鲍伯将无法知道爱丽丝发来的消息已经在传输过程中被修改了。
这就是HTTP的工作方式,很可怕吧?我们在日常的购物支付中绝不会愿意通过HTTP发送我的银行凭证。
隐蔽密码
那么如果爱丽丝和鲍伯都非常的机智。他们一致认同使用一种隐蔽的密码来书写他们的信息。他们会将信息中的每个字母按照字母表中的顺序前移三位。比如,D->A,B-->E,C-->F之类的规则破译信息的内容。加密后的信息“pbzobq jbppxdb”会被破解还原为“secret message”。
搞定!
这就是对称密钥加密,因为如果你知道如何加密一段信息那么你同样可以解密这段信息。
上述的密码通常被称为凯撒码。在现实生活中,我们会使用更为奇特和复杂的密码,但原理相同。
我们如何决定密钥?
如果除了发信者和收信者之外没有人知道使用的是什么密钥,对称密钥加密是非常安全的。在凯撒加密中,密钥就是每个字母变到加密字母需要移动多少位的偏移量。我之前的距离中,使用的偏移量是3,但是也可以用4或者8。
问题是如果爱丽丝和鲍伯在开始用信鸽传信之前没有碰过头,他们没有一个安全的方式来确立密钥。如果他们自己来在心中传递密钥,马洛里就会结果信息并发现密钥。这就使得马洛里可以在爱丽丝和鲍伯开始加密他们的信息之前或之后,阅读到他们信息的内容并按照她的意愿来篡改信息。
这是一个中间人攻击的典型例子,避免这个问题的唯一方法就是收发信的两方一起修改他们的编码系统。
通过信鸽传递盒子
所以爱丽丝和鲍伯就相处了一个更好的系统。当保暖哦想要给爱丽丝发送信息时,他会按照如下的步骤来进行:
- 鲍伯向爱丽丝送一个没有写到任何信息的鸽子。
- 爱丽丝给鲍伯送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。
- 鲍伯把信放进盒子中,把锁锁上然后把盒子送给爱丽丝。
- 爱丽丝收到盒子,用钥匙打开然后月度信息。
这样马洛里就不能通过截获鸽子来篡改信息了,因为她没有打开盒子的钥匙。当爱丽丝要给鲍伯发送消息的时候同样按照上述的流程。
爱丽丝和鲍伯所使用的流程通常被称为非对称密钥加密。之所以称之为非对称,是因为即使是你把信息编码(锁上盒子)也不能破译信息(打开锁住的盒子)。
在术语中,盒子被称为公钥,而用来打开盒子钥匙被称为私钥。
如何信任盒子
如果你稍加注意你就会发现还是存在问题。当鲍伯收到盒子时,他如何能确认这个盒子来时爱丽丝而不是马洛里截获了鸽子,然后换了一个她有钥匙能打开的盒子呢?
爱丽丝决定签名标记一下盒子,这样鲍伯收到盒子的时候就可以检查签名来确定是爱丽丝送出的盒子了。
那么你们之中的一些可能就会想了,鲍伯如何打一开始就能识别出爱丽丝的签名呢?这是个好问题。爱丽丝和鲍伯也确实有这个问题,所以他们决定让泰德代替爱丽丝来标记这个盒子。
那么谁是泰德呢?泰德很有名,是一个值得信任的家伙。他会给任何人签名并且所有人都信任他知会给合法的人签名标记盒子。
如果泰德可以确认索要签名的人是爱丽丝,他就会在爱丽丝的盒子上签名。因此马洛里就不可能搞到一个有着泰德代表爱丽丝签了名的盒子,因为鲍伯知道泰德知会给他确认过的人签名,从而识破马洛里的轨迹。
泰德的角色在术语中成为认证机构(CA)。而你月度此文时所用的浏览器打包存有许多认证机构的签名。
所以当你首次接入一个网站的时候,你可以信任来自这个站点的盒子,因为你信任泰德,而泰德会告你盒子是合法的。
沉重的盒子
现在爱丽丝和鲍伯有了一个可靠的系统来进行交流,然他们也意识到让鸽子携带盒子比原本只携带信件要慢一些。
因此他们决定只有在传递用对称加密来给信息编码(凯撒加密法)的密钥时,使用传递盒子的方法(非对称加密)。
这样就可以二者的有点兼具了,非对称加密的可靠性和对称加密的高效性。
现实世界中我们不会用信鸽这样慢的送信手段,但用非对称加密来编码信息仍要鳗鱼使用对称加密技术,所以我们只有在交换编码密钥的时候会使用非对称加密技术。
现在你已经了解了HTTPS是如何工作的了,你的咖啡也应该准备熬了,好好享用吧,你受之无愧。