# 科普一下非对称加密

By [武止戈WuWu吴无](https://paragraph.com/@wuwu-3) · 2024-12-28

---

**公开密钥密码学**（英语：**Public-key cryptography**）也称**非对称式密码学**（英语：**Asymmetric cryptography**）是[密码学](https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A2%BC%E5%AD%B8)的一种[算法](https://zh.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E6%B3%95)，它需要两个[密钥](https://zh.wikipedia.org/wiki/%E5%AF%86%E9%92%A5)，一个是公开密钥，另一个是私有密钥；公钥用作加密，私钥则用作解密。使用公钥把[明文](https://zh.wikipedia.org/wiki/%E6%98%8E%E6%96%87)加密后所得的[密文](https://zh.wikipedia.org/wiki/%E5%AF%86%E6%96%87)，只能用相对应的[私钥](https://zh.wikipedia.org/wiki/%E7%A7%81%E9%92%A5)才能解密并得到原本的明文，最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥，故被称为非对称加密；不同于加密和解密都使用同一个密钥的[对称加密](https://zh.wikipedia.org/wiki/%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86)。**公钥可以公开**，可任意向外发布；**私钥不可以公开**，必须由用户自行严格秘密保管，绝不透过任何途径向任何人提供，也不会透露给被信任的要通讯的另一方。

### **加密**

非对称加密往往需要[密码学安全伪随机数生成器](https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6%E5%AE%89%E5%85%A8%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8)的协助来产生一对[密钥](https://zh.wikipedia.org/wiki/%E5%AF%86%E9%92%A5)，其中一个可以随便公开，称为公钥；另一个不公开，称为私钥，必须由用户自行严格秘密保管，绝不透过任何途径向任何人提供。

如果任何人使用公钥加密明文，得到的密文可以透过不安全的途径（如[网络](https://zh.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF)）发送，只有对应的私钥持有者才可以解密得到明文；其他人即使从网络上窃取到密文及加密公钥，也无法（在数以年计的合理时间内）解密得出明文。典型例子是在网络银行或购物网站上，因为客户需要输入敏感消息，浏览器连接时使用网站伺服器提供的公钥加密并上传数据，可保证只有信任的网站伺服器才能解密得知消息，不必担心敏感个人资讯因为在网络上传送而被窃取。

在现实世界上可作比拟的例子是，一个传统保管箱，开门和关门都是使用同一条钥匙，这是对称加密；而一个公开的邮箱，投递口是任何人都可以寄信进去的，这可视为公钥；而只有信箱主人拥有钥匙可以打开信箱，这就视为私钥。

#### **加密过程**

> 在非对称加密中，爱丽丝使用鲍伯的公钥加密明文，得到密文，而只有鲍伯因为持有私钥才可以解密，得到明文。
> 
> 在数学上，$${\\displaystyle d(c(x))=x}$$，使用典型的[爱丽丝与鲍伯](https://zh.wikipedia.org/wiki/%E6%84%9B%E9%BA%97%E7%B5%B2%E8%88%87%E9%AE%91%E4%BC%AF)假设来解释：
> 
> 1.  爱丽丝与鲍伯事先互不认识，也没有可靠安全的沟通渠道，但爱丽丝现在却要透过不安全的互联网向鲍伯发送资讯
>     
> 2.  爱丽丝撰写好原文，原文在未加密的状态下称之为明文 $${\\displaystyle x}$$
>     
> 3.  鲍伯使用[密码学安全伪随机数生成器](https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6%E5%AE%89%E5%85%A8%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8)产生一对密钥，其中一个作为公钥为 $${\\displaystyle c}$$，另一个作为私钥 $${\\displaystyle d}$$
>     
> 4.  鲍伯可以用任何方法发送公钥 $${\\displaystyle c}$$ 给爱丽丝，即使伊夫（窃听者）在中间窃听到 $${\\displaystyle c}$$ 也没问题
>     
> 5.  爱丽丝用公钥 $${\\displaystyle c}$$ 把明文 $${\\displaystyle x}$$ 进行加密，得到密文 $${\\displaystyle c(x)}$$
>     
> 6.  爱丽丝可以用任何方法传输密文 $${\\displaystyle c(x)}$$ 给鲍伯，即使伊夫在中间窃听到密文 $${\\displaystyle c(x)}$$ 也没问题
>     
> 7.  鲍伯收到密文，用私钥 $${\\displaystyle d}$$ 对密文进行解密 $${\\displaystyle d(c(x))}$$，得到爱丽丝撰写的明文 $${\\displaystyle x}$$
>     
> 8.  由于伊夫没有得到鲍伯的私钥 $${\\displaystyle d}$$，所以无法得知明文 $${\\displaystyle x}$$
>     
> 9.  如果爱丽丝丢失了她自己撰写的原文 $${\\displaystyle x}$$，在没有得到鲍伯的私钥 $${\\displaystyle d}$$ 的情况下，她的处境将等同伊夫，即无法透过鲍伯的公钥 $${\\displaystyle c}$$ 和密文 $${\\displaystyle c(x)}$$重新得到原文 $${\\displaystyle x}$$
>     

### **数码签名(使用私钥对一段信息进行签名)**

相反，如果某一用户使用他的私钥加密明文，任何人都可以用该用户的公钥解密密文；由于私钥只由该用户自己持有，故可以肯定该文件必定出自于该用户；公众可以验证该用户发布的数据或文件是否完整、中途有否曾被篡改，接收者可信赖这些数据、文件确实来自于该用户

以上内容节选并修改自: [维基百科](https://zh.wikipedia.org/zh-sg/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86)

另外推荐两个科普视频, 看了还不懂我也没办法了:

*     
    
*   [长度14分钟](https://www.youtube.com/watch?v=i8CVb7-c0lY), 科普图文做得不错, 但强烈建议数学不好的观众跳过中间欧拉函数(数学原理)的部分

---

*Originally published on [武止戈WuWu吴无](https://paragraph.com/@wuwu-3/2DLpeZoNKcy3DThJtWVb)*
