本文其实总体算是一篇译文,原作在此HTTPS explained with carrier pigeons, 看完不禁感叹作者的思路清奇,于是跟风把原文重新“诠释”一下 …

你在 Internet 上的所有活动,其实都可以归类为 往服务器发送数据 以及 从服务器接受数据,也就是你与服务器的通信。原文作者对这个行为给了一个神奇的比喻:有一只信鸽在你与服务器之前传送消息。

同理,我们也把网络活动中的其他基本元素拟人化,这样这个故事才会完美 …

LiLei 跟 HanMeimei 通信,情敌 Jim Green 是个 hacker, 当然,信使自然就是 Polly 了。

接下来,请开始你的表演 …

情窦初开

李雷想告诉韩梅梅:“I LOVE U”,于是李雷写好情书,绑在 Polly 的腿上,让 Polly 去韩梅梅家,韩梅梅拿到情书,呵呵一笑,哦不,娇羞一笑,OK,一次信息传递成功。

有人使坏

然而,喜欢韩梅梅的不止李雷,还有 Jim Green,他半路截取了 Polly,看到“ I LOVE U”,顿生醋意,愤而把消息改成 “F**K OFF” … 当韩梅梅收到信时,爱情的萌芽必然就被扼杀了,因为韩梅梅并不知道李雷发来的消息被半路拦截并篡改了。

加密消息

上次的事情后,李雷花了用了 1024 天向韩梅梅解释,最终让韩梅梅相信是有人在背后捣鬼,于是,他俩这次学乖了,决定把消息加密,俩人约定好,发送时把消息中的字母都向字母表后移 1 位,也就是发送 “J MPWF V”,这时就算 Jim Green 把 Polly 截了也不知道他们的消息是什么意思,只有韩梅梅知道消息解码的规则,她将每个字母对应字母表前移一位就知道原始消息是“ I LOVE U”,掩面娇羞…

插播科普上面这种加密消息的方式就是对称加密,你知道如何加密,也知道如何解码。然后李雷跟韩梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凯撒加密。现实世界中用的加密算法会更复杂,但是基本原理相同。

假如他们之前没见过

对称加密在只有发送和接收方知道加密算法和密钥的时候,是安全的。但是问题是,如果李雷和韩梅梅在通信之前都没见过,那他们就没法约定加密算法和密钥了。

旁白:那可以先通信一次把通信方式和密码发过去,然后再发消息呗?

然而,Jim Green 又不是傻,看见 Polly 第一次飞过去,拦下来,哦,原来你们要用凯撒加密,密钥是 1 … 上面说了,加密方式只有发送方和接受者知道时是安全的,现在第三个人知道了,不安全了。

他们的通信需要更安全的加密系统 …

PS:在现实中,如果使用对称加密,客户端和服务端都需要保存大量的加密算法和对应的密钥,管理成本巨大且容易泄漏。

让 Polly 抱个密码箱

李雷和韩梅梅想出来了一个复杂的通信流程:

李雷先让 Polly 不带情书飞到韩梅梅家;

韩梅梅在 Polly 身上绑一个开着的密码箱,密码只有韩梅梅知道,然后让 Polly 飞回去;

李雷在 Polly 回来的时候,把情书放进去,把密码箱锁起来,让 Polly 再飞到韩梅梅家;

韩梅梅拿到密码箱,打开,拿到情书,掩面娇羞;


Polly 内心旁白,MMP,你们谈个恋爱累死老子了 …

就通过这样的流程,他们安全的谈情说爱,Jim Green 无计可施 …

插播科普上面这种加密方式是非对称加密,非对称的含义相对于对称来说,就是你即使知道怎么加密的的方式,也不知道怎么解密,对应上面的流程就是李雷锁的密码箱却没办法打开。

术语来讲的话,就是我们熟知的公钥和私钥,服务端将公钥(密码箱)发送给客户端,客户端使用公钥加密信息(锁箱子),服务端接受消息后使用私钥(仅韩梅梅知道的密码)解密。

密码箱安全吗

然而问题还没有结束 …

李雷拿到开着的密码箱,如何确定这个密码箱就是韩梅梅让 Polly 带过来的?Jim Green 能截消息,也能截密码箱然后换成自己知道知道密码的密码箱呀,这样的话,通信同样不安全(即公钥来源的安全性)。

李雷必须要知道箱子是不是韩梅梅的,于是韩梅梅想到一个办法,她在密码箱上签上自己的名字,当李雷拿到盒子的时候,就可以看签名是不是韩梅梅的从而决定是否安全。

然而,还又同样的问题,Jim Green 同样也能伪造签名呀 …

恶魔李雷:妈蛋的,这恋爱老子不谈了!

天使李雷:山无棱天地合乃敢与君绝

天使战胜了恶魔,故事继续 …

公信

我们需要一个有公信力的人 --郑叔-- 来代替签名,他是大家公认的好人,只会给认证过的合法的人签名,签名的密码箱的来源都确实就是需要签名的本人。

这样,Jim Green 就不能换箱子和伪造签名了,一旦没有郑叔的认证,李雷就可以断定这不是韩梅梅的箱子,不安全。

同样,术语上,郑叔(证书)就是 Certification Authority,认证机构,有权利颁发证书(签名)。

