公钥加密技术详解:从RSA到OAEP
1. 填充RSA与PKCS #1 v1.5
虽然普通RSA加密并不安全,但它为基于RSA问题的公钥加密提供了一种通用思路。即使用公钥 ⟨N, e⟩ 加密消息 m 时,先将 m 映射到元素 ˆm ∈Z∗N,然后计算密文 c := [ ˆme mod N]。接收方解密时,先计算 ˆm := [cd mod N],再恢复原始消息 m。为了让接收方能够恢复消息,从消息到 Z∗N 元素的映射必须是(高效)可逆的。若要使基于此方法的加密方案具备选择明文攻击(CPA)安全性,该映射必须是随机化的,这样加密就不是确定性的。不过,这只是必要条件而非充分条件,加密方案的安全性关键取决于所使用的具体映射。
一种简单的实现方式是在加密前对消息进行随机填充。发送方将消息 m(视为位串)映射到 Z∗N 的元素时,会选择一个均匀的位串 r ∈{0, 1}ℓ(对于某个合适的 ℓ),并设置 ˆm := r∥m,得到的值自然可解释为 Z∗N 中的整数。这种映射显然是可逆的。具体的填充RSA加密方案如下:
- Gen :输入 1n,运行 GenRSA(1n) 得到 (N, e, d),输出公钥 pk = ⟨N, e⟩ 和私钥 sk = ⟨N, d⟩。
- Enc :输入公钥 pk = ⟨N, e⟩ 和消息 m ∈{0, 1}∥N∥−ℓ(n)−1,选择一个均匀的字符串 r ∈{0, 1}ℓ(n),将 ˆm := r∥m 解释为 Z∗N 的元素,输出密文 c := [ ˆme mod N]。
- Dec :输入私钥 sk = ⟨N, d⟩ 和密文 c ∈Z∗N,
订阅专栏 解锁全文
401



被折叠的 条评论
为什么被折叠?



