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

飞鸽传书来解释 HTTPS 机制相关推荐

  1. 飞鸽传书联系企业内部管理机制

    IM飞鸽能使企业内部管理机制联系起来,能从一个全新的视角看到IM飞鸽(飞鸽传书)软件对于企业用户的意义.同时IM飞鸽(飞鸽传书)软件的突出优势不是去追求差异化和个性化,而在于发挥局域网特有的效率优势, ...

  2. 技术面试的《飞鸽传书2007绿色版下载》

    刚刚读过Lazy Programmer的<飞鸽传书2007绿色版下载>.最近恰巧参加过某公司的技术面试,加之前一段时间曾经为本人之前所在的公司进行了若干轮的技术面试,颇有所感,因此附一篇, ...

  3. linux下基于ipmsg协议的飞鸽传书(一)

    运行机制介绍: 使用TCP/UDP端口(默认端口为2425),消息的收发使用UDP协议,文件(文件夹)的收发使用TCP协议.(文件传输部分待续....) 主函数:创建线程实现,聊天.用户上线.下线.文 ...

  4. 如何在CentOS6.2上安装并运行飞鸽传书

    一.下载飞鸽传书 飞鸽传书官网为:http://ipmsg.org/index.html.en 在上边的页面里找到: 点击下载GNOME2版本,并解压开 二.编译并且安装 用ROOT用户在解压后的目录 ...

  5. 飞鸽传书找不到其他人的问题

    如果你的飞鸽找不到其他人,或传送不了文件,请依次检查: 1.可能需要通信的主机没有全都安装.或没有全都启动飞鸽( [lol] 别笑,确有这样的情况) 2.可能防火墙软件禁止飞鸽访问网络: 3.XP系统 ...

  6. 飞鸽传书(IPMSG)协议(翻译稿)

    协议声明: 本协议是由日本人Shirouzu Hiroaki (白水 启章)先生编写. wanpengcoder翻译于Mr.Kanazawa英文文档,转载请注明出处. http://www.cnblo ...

  7. 记录一下 Linux飞鸽传书 QIpMsg 的下载链接

    linux下的iptux用来和windows下的飞秋通信很容易中断,不知道是我设置的问题,还是iptux自己的问题..不想花时间找问题额 然后试了下飞鸽传书蛮好用 可以和windows下的飞秋和飞鸽通 ...

  8. [Android源码]Android源码之高仿飞鸽传书WIFI热点搜索与创建(一)

    (本文详情来源:android源码 http://www.eoeandroid.com/thread-296427-1-1.html   转载请注明出处!)  [Android源码分享]飞鸽传书的An ...

  9. IPMSG飞鸽传书3——协议翻译

     最近看到一些朋友在编写网络程序是遇到一些问题,故把以前做IPMSG时翻译的文档贴过来,希望对网络编程新手有所帮助,在寻找编程项目的同学们也可参照此文档写出自己的IPMSG. 本文只包含其中几个比 ...

最新文章

  1. 为什么在iOS7中,UITableView顶部的UITableViewStyleGrouped样式具有额外的填充
  2. 前端一HTML:二十四伪类
  3. JZOJ 5454. 【NOIP2017提高A组冲刺11.5】仔细的检查
  4. 基金指数温度怎么算_成都冬季想装明装暖气片那究竟价格应该怎么算?
  5. android怎么ota升级,Android OTA升级过程
  6. C#LeetCode刷题-Shell
  7. 【Elasticsearch】数据预加载
  8. 中国买家团撑起2018芯片市场,华为千亿支出排名全球第三 | 盘点
  9. 面向对象进阶(day7)
  10. 字符串、组合数据类型练习
  11. 创建ipadWEB应用程序到主屏幕
  12. 嵌入式网络和数据库管理系统
  13. android 屏幕亮度代码,android 设置系统屏幕亮度
  14. Python3爬虫-selenium爬取百度文库
  15. C语言limits.h和float.h头文件
  16. 您需要知道Rails中的erb以及如何掌握它
  17. AutoLayout(Ⅱ):遇到的几个小问题(Keng)
  18. 【vue】vue用了keep-alive生命周期只执行一次怎么办?
  19. 图像处理与机器视觉网络资源收罗——倾心大放送(转载)
  20. java源码解析之反射(二)

热门文章

  1. win10共享文件怎么设置账号密码访问,访问无法弹出登录窗口怎么解决
  2. Caeser_Rummikub(一)棋牌的创建
  3. 线代笔记:一个排列中的任意两个元素对换,该排列的奇偶性发生改变
  4. 小觅相机 相机以及IMU外参标定
  5. java 过滤掉 v_Javav中危险字符过滤工具类
  6. 光伏直流用电计量系统介绍 新能源 太阳能 光伏发电系统解决方案 (安科瑞-须静燕)
  7. cocoscreator摄像机跟随玩家移动及地图边界的设置
  8. 实现PPT在线预览,PPT转图片方案
  9. 滴滴 App 质量优化黑科技,都做了什么
  10. PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第一组(转)