加密的本质是通过算法 + 密钥将明文转为不可识别的密文 ,解密则是反向还原,对称加密 和非对称加密是两大核心加密体系,这是所有后续概念的基础。
一、对称加密(Symmetric Encryption)
1. 核心定义
加解密使用同一把密钥 的加密方式,这把密钥称为共享密钥 / 会话密钥,是通信双方的唯一共同秘密。
2. 核心流程
A 给 B 发加密信息:A 用共享密钥加密明文→发送密文→B 用同一把共享密钥解密密文,第三方无密钥则无法解密。

3. 核心特点
- 性能极优:算法简单(AES、SM4、DES),加解密速度快、耗资源少,唯一适合大数据量加密(文件、视频、数据流);
- 密钥强保密:密钥必须全程隐藏,一旦泄露,加密体系直接失效;
- 无额外能力:仅能实现加解密,无法解决身份认证、数据防篡改 / 防抵赖问题。
4. 核心痛点
密钥分发难题:要实现通信,必须先把共享密钥安全传给对方,但在公共网络(互联网)中,密钥传输过程极易被截获,相当于 "寄带锁的箱子,却把钥匙一起寄出去"。
二、非对称加密(Asymmetric Encryption)
1. 核心定义
非对称加密 法,是一种使用一对密钥(公开密钥 和私人密钥)确保数字通信安全的方法。
公钥公开共享,用于加密数据 ,私钥保密,用于解密数据。这种分离方式消除了交换密钥所需的安全通道,使其成为一种更具可扩展性的数字通信解决方案。
2. 核心流程
- 步骤 1:密钥生成 。整个过程从创建一对加密密钥 开始:一把公钥和一把私钥。这些密钥在数学上相互关联,但不能相互衍生。公开密钥公开共享,而私人密钥则由其所有者保管,所有者只能使用自己的私人密钥。RSA 和椭圆曲线加密(ECC) 等算法通常用于生成这些密钥,构成可靠的 公钥基础设施(PKI).
- 步骤 2:密钥交换。为了建立安全的通信渠道,各方要交换各自的公开密钥。
- 步骤 3:加密 。加密数据时,发送方使用接收方的公开密钥将明文 (可读数据)转换为密文(不可读的加密数据)。这就确保了数据在传输过程中的安全性,因为只有目标收件人才能解密数据。
- 步骤 4:发送加密数据。加密数据通过标准通信渠道传输,如电子邮件或网络协议。即使被截获,没有私人密钥也无法读取或篡改密文。
- 步骤 5:解密。接收者收到密文后,使用私人密钥对数据进行解密。私人密钥可以逆转加密过程,恢复原始明文。
下面以bob和alice通讯为例(仅描述单向通讯,即bob->alice):
- alice的私钥自己持有,公钥分享给bob
- bob把要发送的数据,使用alice的私钥进行加密;
- alice收到数据后,使用自己的私钥进行界面;

3. 核心特点
- 性能较弱:算法复杂(涉及大整数运算、椭圆曲线),加解密速度慢、耗资源多,不适合大数据量加密,仅能处理短数据(如密钥、哈希值);
- 密钥分离:一把公开、一把保密,无需传输保密密钥,从根本上解决密钥分发问题;
- 拓展能力强:除加解密外,还能实现数字签名,解决网络通信中的身份认证、数据防篡改 / 防抵赖问题。
三、签名&验签
1、问题引入
因为 Alice 的公钥本来就是公开的,任何人都可以获得。那么Eve 也可以使用 Alice 的公钥冒充 Bob 给 Alice 发邮件。那么Alice 如何确认邮件来自于 Bob呢?
那么在生活中,我们如何做这件事呢?
那就是让 Bob 在纸上签名 并且按手印 ,因为指纹和字迹是 Bob 独有的,其它人很难伪造。
所以我们需要在计算机中引入类似的机制:
即只有 Bob 自己能够产生的独一无二的标志,并且其它人能够验证这个标志确实是属于 Bob的。
这就是我们今天要讲的主题---「数字签名」。
2、情景分析
还记得什么是 Bob 独有的吗?
对,就是 Bob 自己的私钥,Bob 用自己的私钥对邮件内容计算一个「签名」,将「签名」和邮件内容一起发送出去,接受者 Alice 可以使用 Bob 的公钥验证这个签名是否正确,这就叫「验签」。
如果不是 Bob 的私钥计算的签名,那么 Alice 用 Bob 公钥验签将会出错。