在这个关系链中,信任CA是基础,因为,其实也会有 CA 告诉你他自己是安全的,他会给自己颁发证书。对应例子中,就是如果 Jim Green 也是个有公信力的人然后给自己签名那就没得玩了,但是我们“相信” CA 都不会做这样的坏事,所以 Jim Green 不会是 CA.

Polly 好累

对比最初的消息,我们为了安全,本来只用送一封信,却加了一个密码箱和一个签名,运输成本重多了,Polly 累了,不开心了 …

于是,他们决定,消息体还是以凯撒加密的方式传输,然后偏移步长用郑叔签名的保险箱发送,这样就可以平衡消息的安全性和传输的成本问题。

术语解释就是非对称加密会影响传输速度,因为消息体变大了,所以通常综合性能和安全性考虑,会用对称加密消息体,非对称加密用来编码对称加密的密钥。

结语

故事中通信的过程其实就是原始的 HTTP 到 HTTPS 的演进过程,当然隐藏了真实通信的很多细节,比如三次握手 … 但是大体上描述了原理和部分细节。

去探索更多关于 HTTPS 的原理 & 申请证书改造你的网站吧 …

https信鸽李雷韩梅梅相关推荐

  1. 今日可抢回程火车票,实测两款GitHub开源抢票插件,所有坑我们都帮你踩过了...

    晓查 郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今天,已经可以抢过完年回来的火车票了. 如果你对自己手速和市面上的各种"加速包"都没什么信心的话,不妨试试用程序 ...

  2. MySQL自定义排序函数FIELD()

    转载自:https://blog.csdn.net/lxz3000/article/details/6173873 MySQL可以通过field()函数自定义排序 格式: field(value,st ...

  3. pandas 玩转 Excel 操作总结

    Python 操作Excel操作总结,包括Series和Data Frame的互转.使用pandas读取Excel表格.python读取多个数据表.python合并多个工作表以及写入Excel文件 p ...

  4. 我们为什么要使用 Markdown

    本文转自:https://kchen.cc/2015/10/05/Markdown-Manual/ Markdown 是一种正在流行起来的「标记语言」,通常为程序员群体所用.但现在,不光是程序员,对于 ...

  5. 【转】我们为什么要使用 Markdown

    [转]我们为什么要使用 Markdown 目录 从前码字时我们面临着什么困境 标记语言显神威 到底什么是 Markdown 所以为什么我们要使用 Markdown Markdown 简明语法 段落和换 ...

  6. python抢票软件哪个好_买票回家难?软件加速包也无用?看我用python轻松抢票回家!...

    如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会 ...

  7. php抢票插件下载,实测两款 GitHub 开源抢票插件,所有坑我们都帮你踩过了

    优质文章,第一时间送达! 转自量子位,作者晓查,郭一璞 今天,已经可以抢过完年回来的火车票了. 如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段 ...

  8. github python抢票_实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了

    如果你对自己手速和市面上的各种 "加速包" 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,12306 官方宣布屏蔽了一大批付费抢票软件,这也意味着你即使给这些软件付了会员费 ...

  9. 还没抢到票吗?实测两款 GitHub 开源抢票插件,所有坑我们都帮你踩过了

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 晓查 郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今天,已经可以抢过完年回来的火车票了. 如果你对自己手速和市面上的各种& ...

最新文章

  1. 那些离开大厂,回归学术界的科学家们!
  2. 全球及中国矿棉板行业运营能力状况与十四五规模预测报告2022年
  3. 以文件形式导入大批量数据
  4. round四舍五入详解--python2与python3版本间区别
  5. STM32串口的使用(原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯)
  6. 在SD/MMC卡中可读写的FAT文件系统
  7. 2020年豪华车市场洞察
  8. org.apache.http.NoHttpResponseException
  9. A股开盘:深证区块链50指数涨0.91%,美邦服饰涨停
  10. Ext3 -- Form 实例。 用来migrate file 数据到DB用的
  11. 利用划分树求解整数区间内第K大的值
  12. 宜家邮件系统正遭网络攻击
  13. 手机usb计算机无法连接,手机用USB无法连接电脑怎么办
  14. 07-struts2提供的数据校验
  15. python开源代码app_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)
  16. bootstrap设计登录页面_微服务和VUE(2) 搭建前端登录界面
  17. 终于解决华硕电脑触摸板的关闭问题
  18. catia 桥接曲面圆角_CATIA建模教程_二_圆角及桥接在空间曲线中的应用
  19. 谷歌浏览器插件打包“文件清单缺失”与安装“文件损害”错误解决
  20. Dragdealer拖动组件

热门文章

  1. 智慧停车(十二) 开始招商引资
  2. 【EasyX】实时时钟
  3. SQL手工注入原理万能密码及默认密码登陆后台
  4. java计算机毕业设计web企业人事管理信息系统MyBatis+系统+LW文档+源码+调试部署
  5. JS事件冒泡机制以及委托方法,以及vue中的stop
  6. 创业初期,单身vs已婚
  7. 自己动手制作植物大战僵尸简单修改器(3)
  8. Python学习笔记 Matplotlib.colors.Normalize用法及代碼示例
  9. 解决sqlserver2005数据库sa登录问题
  10. Spring框架新手快速上手系列:(二)体验一把自己配置低级容器