公钥密码基础(一):从对称密码到公钥密码——密钥分发问题

公钥密码基础(一):从对称密码到公钥密码------密钥分发问题

    • 前言
    • 一、对称密码的前提:双方必须共享同一把密钥
      • [1.1 对称加密的基本模型](#1.1 对称加密的基本模型)
      • [1.2 为什么不能直接把密钥发过去](#1.2 为什么不能直接把密钥发过去)
      • [1.3 密钥必须保密,还必须确认属于谁](#1.3 密钥必须保密,还必须确认属于谁)
    • 二、用户数量增加后,密钥数量为什么会失控
      • [2.1 两个用户只需要一把共享密钥](#2.1 两个用户只需要一把共享密钥)
      • [2.2 n n n 个用户需要多少把密钥](#2.2 n n n 个用户需要多少把密钥)
      • [2.3 每个用户需要保存多少密钥](#2.3 每个用户需要保存多少密钥)
      • [2.4 群组共享一把密钥也不是理想修复](#2.4 群组共享一把密钥也不是理想修复)
    • 三、公钥密码出现之前,密钥是怎样分发的
      • [3.1 线下或带外分发](#3.1 线下或带外分发)
      • [3.2 密钥分发中心 KDC](#3.2 密钥分发中心 KDC)
      • [3.3 中心化方案的新问题](#3.3 中心化方案的新问题)
    • 四、公钥密码的关键突破:公开加密密钥
      • [4.1 一对密钥承担不同职责](#4.1 一对密钥承担不同职责)
      • [4.2 公钥为什么可以公开](#4.2 公钥为什么可以公开)
      • [4.3 密钥数量从平方级降到线性级](#4.3 密钥数量从平方级降到线性级)
    • 五、一个完整的公钥加密通信过程
      • [5.1 Bob 生成密钥对](#5.1 Bob 生成密钥对)
      • [5.2 Alice 使用 Bob 的公钥加密](#5.2 Alice 使用 Bob 的公钥加密)
      • [5.3 Bob 使用私钥解密](#5.3 Bob 使用私钥解密)
      • [5.4 这个流程还缺少身份认证](#5.4 这个流程还缺少身份认证)
    • 六、中间人攻击:公钥密码没有自动解决信任
      • [6.1 攻击过程](#6.1 攻击过程)
      • [6.2 公钥需要认证](#6.2 公钥需要认证)
      • [6.3 证书也不是凭空可信](#6.3 证书也不是凭空可信)
    • 七、真实系统为什么仍然使用对称密码
      • [7.1 公钥密码并不适合直接加密大量数据](#7.1 公钥密码并不适合直接加密大量数据)
      • [7.2 混合加密的基本模型](#7.2 混合加密的基本模型)
      • [7.3 两类密码不是替代关系](#7.3 两类密码不是替代关系)
    • [八、密钥交换、公钥加密与 KEM 的区别](#八、密钥交换、公钥加密与 KEM 的区别)
      • [8.1 公钥加密](#8.1 公钥加密)
      • [8.2 密钥交换](#8.2 密钥交换)
      • [8.3 KEM](#8.3 KEM)
    • 九、密钥分发问题最终变成了什么
      • [9.1 从秘密运输转向公开认证](#9.1 从秘密运输转向公开认证)
      • [9.2 私钥成为新的核心资产](#9.2 私钥成为新的核心资产)
      • [9.3 长期私钥泄露与前向安全](#9.3 长期私钥泄露与前向安全)
    • 十、常见误区
      • [10.1 公钥公开,所以从哪里下载都一样](#10.1 公钥公开,所以从哪里下载都一样)
      • [10.2 公钥密码比对称密码高级,可以完全替代 AES](#10.2 公钥密码比对称密码高级,可以完全替代 AES)
      • [10.3 使用公钥加密就自动具备身份认证](#10.3 使用公钥加密就自动具备身份认证)
      • [10.4 能解密就说明密文完整](#10.4 能解密就说明密文完整)
      • [10.5 密钥越长,整个协议就一定越安全](#10.5 密钥越长,整个协议就一定越安全)
    • 十一、本文应该记住什么

前言

在前面的对称密码体系中,无论使用 AES、SM4,还是 ChaCha20,通信双方都必须提前持有同一份秘密密钥。只要密钥安全、算法和工作模式使用正确,对称密码就能以很低的计算成本保护大量数据。

问题在于:

如果双方还没有建立安全信道,第一把对称密钥应该怎样送过去?

直接通过网络发送,密钥可能被窃听;先把密钥加密,又需要另一把已经共享的密钥;让每两个用户提前线下交换密钥,用户数量一多,密钥数量和管理成本会迅速失控。

这就是现代密码学中著名的密钥分发问题。它不是 AES 或 SM4 算得不够安全,而是对称密码在开始工作之前,通信双方必须先解决"如何拥有同一个秘密"的前置条件。

公钥密码的出现,第一次从体系结构上改变了这个问题:用户可以公开一把密钥,同时保留另一把私钥。任何人都能使用公钥完成加密或验证,但只有私钥持有者能够解密或签名。

本文不急着进入 RSA、Diffie-Hellman 或椭圆曲线的具体数学,而是先讲清公钥密码为什么会出现:对称密码的密钥分发究竟难在哪里,公私钥结构解决了哪一部分问题,又留下了哪些新的信任边界。

Crypto 专栏:https://blog.csdn.net/r_feynman_/category_13190241.html
Crypto 密码解析实战靶场:https://blog.csdn.net/r_feynman_/category_13194584.html


一、对称密码的前提:双方必须共享同一把密钥

1.1 对称加密的基本模型

设 Alice 希望向 Bob 发送明文 M M M,双方提前共享秘密密钥 K K K。Alice 使用加密算法计算:

C = E K ( M ) C=E_K(M) C=EK(M)

Bob 收到密文 C C C 后,使用同一把密钥解密:

M = D K ( C ) M=D_K(C) M=DK(C)

正确性要求为:

D K ( E K ( M ) ) = M D_K(E_K(M))=M DK(EK(M))=M

攻击者可以截获 C C C,但只要不知道 K K K,就难以恢复 M M M。

对称密码的优势非常明显:

  • 加解密速度快,适合处理大文件和高吞吐网络流量;
  • 密钥和分组尺寸较小,工程实现成熟;
  • AES-GCM、ChaCha20-Poly1305 等方案可以同时提供机密性与完整性;
  • 软硬件生态完善,适合服务器、终端和嵌入式设备。

但整个模型隐藏了一个前提:

Alice 与 Bob 已经安全地获得同一个 K \text{Alice 与 Bob 已经安全地获得同一个 }K Alice 与 Bob 已经安全地获得同一个 K

加密算法只负责"如何使用密钥",并不自动回答"密钥从哪里来"。


1.2 为什么不能直接把密钥发过去

假设 Alice 直接通过网络发送:

text 复制代码
K = 7f9a...3c21

攻击者 Mallory 如果能够监听链路,就能同时得到密钥和后续密文。此时再强的对称算法也无法提供保护,因为攻击者拥有合法解密所需的全部信息。

也不能简单地说"先把 K K K 加密再发送"。如果用另一把密钥 K 0 K_0 K0 加密:

C K = E K 0 ( K ) C_K=E_{K_0}(K) CK=EK0(K)

问题只是被向前推了一步:Alice 和 Bob 又该怎样安全共享 K 0 K_0 K0?如果继续用 K 1 K_1 K1 加密 K 0 K_0 K0,就会形成没有起点的循环。

这可以称为密钥分发中的"启动悖论":

建立安全信道需要共享密钥,但发送共享密钥又需要一条已经安全的信道。


1.3 密钥必须保密,还必须确认属于谁

密钥分发不仅要防止窃听,还要解决身份问题。Alice 需要确认自己拿到的是 Bob 的密钥,而不是攻击者替换后的密钥。

因此,一个完整的密钥建立过程至少要回答:

  1. 密钥是否对攻击者保密;
  2. 密钥是否真的与预期通信对象绑定;
  3. 密钥是否新鲜,而不是旧会话密钥的重放;
  4. 密钥是否只用于规定的算法和协议;
  5. 密钥泄露后能否轮换,历史通信是否仍然安全。

这说明密钥分发从来不只是"传输一串随机字节",它同时涉及保密性、身份认证、完整性和生命周期管理。


二、用户数量增加后,密钥数量为什么会失控

2.1 两个用户只需要一把共享密钥

只有 Alice 和 Bob 两名用户时,可以在线下见面,将随机密钥写入双方设备:

K A B = K B A K_{AB}=K_{BA} KAB=KBA

只要密钥没有泄露,两人就能安全通信。对于单个封闭系统,这种预共享密钥方式并没有问题。


2.2 n n n 个用户需要多少把密钥

如果任意两个用户之间都使用独立共享密钥,那么 n n n 个用户组成的系统需要:

N = ( n 2 ) N=\binom{n}{2} N=(2n)

展开为:

N = n ( n − 1 ) 2 N=\frac{n(n-1)}{2} N=2n(n−1)

例如:

用户数量 n n n 两两独立共享密钥数量
2 1
10 45
100 4 950
1 000 499 500
10 000 49 995 000

当 n = 10   000 n=10\,000 n=10000 时,系统需要管理接近五千万组共享密钥。这里还没有计算备份、轮换、吊销、审计和设备丢失带来的额外成本。

密钥数量的增长速度约为:

N = O ( n 2 ) N=O(n^2) N=O(n2)

这就是纯粹依赖两两预共享密钥难以支撑开放互联网的直接原因。


2.3 每个用户需要保存多少密钥

在两两独立密钥模型中,每个用户需要保存与其他所有用户的共享密钥:

n − 1 n-1 n−1

如果某个用户设备被攻破,攻击者就可能获得该用户与所有其他用户之间的密钥。若系统没有明确的密钥标识和用途隔离,还可能出现一把密钥跨协议复用的问题。


2.4 群组共享一把密钥也不是理想修复

为了减少密钥数量,可以让所有用户共享同一个群组密钥:

K 1 = K 2 = ⋯ = K n = K G K_1=K_2=\cdots=K_n=K_G K1=K2=⋯=Kn=KG

这样只需要管理一把密钥,但任何一名成员都能解密其他成员的通信,也能伪造群组内其他成员发送的消息。一旦某个终端泄露,整个群组都必须更换密钥。

所以"密钥少"不一定代表系统更安全。密钥隔离程度、用户身份和泄露影响范围同样重要。


三、公钥密码出现之前,密钥是怎样分发的

3.1 线下或带外分发

最直接的方法是通过可信人员、专用设备、纸质密钥本或物理介质传递密钥。军事、外交和高安全封闭网络长期使用过类似方式。

它的优点是安全边界直观:攻击者必须介入物理交付过程。缺点也很明显:成本高、速度慢、跨地域困难,而且大规模用户系统很难频繁轮换。

这类方法今天仍然存在,例如设备出厂时预置根密钥、管理员线下写入恢复密钥、双方当面核对密钥指纹。公钥密码并没有让带外信任完全消失,而是减少了必须秘密传输的数据规模。


3.2 密钥分发中心 KDC

另一种思路是引入所有用户共同信任的密钥分发中心(Key Distribution Center,KDC)。每个用户只与 KDC 共享一把长期密钥。

Alice 与 KDC 共享:

K A K_A KA

Bob 与 KDC 共享:

K B K_B KB

当 Alice 要与 Bob 通信时,KDC 生成会话密钥 K A B K_{AB} KAB,分别使用 K A K_A KA 和 K B K_B KB 加密后发送给双方:

C A = E K A ( K A B ) C_A=E_{K_A}(K_{AB}) CA=EKA(KAB)

C B = E K B ( K A B ) C_B=E_{K_B}(K_{AB}) CB=EKB(KAB)

Alice 解密 C A C_A CA,Bob 解密 C B C_B CB,最终得到同一把会话密钥。

这种结构把密钥数量从两两关系压缩为每个用户与中心的一条关系。系统只需要管理大约 n n n 份长期用户密钥,而不是 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2 份两两密钥。


3.3 中心化方案的新问题

KDC 缓解了密钥数量问题,却引入了集中式信任:

  • KDC 被攻破可能影响整个系统;
  • KDC 不可用时,用户可能无法建立新会话;
  • 用户必须先安全获得与 KDC 的长期密钥;
  • 跨组织通信需要解决多个信任域之间的协作;
  • KDC 可能知道或参与生成大量会话密钥。

Kerberos 等系统证明 KDC 模型在组织内部非常实用,但它仍然不适合作为整个开放互联网唯一的密钥分发方式。


四、公钥密码的关键突破:公开加密密钥

4.1 一对密钥承担不同职责

公钥密码为每个用户生成一对相关但用途不同的密钥:

( p k , s k ) ← KeyGen ⁡ ( 1 λ ) (pk,sk)\leftarrow\operatorname{KeyGen}(1^\lambda) (pk,sk)←KeyGen(1λ)

其中:

  • p k pk pk:公钥,可以公开传播;
  • s k sk sk:私钥,只能由持有者秘密保存;
  • λ \lambda λ:安全参数。

公钥加密的基本接口为:

C ← Enc ⁡ ( p k , M ) C\leftarrow\operatorname{Enc}(pk,M) C←Enc(pk,M)

M ← Dec ⁡ ( s k , C ) M\leftarrow\operatorname{Dec}(sk,C) M←Dec(sk,C)

正确性要求:

Dec ⁡ ( s k , Enc ⁡ ( p k , M ) ) = M \operatorname{Dec}(sk,\operatorname{Enc}(pk,M))=M Dec(sk,Enc(pk,M))=M

任何人都可以拿 Bob 的公钥加密消息,但只有持有 Bob 私钥的一方能够解密。


4.2 公钥为什么可以公开

公钥和私钥之间存在数学联系,但方案的设计目标是让攻击者难以根据公钥恢复私钥。传统公钥密码依赖不同数学难题,例如:

  • RSA:大整数分解及相关问题;
  • Diffie-Hellman:有限域离散对数;
  • ECC:椭圆曲线离散对数;
  • 后量子 KEM:格、编码等新型困难问题。

公钥并不是"泄露了一半私钥",而是算法主动公开的计算入口。安全性依赖的是:从公钥执行加密或验证容易,从公钥反推出私钥或伪造结果困难。


4.3 密钥数量从平方级降到线性级

在公钥体系中,每个用户只需要维护自己的一对密钥:

( p k i , s k i ) (pk_i,sk_i) (pki,ski)

n n n 个用户大约需要 n n n 对密钥:

N k e y p a i r = n N_{keypair}=n Nkeypair=n

不再需要为每一对用户预先准备独立共享密钥。Alice 只要获得 Bob 的公钥,就可以开始加密或建立共享密钥。

这并不表示公钥密码让密钥管理消失了,而是把问题从:

如何秘密地给每一对用户分发共享密钥?

转化为:

如何可靠地确认某个公开密钥确实属于目标用户?

前一个问题主要是保密分发,后一个问题则是公开密钥的身份认证。


五、一个完整的公钥加密通信过程

5.1 Bob 生成密钥对

Bob 本地生成公私钥:

( p k B , s k B ) ← KeyGen ⁡ ( 1 λ ) (pk_B,sk_B)\leftarrow\operatorname{KeyGen}(1^\lambda) (pkB,skB)←KeyGen(1λ)

他公开 p k B pk_B pkB,严格保护 s k B sk_B skB。


5.2 Alice 使用 Bob 的公钥加密

Alice 获得 p k B pk_B pkB 后,计算:

C = Enc ⁡ ( p k B , M ; r ) C=\operatorname{Enc}(pk_B,M;r) C=Enc(pkB,M;r)

其中 r r r 表示加密过程中使用的随机性。现代公钥加密通常必须是随机化的:即使明文和公钥相同,不同随机数也应产生不同密文。

Enc ⁡ ( p k , M ; r 1 ) ≠ Enc ⁡ ( p k , M ; r 2 ) \operatorname{Enc}(pk,M;r_1)\ne\operatorname{Enc}(pk,M;r_2) Enc(pk,M;r1)=Enc(pk,M;r2)

如果加密是完全确定性的,相同消息会产生相同密文,攻击者可以进行字典测试和重复模式分析。


5.3 Bob 使用私钥解密

Bob 收到密文后计算:

M = Dec ⁡ ( s k B , C ) M=\operatorname{Dec}(sk_B,C) M=Dec(skB,C)

攻击者即使知道算法、Bob 的公钥和密文,也不应有能力恢复明文。


5.4 这个流程还缺少身份认证

如果 Alice 获取的公钥并不是真正的 p k B pk_B pkB,而是攻击者 Mallory 替换后的 p k M pk_M pkM,Alice 会执行:

C = Enc ⁡ ( p k M , M ) C=\operatorname{Enc}(pk_M,M) C=Enc(pkM,M)

Mallory 可以使用自己的私钥解密,再用 Bob 的真实公钥重新加密后转发。Bob 可能完全不知道通信曾被中间人读取。

因此,公钥可以公开,并不代表可以从任何地方无条件下载。公钥分发不要求保密,但必须保证真实性和完整性。


六、中间人攻击:公钥密码没有自动解决信任

6.1 攻击过程

假设 Alice 请求 Bob 的公钥,Mallory 控制了网络:

  1. Bob 向 Alice 发送 p k B pk_B pkB;
  2. Mallory 截获并替换成 p k M pk_M pkM;
  3. Alice 误以为 p k M pk_M pkM 属于 Bob;
  4. Alice 使用 p k M pk_M pkM 加密消息;
  5. Mallory 使用 s k M sk_M skM 解密;
  6. Mallory再用 p k B pk_B pkB 加密并转发给 Bob。

双方都在使用正确的公钥密码算法,但身份绑定错误,整个通信仍然不安全。


6.2 公钥需要认证

常见的公钥认证方式包括:

  • 当面或通过独立信道核对公钥指纹;
  • 使用数字证书和公钥基础设施 PKI;
  • 使用已经信任的密钥对新密钥签名;
  • 在应用中预置可信根公钥;
  • 首次使用时记录密钥,后续检测变化;
  • 通过 DNSSEC、DANE 等受保护系统绑定公钥。

这些方法的共同目标是建立关系:

身份 ⟷ 公钥 \text{身份}\longleftrightarrow\text{公钥} 身份⟷公钥

公钥密码解决了"密钥可以公开传播"的问题,证书和信任体系解决的是"这个公钥究竟属于谁"。


6.3 证书也不是凭空可信

数字证书通常由认证机构使用签名证明:

Sign ⁡ s k C A ( 身份信息 ∥ p k B ) \operatorname{Sign}{sk{CA}}(\text{身份信息}\mathbin{\|}pk_B) SignskCA(身份信息∥pkB)

客户端使用预置信任的 CA 公钥验证签名。信任并没有消失,而是从"线下给每一对用户分发秘密"变成"预置少量可信根,并沿证书链验证身份"。

这是一种更适合大规模开放系统的信任组织方式,但仍需要证书签发审核、私钥保护、吊销、有效期和域名验证。


七、真实系统为什么仍然使用对称密码

7.1 公钥密码并不适合直接加密大量数据

公钥运算通常比对称加密慢,密钥和密文也更大。某些公钥算法一次能处理的明文长度还受到模数、填充和编码限制。

如果直接用公钥算法加密大文件,不但效率低,还容易误用填充、分块和完整性保护。因此真实协议通常采用混合加密

  1. 使用公钥密码建立或封装一个随机会话密钥;
  2. 使用对称 AEAD 加密业务数据。

7.2 混合加密的基本模型

发送方先生成随机会话密钥:

K s ← { 0 , 1 } κ K_s\leftarrow\{0,1\}^{\kappa} Ks←{0,1}κ

然后使用接收方公钥保护 K s K_s Ks:

C K = Enc ⁡ ( p k B , K s ) C_K=\operatorname{Enc}(pk_B,K_s) CK=Enc(pkB,Ks)

再使用 K s K_s Ks 加密正文:

( C , T ) = AEAD.Enc ⁡ ( K s , N , A , M ) (C,T)=\operatorname{AEAD.Enc}(K_s,N,A,M) (C,T)=AEAD.Enc(Ks,N,A,M)

发送:

( C K , N , A , C , T ) (C_K,N,A,C,T) (CK,N,A,C,T)

接收方先用私钥恢复 K s K_s Ks,再验证并解密正文。

现代协议更常使用 KEM 表达第一步:

( C K , K s ) = Encaps ⁡ ( p k B ) (C_K,K_s)=\operatorname{Encaps}(pk_B) (CK,Ks)=Encaps(pkB)

K s ′ = Decaps ⁡ ( s k B , C K ) K_s'=\operatorname{Decaps}(sk_B,C_K) Ks′=Decaps(skB,CK)

之后仍然交给 AEAD 处理大量数据。


7.3 两类密码不是替代关系

比较维度 对称密码 公钥密码
密钥结构 通信双方共享同一秘密 公钥公开、私钥保密
主要优势 速度快、适合大量数据 解决开放环境中的密钥建立与签名
主要难题 初始密钥如何安全共享 公钥如何认证、私钥如何保护
常见用途 数据加密、AEAD、存储加密 KEM、密钥交换、数字签名、证书
典型算法 AES、SM4、ChaCha20 RSA、DH、ECC、后量子 KEM/签名

现代安全协议通常不是"对称密码或公钥密码二选一",而是让公钥密码负责建立信任和会话密钥,让对称密码负责保护实际数据。


八、密钥交换、公钥加密与 KEM 的区别

8.1 公钥加密

公钥加密由发送方选择消息,并使用接收方公钥产生密文:

C = Enc ⁡ ( p k B , M ) C=\operatorname{Enc}(pk_B,M) C=Enc(pkB,M)

典型用途是加密短消息或会话密钥,但现代协议必须搭配安全填充和主动攻击防护。


8.2 密钥交换

密钥交换让双方各自贡献秘密材料,最后计算同一共享密钥。抽象地表示:

K A = KeyExchange ⁡ ( a , P K B ) K_A=\operatorname{KeyExchange}(a,PK_B) KA=KeyExchange(a,PKB)

K B = KeyExchange ⁡ ( b , P K A ) K_B=\operatorname{KeyExchange}(b,PK_A) KB=KeyExchange(b,PKA)

并满足:

K A = K B K_A=K_B KA=KB

Diffie-Hellman 和 ECDH 属于典型密钥交换机制。它们本身通常不认证身份,仍然需要签名、证书或预共享密钥防止中间人攻击。


8.3 KEM

KEM 专门封装随机共享密钥,而不是直接加密任意业务明文。其接口更适合现代协议和后量子密码:

( c , K ) = Encaps ⁡ ( p k ) (c,K)=\operatorname{Encaps}(pk) (c,K)=Encaps(pk)

K ′ = Decaps ⁡ ( s k , c ) K'=\operatorname{Decaps}(sk,c) K′=Decaps(sk,c)

KEM 与 AEAD 组合后形成清晰分工:KEM 建立短期密钥,AEAD 保护业务消息。


九、密钥分发问题最终变成了什么

9.1 从秘密运输转向公开认证

在纯对称体系中,主要问题是:

如何秘密发送 K \text{如何秘密发送 }K 如何秘密发送 K

在公钥体系中,公钥不需要保密,问题转化为:

如何确认 p k 属于正确的人 \text{如何确认 }pk\text{ 属于正确的人} 如何确认 pk 属于正确的人

这是一次重要转变。公开信息可以通过缓存、目录服务、证书和网络传播,系统不再需要为每一对陌生用户秘密运送一把共享密钥。


9.2 私钥成为新的核心资产

公钥可以公开,但私钥一旦泄露,攻击者可能解密消息、冒充身份或伪造签名。因此私钥需要:

  • 使用密码学安全随机源生成;
  • 在受控存储、HSM 或安全芯片中保护;
  • 设置用途和权限边界;
  • 支持轮换、吊销和备份恢复;
  • 避免进入日志、错误信息和内存转储;
  • 对高价值操作实施审计和多方控制。

公钥密码没有消除秘密,只是让每个用户主要保护自己的私钥,而不必与所有通信对象分别共享长期秘密。


9.3 长期私钥泄露与前向安全

如果系统直接用长期公钥加密会话密钥,攻击者保存历史密文,并在未来获得长期私钥,可能解密过去的通信。

具有前向安全性的协议会使用临时密钥交换材料,让长期身份密钥泄露后,历史会话密钥仍然难以恢复。可以把目标抽象为:

泄露长期私钥 ⇏ 恢复历史会话密钥 \text{泄露长期私钥}\not\Rightarrow\text{恢复历史会话密钥} 泄露长期私钥⇒恢复历史会话密钥

因此,现代协议不仅要问"当前密钥是否安全",还要问密钥泄露会影响过去、现在还是未来哪些数据。


十、常见误区

10.1 公钥公开,所以从哪里下载都一样

错误。公钥不需要保密,但必须防替换。没有证书、指纹或可信绑定,就可能遭遇中间人攻击。

10.2 公钥密码比对称密码高级,可以完全替代 AES

错误。公钥密码解决密钥建立、身份认证和签名,对称密码负责高效保护大量数据。现代协议通常组合使用二者。

10.3 使用公钥加密就自动具备身份认证

错误。任何人都能使用 Bob 的公钥加密。密文只能说明"设计上只有 Bob 能解密",不能证明发送者一定是 Alice。

10.4 能解密就说明密文完整

错误。裸公钥加密未必具备抗篡改能力。现代方案需要满足主动攻击下的安全目标,并与 KDF、MAC 或 AEAD 正确组合。

10.5 密钥越长,整个协议就一定越安全

错误。密钥长度只是安全的一部分。随机数、填充、证书验证、密钥用途、错误处理和侧信道中的任意一处错误,都可能绕过底层数学强度。


十一、本文应该记住什么

  1. 对称密码使用同一把密钥完成加解密,前提是通信双方已经安全共享密钥;
  2. 两两预共享密钥的数量为 n ( n − 1 ) / 2 n(n-1)/2 n(n−1)/2,用户规模扩大后会出现平方级管理成本;
  3. KDC 可以把密钥关系集中管理,但会引入中心化信任和单点风险;
  4. 公钥密码允许公钥公开、私钥保密,把问题从"秘密运输密钥"转化为"认证公开密钥";
  5. 未经认证的公钥仍可能被替换,公钥密码本身不会自动阻止中间人攻击;
  6. 真实系统通常采用混合加密:公钥算法或 KEM 建立会话密钥,对称 AEAD 加密业务数据;
  7. 公钥加密、密钥交换、KEM 和数字签名是不同功能,不能混为一谈;
  8. 公钥密码没有消灭信任和秘密,而是重新组织了信任关系和密钥管理方式。

公钥密码真正伟大的地方,并不是让某个公式变得更复杂,而是让两个此前没有共享秘密的人,有机会在开放网络中建立安全通信。

下一篇将进入公钥密码最重要的数学起点之一:单向函数、陷门函数与计算困难性,解释为什么"正向计算容易、逆向计算困难"能够成为公钥密码的基础。

相关推荐
Sagittarius_A*3 天前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
.Peter4 天前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
CodeJourney_J5 天前
网络安全简述-加密技术
网络·安全·密码学
Sagittarius_A*5 天前
后量子密码|前置基础 01|PQC 极简数学:模运算、有限域、多项式环、矩阵、范数与小系数噪声
线性代数·信息安全·矩阵·密码学·量子计算·pqc·后量子密码
要开心吖ZSH6 天前
公钥加密,私钥解密?私钥加密,公钥解密?哪个对?
密码学·aes·sha·rsa·sm2·sm3·签名验签
Sagittarius_A*7 天前
哈希与认证基础(一):哈希函数的安全目标:原像、第二原像与碰撞
算法·安全·信息安全·密码学·哈希算法
Sagittarius_A*8 天前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码
砚凝霜8 天前
软考网络工程师|第 6 章 密码学、哈希、数字签名、数字证书 PKI 完整备考笔记
笔记·密码学·哈希算法
Sagittarius_A*9 天前
后量子密码|通识认知 02|量子威胁核心原理:Shor 算法如何击穿传统公钥密码
算法·信息安全·密码学·量子计算