用信鸽来解释HTTPS

news/2024/7/3 12:52:33 标签: 密码学, https, 加密, 解密, 信鸽

原文链接:HTTPS explained with carrier pigeons

https://cdn-images-1.medium.com/max/800/1*vHF6NNdZX9ziiW_uRYzvAA.png" alt="这里写图片描述" title="" />

密码学是一门比较难以理解的学科,因为它充满了一系列的数学证明。但如果你不是在开发一个加密系统的话,我想你其实是没必要了解那么高深的东西。

要是你希望通过这篇文章来创造出下一代的HTTPS协议,那我只能说只靠我这只信鸽是不够的。如果不是这样想的话,那就冲杯咖啡,然后好好来看下这篇文章吧。

信鸽">小红,小明和…信鸽

你在互联网上的任何一个活动(阅读文章,在淘宝买东西,上传照片等),其实都是在跟服务器进行消息的发送和接收。

这么说可能有点抽象,或者我们可以发挥想象力,比如想象这些消息是通过信鸽来传递的。虽然听上去有点乱来,但相信我,HTTPS的工作原理跟这个一样,只是速度上快了不少而已。

那么我们就不提服务器,客户端和黑客这些了,我们就用小红,小明和韩梅梅来代替。所以即使你一开始不理解密码学的相关概念也没关系,你只要能记得这几个人的名字就可以了。

一次天真的沟通

好,那么现在小红想要发一条信息给小明,她会把信息绑在信鸽的腿上,然后发给小明。小明收到了这只信鸽就可以看这条信息了,整个过程都是很顺利的。

但现在有个问题,如果韩梅梅在信鸽送信的途中把它拦下来,然后改了里面的信息怎么办?这样小明即使收到了信,也不知道这个内容是不是被改过。

而这就是我们平时HTTP的工作原理,是不是很可怕?所以我们都不应该通过HTTP发送自己的银行凭证。

密码

现在我们假设小红和小明很学聪明了,他们决定在他们写信息的时候,使用一种加密手段。于是他们将每个字母都移动三个位置,即D->A,E->B,F->C这样。那么如果一段文字是“secret message”就会变成“pbzobq jbppxdb”。

那么现在除非韩梅梅知道这段话的意思,不然她就算把信鸽中途拦下来,她也无法把信息改成另外一段有意义的内容。但对小明来说,把这段文字解密回去就简单多了,他只要把这些字母的位置退回三个位置,就知道原来的意思了,即“pbzobq jbppxdb”就变成了“secret message”。

这种方法在密码学里叫“对称密钥加密,因为你自己既知道如何加密,也知道如何解密

它还有个更为广为熟知的名字,叫“凯撒密码”。在现实生活里,我们当然是使用比这更复杂的加密方式,但其实它们的主要原理还是一样的。

我们如何选择密钥?

如果没有人知道发送方和接收方使用了什么密钥,那么对称密钥加密是很安全的。在凯撒密码里,我们使用字母的位置偏移量来作为我们的密钥,我们刚才举的例子里是3,当然我们也可以用4,12之类的。

但现在有个问题,如果小明和小红两个人之前从未见过面,那么他们就没办法安全地事先建立这么一个密钥。如果他们一开始把密钥放在信息里发送出去,那么韩梅梅就可以拦截到这条信息,发现这个密钥。这样即使小红和小明之后使用这个密钥对信息进行加密,韩梅梅还是照样可以获取并修改信息。

这就是一个典型的“中间人攻击”的例子,而要避免这种攻击的唯一方法,就是双方都一起修改加密系统。

信鸽携带盒子">让信鸽携带盒子

于是小红和小明想出了一个更好的系统,当小明想要和小红发信息的时候,需要遵循以下的几个步骤:

  1. 小明送一只没有携带任何信息的信鸽给小红
  2. 小红让信鸽带着一个盒子回去,这个盒子带着一个锁但没有锁上,钥匙还是在小红手上
  3. 小明将信息放进盒子里,然后把盒子锁上,发回给小红
  4. 小红收到了盒子,用自己的钥匙打开盒子就可以看到信息了

这种方法就让韩梅梅即使拦下信鸽也无法改变信息的内容了,因为她没有开锁的钥匙。同样的如果小红想要和小明通信,也是使用同样的流程。

小明和小红使用的这种方法,就是我们所说的“非对称密钥加密。之所以叫非对称,是因为即使你能加密信息(锁上盒子),你也不能解密(打开已经锁上的盒子)。行话里我们管这个盒子叫公钥,打开盒子的钥匙叫私钥

我要如何相信这个盒子?

