1. 引言

在密码学中,我们并不总是以“破译密文”为目标。有时候,我们的目标是通过已知的明文和对应的密文来推测出加密所用的密钥。这种攻击方式被称为 明文攻击(Plaintext Attack)

明文攻击根据攻击者掌握的明文与密文对的来源不同,可以进一步细分为两类:

  • 已知明文攻击(Known-Plaintext Attack)
  • 选择明文攻击(Chosen-Plaintext Attack)

本文将从原理、差异和实际案例出发,对比这两种攻击方式。


2. 明文攻击的分类

2.1 已知明文攻击

定义:攻击者拥有若干组明文和对应的密文对,但无法选择明文内容。

适用场景:比如历史通信中泄露的明文和加密记录。

攻击目标:通过分析已有明密文对,尝试恢复密钥或推测加密算法结构。


2.2 选择明文攻击

定义:攻击者可以主动选择任意明文进行加密,并获得对应的密文。

适用场景:攻击者能访问加密系统(如一个加密API),可以自由发送明文并观察输出。

攻击目标:通过控制输入明文观察输出密文的变化,推测密钥或算法结构。


3. 关键区别总结

特征 已知明文攻击 选择明文攻击
是否能选择明文
是否能主动加密
所需信息 已有明文 + 密文 可自由构造明文
攻击难度 较高 相对较低
实用性 适用于历史数据泄露 适用于系统被入侵或存在加密接口

⚠️ 注意:选择明文攻击通常比已知明文攻击更强大,因为它允许攻击者构造特定输入以探测加密机制。


4. 已知明文攻击示例:XOR 加密

我们以 XOR 加密为例说明攻击过程。

假设条件:

  • 加密公式:密文 = 明文 XOR 密钥
  • 已知明文:11111111
  • 对应密文:01010101

攻击过程:

由于 XOR 的性质:

密钥 = 明文 XOR 密文

代入已知值:

密钥 = 11111111 XOR 01010101 = 10101010

结果:直接恢复出密钥 10101010

⚠️ 踩坑提醒:XOR 加密非常脆弱,一旦知道一对明文/密文,即可直接恢复密钥。实际系统中应避免使用这种简单加密方式。


5. 选择明文攻击示例:探测加密算法结构

假设条件:

  • 不知道加密算法,但可以发送任意明文并获取密文。
  • 尝试构造多个明文,并观察密文变化。

示例数据:

明文 密文
11111111 01010101
11111110 01010100
11111101 01010111
11111011 01010001
11110111 01011101
11101111 01000101
11011111 01110101
10111111 00010101
01111111 11010101

分析:

  • 每次只改变一个 bit,密文也只改变一个 bit。
  • 变化规律一致:明文 bit 变化时,密文 bit 也相应变化。
  • 推测加密过程是逐位操作(如 XOR)。

结论:加密算法很可能是位运算类算法(如 XOR、AND、OR 等),且没有扩散机制(如 AES 中的 MixColumns)。

⚠️ 应用场景:在密码哈希中,若密码未加盐(salt),攻击者可通过密文相似度推测原始密码结构。


6. 小结

攻击类型 是否可控输入 攻击难度 适用场景
已知明文攻击 数据泄露、历史通信分析
选择明文攻击 系统入侵、加密接口探测

总结要点

  • 已知明文攻击依赖已有数据,适用于历史泄露场景;
  • 选择明文攻击更强大,可主动构造输入探测加密逻辑;
  • XOR 加密容易被这两种攻击破解;
  • 实际加密系统应具备抗明文攻击能力,例如使用 AES 等现代算法,并结合随机初始化向量(IV)和密钥派生机制。

作者邮箱security_expert@example.com
参考来源:Baeldung Cryptography 系列文章
适用读者:中级以上安全/开发人员,理解加密基础概念


原始标题:Cryptography: Known-Plaintext Attack vs. Chosen-Plaintext Attack