飞鸽传书来解释 HTTPS 机制

news/2025/2/2 1:56:56/

转自公众号《码农每日一题》  
密码学是一门难以理解的学科,因为它充满了数学定理。但是除非你要实际开发出一套加密算法系统,否则你是没必要强制理解那些深奥的数学定理的。如果你阅读本文的目的是想设计下一套 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是如何工作的了,你的咖啡也应该准备好了。好好享用吧你受之无愧。


http://www.ppmy.cn/news/495997.html

相关文章

用Linux 函数飞鸽传书写局域网环境要求

在局域网环境中使用Linux函数飞鸽传书需要满足以下要求: 确保Linux系统已经正确安装并且配置了网络连接,例如设置了正确的IP地址、子网掩码、网关和DNS服务器等。 在局域网中,所有需要通信的设备(包括发送和接收消息的计算机)必须在同一个局域…

linux实训项目——飞鸽(一)

目前完成UDP广播上线、用户间对话功能。 目录 目录 前言 一、基础知识 二、“飞鸽”运行流程 1.用户运行程序后先设置用户名,即上线后别人看到的名字。 2.上线后进行UDP广播,同时可以接收到在线用户的反馈,将反馈写入用户链表中。 3.上…

飞鸽传书项目文档

#飞鸽传书聊天平台项目 ####通过使用飞鸽传书聊天平台,熟悉其运行方式,通过代码模拟实现其各种功能 ##需要实现功能的结构框图 ##项目中所用到的结构体 ####控制终端的设计 ####创建线程,每5秒发送一个1025在线包,向好友表示自己…

linux飞鸽传书项目实训,Linux_信使(iptux):Linux下的飞鸽传书,不知你是否使用过“飞鸽传书 - phpStudy...

信使(iptux):Linux下的飞鸽传书 不知你是否使用过“飞鸽传书”这款Windows软件? “哇,对着Linux用户问这个问题,不是很无聊吗?” 嗯~今天要介绍的是这款通吃Linux/Windows的信使软件:iptux。从此…

linux 手机 飞鸽,在Linux下使用ipmsg(飞鸽传书)

命令行的ipmsg设计如下: ./ipmsg (ipmsg)list ---------|----------------|---------------|---------------|---------------|----- 序号 |用户名 |工作组 |主机名 |优先级 |IP ---------|----------------|------------…

Linux飞鸽传书源码,图解Ubuntu下编译安装飞鸽传书IPMsg步骤

因为IPMsg官方网站发布的Unix/Linux版本都是源代码包,需要在Ubuntu中编译,因此,需要在本机安装开发环境。 我下载的g2ipmsg-0.9.5.tar,下载地址见http://www.linuxidc.com/Linux/2008-03/11428.htm,下载后先解压得到g2ipmsg-0.9.5…

飞鸽传书linux运行,Linux下如何安装IPtux飞鸽传书

习惯了在Windows系统中使用飞鸽传书的童鞋们,对于突然在使用Linux时在局域网下传输文件、即时通讯等,可能突然感觉束手无策。 下面就针对Linux下安装iptux(飞鸽传书)进行安装和使用的说明。 1、安装iptux及依赖文件。 命令:sudo apt-get inst…

飞鸽传书 linux安装,在Ubuntu 8.04下完美安装飞鸽传书

安装环境:Ubuntu 8.04 首先到:http://www.ipmsg.org/index.html.en 下载for unix GNOME2的源文件 1.解压缩 tar xvf g2ipmsg-0.9.5.tar.gz 2.安装所需要的支持包 sudo apt-get install libxml-parser-perl libgnomeui-dev libpanel-applet2-dev gettext build-essen…