不过你可能会注意到一个问题,当小明收到这个开着的盒子的时候,他怎么能确信这个盒子是真的来自小红,而不是被韩梅梅中途调换过的呢?

于是小红决定在这个盒子上签名,这样当小明收到这个盒子的时候,检查上面的签名就知道这个盒子是小红的了。

那么这个时候你可能又会想,但小明在第一次的时候怎么知道这个签名就是来自小红的呢?这问题非常好,因为他们两边都有同样的问题,于是他们决定找第三个人来签名,而不是小红,这个人就是老王。

老王是谁?老王是一个很出名的,人人都相信他的人,他会把自己的签名给所有的人,并且大家都相信他只会为合法的人的盒子签名。

那么现在老王会首先确认索要他签名的人是小红,然后在小红的盒子签名,而韩梅梅也无法在半途把这个盒子调换,因为小明只要验证了上面的签名人的身份,就知道这个盒子是不是假的了。

老王这个角色在术语里叫认证机构(CA,Certification Authority ),比方说你现在阅读这篇文章所使用的浏览器里,就装着来自不同认证机构的签名。

所以当你访问一个网站的时候,你之所以认为这个网站可信,是因为你信任这个认证机构和它告诉你这个网站是可信的的保证。

沉重的盒子

现在小明和小红拥有了一个可信赖的系统进行沟通,但他们也开始意识到,让鸽子带着这些盒子比只带信息要沉重得多。

所以他们决定只有在对信息进行对称密钥加密之前,即选择密钥的时候,才使用非对称加密

如此一来,就皆大欢喜。既使用了可信赖的非对称加密又使用了高效的对称加密

虽然现实情况下,我们的消息传送的速度不是像信鸽那样慢的速度,但无论如何使用非对称加密信息的速度总是慢于使用对称加密的。所以我们只是用非对称加密来交换密钥而已。

现在你已经了解了HTTPS是如何工作了,我想你的咖啡也差不多了,那么辛苦你看到了这里,好好去喝一杯吧。


http://www.niftyadmin.cn/n/1149504.html

相关文章

网络 - 网关的作用、DNS的作用

DNS的作用 域名系统。负责把域名翻译成ip,或者把ip翻译成域名。 hosts文件用于静态的域名解析。优先级高于DNS解析。 DNS服务器,负责解析域名到ip地址上。 114.114.114.114和8.8.8.8,这两个IP地址都属于公共域名解析服务DNS其中的一部分&…

Java::XML电子签名代码

例子 test.xml <license><test>hello world</test> </license> test_sign.xml <?xml version"1.0" encoding"UTF-8" standalone"no"?> <license><test>hello world</test><Signature …

Python3 的异常处理

Python3 的异常处理&#xff0c;在官方文档的 tutorial 中有说明。 这里把常用的异常处理方法都列出来&#xff0c;方便平时查找。 捕获异常基类 Python3 要求我们的异常必须继承 Exception 类。Built-in 的所有异常也都是继承自这个类。因此&#xff0c;我们只需要捕获这个类的…

Java基础面试操作题: 获取 1-20 之间的随机数,共计 20 个,要求不能重复 获取 1-20 之间的随机数,共计 10 个,要求不能重...

package com.swift;import java.util.HashSet; import java.util.Random; import java.util.Set;public class Suijishu_Test {public static void main(String[] args) {/** 获取 1-20 之间的随机数&#xff0c;共计 20 个&#xff0c;要求不能重*/Random ran new Random();S…

为什么国际航班的路线如此混乱?

原文&#xff1a;Why the world’s flight paths are such a mess 写在前面 如果你认为从A点飞到B点只是两地之间的直线问题的话&#xff0c;那么你就需要再动动脑筋了。其实安全和政治才是决定航班路线的主要因素&#xff0c;相对于航空公司的碳足迹&#xff0c;机票的价格也…

Android:普通对话框Dialog

String.xml文件的代码如下&#xff1a; 1 <resources> 2 <string name"app_name">普通对话框案例</string> 3 <string name"btn">显示普通对话框</string> 4 <string name"title">普通对话框&l…

使用Charles抓包Firefox

写在前面 想使用Charles抓包Firefox浏览器的内容&#xff0c;却发现抓取不到任何内容。 方法 将Firefox设置成系统代理即可。 进入“首选项”“网络设置”——“设置”勾选“使用系统代理” 参考 Browser & System Configuration

SAM

一、SAM&#xff08;Security Accounts Manager;安全帐户管理服务)&#xff0c;是windoows 系统帐户管理的核心。禁用此服务时&#xff0c;系统的安全账户管理服务下不能添加用户、修改用户密码等操作。还可以导致一些服务无法正确启动。二、SAM 安全帐户管理器负责SAM 数据库的…