使用鸽子理解HTTPS的原理

前言

在网络上的任何活动均可以归结为服务器以前的收发消息。咱们能够将这些消息的收发,想象成由鸽子实现的。这很荒谬,但确实如此。安全

Http

有一天爱丽丝经过鸽子发送一条“我爱你”的消息给鲍勃。可是爱丽丝的情敌马洛里,半路拦截了鸽子,并将消息修改成了“我不爱你”。可是鲍勃没法知道,消息被篡改了。这就是Http的工做方式,很是的不可靠。服务器

一个密码

爱丽丝和鲍勃,准备对消息进行加密。好比将字母偏移3位,好比“A”使用“D”表示,“B”使用“E”表示。马洛里即便拦截了鸽子,也没法进行修改,由于他不清楚加密的方式,没法理解消息的内容。可是鲍勃却能够轻松将消息进行解密。网络

这被称为symmetric key cryptography(对称密钥加密),你知道如何加密也知道如何解密。现实的生产中,会使用更复杂的加密方式,可是主体思路是相同的。加密

如何肯定密钥

若是爱丽丝和鲍勃在发送消息前不见面,他们没法创建安全的密钥。若是在消息自己之中,携带密钥。马洛里就会知道消息的内容,对其解密后进行篡改。设计

这就是典型的MITM(中间人攻击),避免中间人攻击咱们必须更改加密系统。code

一个盒子

爱丽丝和鲍勃设计出了一个更好的加密系统,下面是操做步骤ip

  1. 鲍勃向爱丽丝,发送了一只没有任何消息的鸽子
  2. 爱丽丝在鸽子腿上绑了一个带锁的盒子,盒子是开着的,可是盒子的钥匙爱丽丝留下了。鸽子又飞回到鲍勃哪里。
  3. 鲍勃写好消息,将消息放进盒子,并锁了起来。而后鸽子将消息带回给爱丽丝。
  4. 爱丽丝收到鸽子,使用钥匙打开了盒子,并读取了消息

爱丽丝和鲍勃之间的通信使用了asymmetric key cryptography(非对称密钥加密)。你能够加密消息(把消息放进盒子),可是你没办法解密(你没有钥匙)get

盒子也能够称为“公钥”,盒子的钥匙被称为“私钥”。it

是不是可靠的盒子?

目前还有一个问题。若是马洛里拦截了鸽子,将盒子换成了本身的盒子,怎么办?io

爱丽丝能够在盒子上,添加上本身的签名,鲍勃就会知道这个盒子是否来自爱丽丝。那么鲍勃一开始该如何识别签名呢?

爱丽丝和鲍勃决定让泰德代替爱丽丝在盒子上签名。泰德是一个很是有名的,而且值得信赖的人。泰德只有肯定是爱丽丝的盒子的状况下,才会在盒子上签名。而马洛里不会获得泰德的签名。

而泰德就是Certification Authority(证书颁发机构)

盒子比较重

带有盒子的鸽子,飞的比不带盒子的鸽子飞的慢,这该怎么办?

使用非对称加密比使用对称加密要慢。爱丽丝鲍勃决定,只使用盒子(非对称加密)交换加密的密钥。而后使用密钥对消息进行对称加密。

  1. 鲍勃向爱丽丝发送一只什么都没有的鸽子
  2. 爱丽丝返回了一个带有盒子的鸽子
  3. 鲍勃本地生成了一个密钥(用于对称加密),而后把这个密钥放到盒子里,发送给爱丽丝
  4. 爱丽丝经过私钥对盒子解密,获取了鲍勃生成的密钥
  5. 以后发送消息,鲍勃只须要使用密钥进行对称加密便可(这样速度就很快了)

这就是Https的原理。

原文

参考

相关文章
相关标签/搜索