12

这样理解HTTPS

 3 years ago
source link: https://www.onlythinking.com/2020/12/13/这样理解https/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文尝试使用牛郎织女来解释Https。

信息交换传递从古至今都有,只是传递导体和交换方式不断在发生变化。现代信息传递都是通过网络进行。信息传递步骤简化:打包 —> 传输 —> 解包,而像Http这类协议就是指定信息传递的标准,而信息传递一般主要考虑以下两方面问题。

  • 可靠性(传递到一半丢失??)
  • 安全性(被人拦截修改??)

本文主要讨论传递的安全性。众所周知 Https就是http安全版,我们先来看一看古时传递信息怎么保证安全。

飞鸽传书

在通讯不是很发达的年代,飞鸽传书是一种很有效的方式。

牛郎织女属于异地恋,他们日常沟通都是通过信鸽来传递情书。传递过程中,信息安全很重要,如果不慎被王母知道就麻烦了。于是牛郎开始研究一套安全协议。他想了以下几种方式:

明文传递

直接将写有“ 我在牛家村门口 ”情书发送给织女。这种方式安全性很低,一旦被王母拦截了鸽子拿到情书所有事情就败漏了。

密钥加密

将情书内容加密后再进行传递:

  • 制作密钥“ 7354126 ”并发送给织女;
  • 制作密文“ 口牛村家我在门 ”发送给织女;
  • 织女收到密文后通过密钥解密得到“ 我在牛家村门口 ”。

这种方式的缺点是,传播密钥时,被王母拦截拿到了密钥,信息一样会被泄露。

注:牛郎的这种加密方式在计算机中叫 对称加密 (AES)

包装加锁

针对密钥加密改进,新的通讯方式:

  • 牛郎先给织女发送一个空消息,让她知道自己想发消息;
  • 然后织女会给牛郎发送一个带锁的盒子,钥匙自己保留;
  • 牛郎收到盒子后,将写好的情书放到盒子里并锁上发给织女;
  • 织女收到盒子后用钥匙打开得到情书。

这种方式有个缺点,王母在第二步拦截了织女发给牛郎的空盒子,然后在里面做一些手脚,牛郎收到后就很危险。

注:上面这种加密方式在计算机中叫做 非对称加密 (RSA),盒子好比为 公钥 用来加密,钥匙为 私钥 用于解密。

盒子封条

为了防止王母拦截盒子做手脚,织女决定发送盒子前把盒子打上封条。这样牛郎收到盒子时先检查盒子有没有被动过,确认安全之后再将情书放到盒子锁定发送。

这样做完之后似乎很安全,但是封条也很可能被伪造。牛郎如何才能确定是织女打的封条?于是他们找到了月老,让月老代替织女帮她打封条。他们都信赖月老为人,因为他只会在确定织女身份后才帮她封条。这样牛郎收到盒子一看是月老打的封条值得信赖就没问题。

注:上面提到的月老其实就是网站 证书颁发机构 简称CA。

就这样过了一段时间,鸽子开始罢工,因为每天带着盒子飞来飞去很累。于是牛郎修订了通讯协议,得到了最终版本。

当牛郎想和织女沟通时:

  1. 牛郎发送一个空消息给织女;
  2. 织女收到消息,准备盒子并且是通过月老封条;
  3. 牛郎收到盒子,生成 密钥 放到盒子里面锁定发送给织女;
  4. 织女收到盒子用钥匙打开取出 密钥 保存;
  5. 现在牛郎就可以使用 密钥 加密情书,然后发送给织女,不再使用盒子锁定。

小结

要完全理解Https 协议本身是比较复杂,里面涉及了很多通讯的专业知识和密码学知识。本文旨在简化解释它通讯模型。

欢迎大家留言交流!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK