Cryptology Academy · 课时

OAEP:最优非对称加密填充

逐步学习 OAEP 编码,以及它如何实现 IND-CCA2 安全性

第 3 / 4 课13 个步骤

OAEP:最优非对称加密填充 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

欢迎

OAEP(最优非对称加密填充)为 RSA 加密提供可证明的 IND-CCA2 安全性。它使用随机编码,使预言机查询在密码学上失去价值。

OAEP 目标

OAEP 由贝拉雷和罗加韦于 1994 年设计,目标有两个:(1)通过随机化防止所有教科书式 RSA 攻击;(2)在随机预言机模型中通过形式化安全证明实现 IND-CCA2 安全性。

OAEP 输入

M:要加密的消息(|M| ≤ |n| - 2*hLen - 2 字节) L:可选标签(通常为空) MGF:掩码生成函数(基于 SHA-256) r:随机种子(hLen 字节)

OAEP 编码步骤 1:数据块

DB = lHash || PS || 0x01 || M 其中: - lHash = Hash(L)(标签的哈希值) - PS = 用于填充到固定长度的零字节 - 0x01 标记消息的起始位置

OAEP 编码步骤 2:掩码

maskedDB = DB XOR MGF(r, len(DB)) maskedSeed = r XOR MGF(maskedDB, hLen) EM = 0x00 || maskedSeed || maskedDB 这是输入 RSA 加密的填充消息。

MGF1:掩码生成函数

MGF1(Z, L) = Hash(Z || 0x00000000) || Hash(Z || 0x00000001) || ... 使用 SHA-256 的 MGF1 可以根据种子生成任意长度的伪随机输出。它用于 OAEP 和 RSA-PSS。

OAEP 解码

给定 EM: 1. 将其拆分为 maskedSeed 和 maskedDB 2. r = maskedSeed XOR MGF(maskedDB, hLen) 3. DB = maskedDB XOR MGF(r, len(DB)) 4. 验证 lHash 是否匹配;找到 0x01 分隔符;提取 M 5. 出现任何错误 → 解密失败(始终返回相同的错误)

为什么 OAEP 能抵御预言机攻击

OAEP 的随机种子 r 会在每次加密时改变。修改后的密文以压倒性概率解码为均匀随机的填充消息。对于所有修改,预言机都会看到“无效”。

IND-CCA2 安全性

IND-CCA2(选择密文攻击 2 下的不可区分性):即使能够访问解密预言机,对除挑战密文之外的所有密文进行解密,攻击者也无法区分 Enc(M0) 和 Enc(M1)。OAEP 实现了这一安全性。

OAEP 与 v1.5 的实际使用

Python 密码学库:使用 padding.OAEP(),不要使用 padding.PKCS1v15()。Java:使用 'RSA/ECB/OAEPWithSHA-256AndMGF1Padding' 密码算法。新代码切勿使用 'RSA/ECB/PKCS1Padding'。

OAEP 最大消息大小

对于使用 SHA-256 的 RSA-2048: 最大消息大小 = 256 - 2×32 - 2 = 190 字节 OAEP 的开销为 2×hLen + 2 字节。对于更长的消息,请使用 AES 混合加密:使用 OAEP 加密 AES 密钥,使用 AES-GCM 加密数据。

快速检查

OAEP 的什么性质使其能够抵抗填充预言机攻击?

回顾

OAEP 为 RSA 加密提供了可证明的安全性。接下来我们将研究 RSA-PSS——RSA 签名的对应改进方案。
免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「OAEP:最优非对称加密填充」课时是免费的吗?

是的 — 「OAEP:最优非对称加密填充」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「OAEP:最优非对称加密填充」这节课中我会学到什么?

逐步学习 OAEP 编码,以及它如何实现 IND-CCA2 安全性 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「OAEP:最优非对称加密填充」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 教科书式 RSA 及其不安全原因
  2. PKCS#1 v1.5 填充与 Bleichenbacher 攻击
  3. OAEP:最优非对称加密填充
  4. 用于数字签名的 RSA-PSS
← 返回 Cryptology Academy