原创 转载:用信鸽来解释HTTP

2019-6-25 17:35 2435 29 8 分类: 软件与OS 文集: 网络

密码学是一门难以理解的学科,因为它充满了数学定理。但是除非你要实际开发出一套加密算法系统,否则你是没必要强制理解那些深奥的数学定理的。


如果你阅读本文的目的是想设计下一套 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 。


问题是如果爱丽丝和鲍勃在开始用信鸽传信之前没有碰过头,他们没有一个安全的方式来确立密匙。如果他们自己来在信中传递密匙,马洛里就会截获信息并发现密匙。这就使得马洛里可以在爱丽丝和鲍勃开始加密他们的信息之前或之后,阅读到他们信息的内容并按照她的意愿来篡改信息。


这是一个中间人攻击的典型例子,避免这个问题的唯一方法就是收发信的两方一起修改他们的编码系统。


通过信鸽传递盒子


所以爱丽丝和鲍勃就想出了一个更好的系统。当鲍勃想要给爱丽丝发送信息时,他会按照如下的步骤来进行:


  • 鲍勃向爱丽丝送一只没有携带任何信息的鸽子。

  • 爱丽丝给鲍勃送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。

  • 鲍勃把信放进盒子中,把锁锁上然后把盒子送给爱丽丝。

  • 爱丽丝收到盒子,用钥匙打开然后阅读信息。


这样马洛里就不能通过截获鸽子来篡改信息了,因为她没有打开盒子的钥匙。当爱丽丝要给鲍勃发送消息的时候同样按照上述的流程。


爱丽丝和鲍勃所使用的流程通常被称为非对称密钥加密。之所以称之为非对称,是因为即使是你把信息编码(锁上盒子)也不能破译信息(打开锁住的盒子)。


在术语中,盒子被称为公匙而用来打开盒子的钥匙被称为私匙。


如何信任盒子


如果你稍加注意你就会发现还是存在问题。当鲍勃收到盒子时他如何能确定这个盒子来自爱丽丝而不是马洛里截获了鸽子然后换了一个她有钥匙能打开的盒子呢?


爱丽丝决定签名标记一下盒子,这样鲍勃收到盒子的时候就可以检查签名来确定是爱丽丝送出的盒子了。


那么你们之中的一些人可能就会想了,鲍勃如何打一开始就能识别出爱丽丝的签名呢?这是个好问题。爱丽丝和鲍勃也确实有这个问题,所以他们决定让泰德代替爱丽丝来标记这个盒子。


那么谁是泰德呢?泰德很有名的,是一个值得信任的家伙。他会给任何人签名并且所有人都信任他只会给合法的人签名标记盒子。


如果泰德可以确认索要签名的人是爱丽丝,他就会在爱丽丝的盒子上签名。因此马洛里就不可能搞到一个有着泰德代表爱丽丝签了名的盒子,因为鲍勃知道泰德只会给他确认过的人签名,从而识破马洛里的诡计。


泰德的角色在术语中被称为认证机构。而你阅读此文时所用的浏览器打包存有许多认证机构的签名。


所以当你首次接入一个网站的时候你可以信任来自这个站点的盒子因为你信任泰德而泰德会告诉你盒子是合法的。


沉重的盒子


现在爱丽丝和鲍勃有了一个可靠的系统来进行交流,然他们也意识到让鸽子携带盒子比原本只携带信件要慢一些。


因此他们决定只有在选择用对称加密来给信息编码(还记得凯撒加密法吧?)的密匙时,使用传递盒子的方法(非对称加密)。


这样就可以二者的优点兼具了,非对称加密的可靠性和对称加密的高效性。


现实世界中我们不会用信鸽这样慢的送信手段,但用非对称加密来编码信息仍要慢于使用对称加密技术,所以我们只有在交换编码密匙的时候会使用非对称加密技术。


现在你已经了解了HTTPS是如何工作的了,你的咖啡也应该准备好了。好好享用吧你受之无愧。

文章评论2条评论)

登录后参与讨论

shizheng080_279249185 2019-7-4 09:41

非常不错

T.b.K 2019-6-27 09:16

看起来有趣,马克
相关推荐阅读
牛渔曦 2021-03-16 11:57
Verilog基础--亚稳态简介
在FPGA的系统中,如果数据传输不满足触发器的Tsu(建立时间)和Th(保持时间),或者复位过程中复位信号的释放不满足有效时钟沿的恢复时间(recovery time),就有可能产生亚稳态,此时触发器...
牛渔曦 2019-08-01 15:24
大小端的测试
在计算机系统中,存在大小端存储数据的问题,简言之,大端存储就是在高位地址存放低位数据,低位地址存放高位数据;小端存储就是在高位地址存放高位数据,在低位地址存放低位数据,测试代码如下:方法1:#incl...
牛渔曦 2019-07-04 14:51
高速电路设计/信号完整性的48个基本概念
本文转载自网络,版权归原作者,如果涉及侵权,请及时联系!1、信号完整性(Signal Integrity):就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收端,我们就称该...
牛渔曦 2019-07-04 14:49
理解阻抗匹配
本文转载自网络,版权归原作者,如果涉及侵权,请及时联系!阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式。阻抗匹配分为低频和高频两种情况讨论。  我们先从直流电压源驱动一...
牛渔曦 2019-07-04 14:36
C程序到底是怎样运行在硬件设备上?
本文转载自网络,版权归原作者,如果涉及侵权,请及时联系!C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻...
牛渔曦 2019-07-03 21:57
NCRE三级嵌入式-----嵌入式系统的组成和分类
1. 嵌入式系统逻辑组成嵌入式系统和通用计算机一样,也是由硬件和软件两部分组成。硬件的主体是中央处理器和存储器,他们通过I/O接口和输入/输出设备与外部世界联系,并借助总线相互连接,这些硬件...
我要评论
2
29
关闭 站长推荐上一条 /2 下一条