从数学上考虑,主要是如下几点
1. 模数N的两个素因子p、q之间的距离(差的绝对值)要够大。这是为了防费马因子分解法
2. p-1 和q-1 要有大的素因子,即它们的素因子分解中最小的素数都得够大。这是为了防Pollard p-1 因子分解法、重复加密攻击
4. N的选取应考虑它难以找到二次剩余即x2≡y2 mod N。这是为了防Dixon分解法、二次筛法
从工程上考虑,有以下几点
5. RSA系统生成N不要重复。这是为了防共模攻击恢复明文
6. 不同的N用不同的加密指数e,或不要加密相同的消息,或被加密的多个消息避免有仿射线性关系
7. 避免暴露N的欧拉函数值。不然解一元二次方程可得到p、q
8. 随机填充。给明文按一定规则填充随机串后加密,一定程度上可抗击选择明文与选择密文攻击
进一步提升安全性的考虑
密钥生成KeyGen(κ):
(N, e, d) ← GenRSA(κ);
pk = (N, e), sk = (N, d)
加密过程Epk (M)、解密过程Dsk (C1, C2):
与抗攻击的安全性有关
H:抗碰撞哈希函数
为抗选择明文攻击,利用H来改造
Epk(M):
r ←R ZN*
输出(re mod N,H(r)⊕M)
Dsk (C1, C2):
r = C1d mod N
输出H(r)⊕C2
为抗选择密文攻击(攻击利用RSA的乘法同态性),利用H与IND-CCA安全的私钥加密方案<PrivGen, Enc, Dec>来改造:
Epk (M):
r ←R ZN*
h = H(r)
输出(re mod N,Ench (M))
Dsk (C1, C2):
r = C1d mod N
h = H(r)
输出Dech(C2)
以上改造后的两种RSA方案,是可证明安全的。但第一种不支持IND-CCA
posted on 2026-03-17 23:03
春秋十二月 阅读(9)
评论(0) 编辑 收藏 引用 所属分类:
Cryptography