用信鸽来讲解HTTPS的知识
加密是一个很难理解的东西,这里头满是数学证明。不过,除非你是在开发一个加密系统,否则无需了解那些高阶的复杂知识。
如果你看这篇文章是为了创造下一个 HTTPS 协议,很抱歉,请出门左走,鸽子是远远不够的。不然的话,先去煮一壶咖啡,再来看文章吧~
爱丽丝、鲍勃以及鸽子?
你在网络上进行的任何活动(阅读这篇文章、在京东上购物、分享猫咪的照片),都是通过服务器发送和接收信息。
这可能有点抽象。那就让我们设想这些信息都是通过信鸽传播的。看起来可能有点奇怪,不过请相信我,HTTPS 的工作原理和信鸽是一样的,只是要快得多。
同样,我们用爱丽丝、鲍勃以及马洛里来代称服务器、客户机以及黑客。如果之前你尝试过理解加密系统的原理,那这些名字你不会感到陌生,因为他们在技术文献中经常出现。
第一次简单的通信
如果爱丽丝想要和鲍勃通信,她会将信件绑在信鸽的腿上,然后信鸽带着爱丽丝的信飞到鲍勃那里去。鲍勃收到信后,知道了爱丽丝对她的爱意。到目前为止,一切看起来都还不错。
但要是马洛里在途中拦截下正在飞行的鸽子,然后将信件内容篡改了呢?鲍勃不会知道爱丽丝写来的这封信在途中是被篡改过的。
这就是 HTTP 的工作方式。很恐怖吧?所以,我不会通过 HTTP 发送我的银行卡信息,你也不应该这样做。
加密
假设爱丽丝和鲍勃非常的狡猾,他们约定好以一种密文的形式写信。他们将每个字母在字母表上移动三个位置,例如:D —> A,E —> B,F —> C。而诸如 “secret message” 这样的句子,就会变成 “pbzobq jbppxdb”。
如果马洛里再次拦截下鸽子,并试图篡改信件内容。他会无从下手,因为她不知道密文的规则,即便改了也会毫无意义,令人不知所云。但是鲍勃会根据密文的规则轻松的解读出信件的内容,也就是 A —> D,B —> E,C — > F。加密的句子 “pbzobq jbppxdb” 会被解密成 “secret message”。
酷毙了!
这就是对称加密(symmetric key cryptography),因为你知道了如何加密也就知道了如何解密。
上面举例的加密方法就是非常有名的凯撒密码(Caesar cipher)。在现实生活中,我们使用的是更加酷更加复杂的加密方法,但主要的原理都是一样的。
如何确定加密规则?
除了发送者和接受者,没有其他人知道加密规则,在这种情况下,对称加密是非常安全的。在凯撒密码中,加密的关键在于每个字母移动的偏移量。在我们的例子里,偏移量设定为3,但也可以是4或者12。
问题在于,如果爱丽丝和鲍勃在用鸽子通信之前从未谋面,他们就没有安全的办法来制定加密规则。如果他们把加密规则写在信里通过鸽子传递,马洛里就可以拦截鸽子从而窃取加密规则。之后,每次爱丽丝和鲍勃通的信,马洛里都可以拦截下并且通过他们的加密规则去破解和修改。
这就是典型的中间人攻击,避免它的唯一办法就是同时更改加密系统。
携带盒子的信鸽
因此,爱丽丝和鲍勃制定了一个更加安全的加密系统。当鲍勃要发送信息给爱丽丝时,他会进行如下步骤:
- 鲍勃给爱丽丝寄去一只鸽子,鸽子没有携带任何信件。
- 爱丽丝在鸽子腿上绑了一个带锁但是没有上锁的盒子,钥匙保存在自己手里,然后将鸽子寄回给鲍勃。
- 鲍勃把信件放在盒子里,上锁。鸽子又飞回到爱丽丝那里。
- 爱丽丝收到鸽子后,用手中的钥匙打开盒子,然后表情愉悦的看鲍勃写给她的情书。
这样一来,马洛里因为没有盒子的钥匙,即便拦截下鸽子也无法修改信件内容。当爱丽丝要给鲍勃写信时,遵循的也是以上这些步骤。
爱丽丝和鲍勃使用的这种新的加密方式通常叫做非对称加密(asymmetric key cryptograpy)。为啥叫做非对称呢?因为即便你知道如何加密(给盒子上锁),你也没有办法解密(打开盒子的锁)。在技术上,这个盒子就是公钥(public key),而打开盒子的钥匙叫做私钥(private key)。
为啥要相信这个盒子?
如果你看的很认真,那么可能会注意到一个问题。当鲍勃收到没有上锁的盒子,他怎么确定这个盒子没有被马洛里调包呢?
爱丽丝决定给盒子签名,当鲍勃收到盒子后检查上面的签名就可以知道盒子是不是爱丽丝发过来的那个。
有些人可能会想,鲍勃如何第一时间识别出爱丽丝的签名呢?好问题!爱丽丝和鲍勃也想到了这个麻烦,所以他们决定,让特德在盒子上签名,爱丽丝不用签了。
特德是何方神圣?特德是一个众所周知并且相当值得信赖的家伙。特德可以在任意盒子上签名,大家都很信任特德,因为他只给那些合法的朋友所持有的盒子签名。
特德会给爱丽丝的盒子签名,是因为他确定这个请求签名的人是真的爱丽丝。所以,马洛里无法把自己的盒子伪装成是爱丽丝的盒子,因为鲍勃会知道这个是假的,上面没有特德的签名。
在技术上,特德指的是证书颁发机构。你用来看这篇文章的浏览器里就附带了来自于各个证书颁发机构的签名。
所以,当你第一次访问某个网站,之所以信任他的盒子,是因为信任特德,特德告诉你盒子是合法的。
盒子很重啊
现在,爱丽丝和鲍勃终于有了一个安全可靠的系统去进行通信。但同时,他们也意识到携带盒子的鸽子比只携带信息的鸽子飞行起来要慢好多。
他们决定只在发送和接收关于制定加密规则(还记得凯撒密码吗?)的信息的时候使用盒子加密(非对称加密)。
通过这种方式,他们既得到了非对称加密的可靠性,又兼顾了对称加密的高效率。双赢!
在现实世界,不存在慢鸽子。尽管如此,通过非对称加密方式加密信息依然比用对称加密方式要慢,所以我们只用这种加密方式来交换密钥。
好啦,你的咖啡应该煮好了, HTTPS 是如何工作的你也知道了。去喝吧,你值得来一杯。
翻译自 HTTPS explained with carrier pigeons
用信鸽来讲解HTTPS的知识的更多相关文章
- HTTPS协议详解(一):HTTPS基础知识
HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息. ...
- HTTPS加密协议详解(一):HTTPS基础知识
转自:https://blog.csdn.net/hherima/article/details/52469267------------------------------专栏导航:-------- ...
- 【转】用信鸽来解释 HTTPS
一.引文出处 注:分享交流技术.本文摘自开源中国翻译,翻译者:JonnHuang,句号句号 译文原网址:https://www.oschina.net/translate/https-explaine ...
- 用信鸽来解释 HTTPS
原文:http://blog.jobbole.com/113883/ ----------------------------------------------------------------- ...
- HTTPS相关知识以及在golang中的应用
最近简单学习了HTTPS,并在golang中实践了一下,现在把学到的知识记录下来,方便以后查看,如果有幸能帮到有需要的人就更好了,如果有错误欢迎留言指出. 一些简单的概念,可以自行百度百科 HTTPS ...
- https相关知识总结
从园子里看到很多讲解不错的文章,将链接放到这里,备忘 浅析数字证书:https://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html
- HTTPS证书知识扫盲
1. 前言 现在搞网站域名不加个HTTPS就显得不专业,特别在使用JWT进行认证的接口一定要加HTTPS为你的接口增加一层安全屏障.今天就来聊聊配置HTTPS的关键SSL证书,也被称为CA证书. 2. ...
- ios 中使用https的知识
先看文章,这篇文章说的是使用AFNetworing进行https时的事项,十分好!http://blog.cnbang.net/tech/2416/ ios中使用https,主要就是使用NSURLCr ...
- [skill][https][ssl/tls] HTTPS相关知识汇总
结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA DHE / ECDHE PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...
随机推荐
- 【转】Linux下从TCP状态机,三次握手判断DDOS攻击
从TCP状态机判断DDOS攻击 一.TCP协议 TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态. 二. TCP握手和 ...
- Git如何永久删除文件(包括历史记录)
有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...
- 使用Swoole 构建API接口服务
网上类似的文章已经很多了,我也是刚入门.从头开始学习.所以如果重复写文章阐释,反而会浪费时间,于是就自己动手构建了一个demo,使用swoole 的TCP 服务器接受TCP客户端的发来的http请求, ...
- Resharper安装使用手册
今天在博客园上看到一位大牛写了一遍关于.NET代码优化的文章,其中提到了Resharper这个工具,以前没使用过这个工具,突然想用这个工具来检查一下自己之前代码的规范程度,也是为了写出更规范的代码. ...
- 51nod 1636 教育改革
题目链接 令f[i][j][k]为第i天选择的课程为j,设置作业为a[j]+k时的最大作业量. 那么f[i][j][k]可以由哪些状态转移而来?先把课程按复杂度排序,那么可以转移来的课程是f[i-1] ...
- beta冲刺————第四天(4/5)
完善的具体内容: 前端:以下的功能还未完全实现 (1)点击收藏可以收藏入收藏夹 (2)分享操作,意见反馈 后端: 寻找文章来源,像数据库中增添了150篇的新文章.(我们的文章都要求自己内部人员看过,所 ...
- Beta阶段第二次冲刺
Beta阶段第二次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...
- 团队作业——Alpha冲刺2/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:主要学习JAVA语言,以及加入了Android开发内容的学习. 明日任务:安装Android Studio以及通过观看视频和阅读材料的形式 ...
- 错误 ORA-01102: cannot mount database in EXCLUSIVE mode 的处理方法
今天启动数据库时报错了! SQL> startup mount ORACLE instance started. Total System Global Area 608174080 byte ...
- js 对于jquery each 多层循环的问题和原生js多层循环问题
一.在jquery中,我们使用循环的时候,提供两种方式:jquery.each 和(循环体).each 两种方式不是同. 对于return 在作用这两个的函数的时候需要注意: 首先我们需要知道我们的 ...