可以看到, Eve 试图使用自己的私钥计算签名然后发送给 Alice, 但是 Alice 使用 Bob的公钥进行验签时将会出错!
那么 Eve 可能篡改内容并冒充 Bob 的签名吗?不可能!因为内容发生改变时,对应的签名也需要重新计算,而签名的生成依赖于私钥,只要 Bob 的私钥不泄露,签名就不会被冒充。
所以使用数字签名,我们能够鉴别消息的发送者,也就是说黑客无法伪装发送者进行发送数据,也无法篡改。
注意:
可以看出我们这里数据是明文传输的,存在窃听风险。但是我们为了阐述数字签名机制是如何运转的,故意将保证信息机密性的机制省略了。
如果想要保证数据的机密性,我们常见的做法是,通信双方通过非对称加密安全交换对称加密的密钥,后续通信过程的数据都使用对称加密保证数据机密性。
并且「签名」的作用本身也不是用来保证数据的机密性,而是用于验证数据来源的防止数据被篡改的,也就是确认发送者的身份。
一般而言,我们不会直接对数据本身直接计算数字签名,为什么呢?
因为数字签名属于非对称加密,非对称加密依赖于复杂的数学运算,包括大数乘法、大数模等等,耗时比较久。
如果数据量大的时候计算数字签名将会比较耗时,所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做「摘要」。
「摘要」就像人的指纹一样,可以代表一个人,只要内容发生了改变,计算出来的摘要也应该变化。
「摘要」最好是不可逆转的,一般使用开头提到的 MD5 作为 Hash 函数,MD5 输出的结果固定位 128 位。
为什么「摘要」最好是不可逆转的?
因为既然 Alice 可以用 Bob 公钥解开签名,那么理论上其它人,比如 Eve 也可以使用 Bob 公钥解开签名拿到数据。
所以我们最好对数据的「摘要」进行签名,这样,Eve 就算解开签名,拿到的也是「摘要」,如果摘要是不可逆转的,也就是无法从摘要反推出原文,也就达到了保密的作用。
接受者 Alice 收到后,取下数字签名,同时用 Bob 的公钥解密,得到「摘要1」,证明确实是 Bob 发的。
( 画外音:如果使用 Bob 的公钥验证签名出错,那么签名一定不是 Bob 的私钥生成的)
再对邮件内容使用相同的散列函数计算「摘要2」,与上面得到的「摘要1」进行对比,两者一致就说明信息未被篡改。
这样两步分证明发送者身份和保证数据未被篡改。
四、数字证书
1、问题引入
Bob 和 Alice 现在可以依赖于对称加密进行保密通信,也可以依赖于数字签名验证消息是否是对方发送的。
但是这一切的根基是建立在 Alice 持有的公钥确实是 Bob的,反之亦然。
什么意思呢?
试想,Eve 如果将自己的公钥冒充 Bob 发送给 Alice,然后 Alice 保存了下来,那以后凡是 Bob 发送的消息,而会验反证签名失败,被当做冒充者。
那你可能会问,为什么 Eve 可以将自己的公钥发送给 Alice,而 Alice 毫不知情呢?

