一文彻底搞懂加密、数字签名和数字证书!

微信搜索🔍「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍

前言

这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视频。

在一旁玩手机的女朋友突然问”你知道数字证书是来干啥的不,为啥浏览器提示证书不可信?”

你要说这个,那我可来劲了,于是乎从加密、数字签名一直讲到了数字证书。。。终于把女朋友讲睡着了,独自写下这篇文章。

正文

如果你能非常清晰的回答出以下问题,可以直接拉到最下面帮我点个赞~,把时间用去陪陪女朋友:

  1. 非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?
  2. 什么是数字签名,数字签名的作用是什么?
  3. 为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?
  4. 什么是数字证书,数字证书解决了什么问题?

这篇文章,主要围绕数字签名和数字证书的原理以及它们的作用展开。

争取做到让不具备任何密码学基础知识的同学都能听懂,所以在这里需要先对齐一些加密相关的概念 。

1. 什么是加密

加密就是对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“, 密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。

定义简单吧?那来看个题,考虑以下哪些属于加密方法:

  • AES
  • RSA
  • MD5
  • BASE64
  • SM4

这几种都是日常开发中常用的数据编码技术,但是只有 AES、RSA、SM4 才能算是加密方法。

为什么呢?一个区分的简单方法就是看编码后的数据是否还能还原,能还原的是加密。

MD5 实际上是对数据进行有损压缩,无论数据有多长,1KB、1Mb 还是 1G,都会生成固定 128 位的散列值,并且 MD5 理论上是不可能对编码后的数据进行还原的,即不可逆。

MD5 因为其具有不可逆性、单向恒定性(相同的数据多次计算值不变)被广泛应用于文件完整性验证、口令加密以及接下来会讲到的数字签名中。

至于 BASE64 是否算做加密方法,仁者见仁。在这里不下结论,因为 BASE64 编码不需要密钥,且编码后的字符串任何人都可以解码出原串,所以一般不认为是加密方法。BASE64 常用来做转码,把二进制字节序列转化为 ASCII 字符序列。

2. 加密算法的分类

加密算法按照加解密使用的密钥是否相同,可分为:

  • 对称加密(Symmetric Cryptography)
  • 非对称加密(Asymmetric Cryptography)
1. 对称加密

对称加密是指加密和解密时使用同一个密钥。

2. 非对称加密

非对称加密是指加密和解密使用不同的密钥,这两个密钥分别叫做「公钥」、「私钥」。

公钥是可以公开给所有人的,而私钥需要自己保密的。

公钥加密的数据只能用私钥解密:

同理,私钥“加密”的数据只能用公钥“解密”:

大家注意到没,我对 私钥“加密” 这里打了引号,为什么呢?

因为私钥不是用来加密的,准确的说法应该是 「私钥签名,公钥验签」。

这个问题很多同学都存在误解,认为公私钥都可以用于加密。

实际上不是的,至于为什么,后面讲完签名我会解释的。

3. 故事开始

为了讲这个故事,小北请来了密码学中常用的学术情侣,Alice 和 Bob,以及窃听者代表 Eve。

我们从 Alice、Bob 约会的故事展开,来讲讲其中暗藏着哪些危机,又是如何一步步化解的。

3.1 第一回合

九月,一个夜黑风高的晚上,Bob 想约 Alice 出来玩,于是给 Alice 发了一封邮件:
明文通信

但我们都知道网络是不可信的,并且由于消息在网络中是明文传输的,所以黑客可以轻易的截获、篡改甚至冒充 Bob。

来,我们看看黑客 Eve 是怎么干的:

黑客窃听伪造

瞧,Eve 轻易的拿到了邮件内容 (窃听),并且修改了邮件内容 (篡改),甚至说他可以随时冒充 Bob 给 Alice 发送邮件 (伪装)。

如果上图中 Eve 伪造的内容被 Alice 接收到了,那么后果可想而知。

现实世界中,我们每天都在通过网络进行聊天、转账、浏览不存在网站。

如果都是这样明文传输数据,显然毫无安全感。

3.2 第二回合

既然我们不能明文传输,那么 Bob 和 Alice 提前商量好密钥,使用对称加密对邮件内容加密不就好了~

对称加密

现在 Bob 发送的邮件都使用和 Alice 提前商量好的密钥加密后再传输。

由于没有密钥,Eve 就算截获到数据也无法获取邮件的内容,也没法篡改和冒充 Bob。

因为篡改后的数据必须使用密钥再次加密 Alice 才能正确解密。

那么只要 Bob 和 Alice 能够保证 密钥不泄露,整个通信就是安全的。

如果密钥泄露,被中间人截获,那么就等同于明文通信。

所以我们不能把安全性寄托在人上面。

posted @ 2022-11-14 14:24  易先讯  阅读(337)  评论(0编辑  收藏  举报