看!我们又回到了最初的起点,只不过这次被篡改的是公钥,之前是消息本身。
因为 Bob 的公钥是直接通过网络发送给 Alice的,所以 Eve 才可以在这一步做手脚,进行篡改,将自己的公钥冒充 Bob 发送给 Alice,也就是发送公钥这一步没有做到:
- 防篡改
- 防冒充
防篡改怎么和防冒充怎么实现的呢?
我们前面讲了,就是靠数字签名! 但是数字签名需要接受者持有发送者公钥,才能进行验签。
而我们现在处理的是分发公钥这一步,所以.......死锁了。这像是先有鸡还是先有蛋的问题
现在的问题就是「Bob 无法证明它自己是 Bob」。
这个是不是似曾相识,以前去办事的时候经常被要求出具「我妈是我妈」这类证明。但是我们自己说"我妈就是我妈",人家根本不会信呀,需要一个可信第三方出具证明,比如派出所。
那么「Alice 如何才能确认 Bob 发送给自己的公钥确实是 Bob 的,而没有被篡改?」
在只有 Alice 和 Bob 两人的情况下是没法验证的。
所以,我们这里也需要一个第三方帮 Bob证明 「Bob 的公钥就是 Bob 的公钥」,有点绕口令那感觉了~
2、情景分析
为了解决这个问题,就引入了「数字证书」,什么叫数字证书呢?
数字证书其实就是「公钥的数字签名」。
为什么呢?我们引入数字证书的目的是为了保证公钥不被篡改,即使被篡改了也能识别出来。
而防篡改的方法就是数字签名,但是这个签名不能我们自己做,原因说过了,因为我们的公钥还没分发出去,别人无法验证。
所以只能找可信的第三方来帮我们签名,即证书颁布机构(CA),CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息用 CA 的私钥进行签名。
并且将签名结果和这些信息放在一起,这就叫做「数字证书」。
这样,Bob 就可以去 CA 申请一个证书,然后将自己的证书发给 Alice,那么 Alice 如何验证这个证书确实是 Bob的呢?
注意:
CA 的公钥也是需要使用证书来分发的,所以 Alice 的电脑必须安装 CA 的证书,证书里包含了 CA 的公钥。
收到 Bob 发过来的数字证书后,Alice 使用 CA 的公钥进行验证,验证通过即证明这确实是 Bob 证书,也就可以使用证书中包含的 Bob 的公钥,按照之前讨论的流程进行通信。
那么 Eve 是否可以在中途篡改 Bob 的证书呢?
答案是不行,因为证书的信息使用 CA 的私钥进行签名,只要 Eve 修改了任何一个 Bit 都会导致最后签名验证不通过。
那 Eve 可不可以修改证书信息后自己重新计算一次证书的数字签名呢?
也不行,因为证书的数字签名计算依赖于 CA 的私钥,Eve 是拿不到 CA 的私钥的。
如果拿到了,说明什么?整个世界都是不可信的。
3、证书颁发机构工作流程
- 身份验证:当你想要获得一个数字证书时,你需要向CA申请。CA会通过一系列验证流程来确认你的身份。例如,如果你是一个公司,CA可能会要求看你的营业执照和其他法律文件。
- 证书生成:一旦身份得到验证,CA会为你创建一个数字证书。这个证书包含了你的公钥(用来加密信息的密钥)和一些身份信息,比如你的名字、公司名或网站地址。
- 证书签名:为了让其他人能够信任这个证书,CA会用自己的私钥对这个证书进行签名。这个签名就像是CA对这个证书真实性的担保。
- 证书分发:你将获得的数字证书安装在你的服务器或网站上。当用户访问你的网站时,他们的浏览器会检查这个证书。浏览器已经内置了信任的CA列表,所以它能够验证CA的签名。
- 安全通信:如果证书验证通过,用户的浏览器就会相信你的网站是安全的,然后就可以开始安全的通信了。比如,用户输入的信息会被用户的电脑使用网站的公钥加密,然后安全地发送到服务器。只有服务器用自己的私钥才能解密这些信息。
五、Q&A
-
非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥"加密" ?
-
加密场景,那么肯定希望只有我才能解密,别人只能加密。即公钥加密,私钥解密。
-
签名场景,既然是签名,就希望只能我才能签名,别人只能验证。即私钥签名,公钥验签
-
-
什么是数字签名,数字签名的作用是什么?
-
数字签名就是使用私钥对数据摘要进行签名,并附带和数据一起发送。
-
可以起到防篡改、防伪装、防否认的作用。
-
-
为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?
- 数据可能比较大,签名是使用非对称加密算法,比较耗时
- 防止第三方使用公钥解开签名后,拿到原始数据
-
什么是数字证书,数字证书存在解决了什么问题?
-
数字证书就是由 CA 机构使用自己私钥,对证书申请者的公钥进行签名认证。
-
数字证书解决了如何安全分发公钥的问题,也奠定了信任链的基础。
-
ref:
https://csguide.cn/network/security/6_digital_certificate.html
https://www.youdzone.com/signature.html