RSA密钥生成的简单后门
1. 引言
RSA公钥密码系统和数字签名方案如今已进入公共领域,任何人都能将其用于软件产品、智能卡等,以保障信息的机密性和真实性。然而,用户如何判断所使用的RSA实现是否安全呢?比如微软CryptoAPI系统曾出现的“NSA - KEY”事件。软件开发人员和智能卡制造商很容易在RSA密钥生成方案中嵌入后门,而用户却难以察觉,这会使他们能够破坏RSA公钥密码系统和数字签名方案的机密性和真实性。
本文介绍了在RSA密钥生成方案中嵌入后门的极其简单的方法。其中三种方案会生成两个指定大小的真正随机素数p和q,得到公钥乘积n = pq,同时生成的公私钥指数对(d, e)看似随机,但方案的设计者仅根据公共信息(n, e)就能轻松分解n。第四种方案类似于Young和Yung的PAP方法,但更安全,能适用于任意公钥指数e,如3、17、65537,它通过在n的表示中嵌入后门来实现对n的分解。
这些方法对标准密钥生成过程的运行时间影响很小,从时间角度几乎难以察觉。并且推测,带后门的密钥分布方式使得即使有大量样本,也难以与真正的随机密钥区分开来。方案不依赖生成算法对之前执行的记忆,假设算法在无记忆设备上运行,排除了基于伪随机生成的简单方法。
2. 回顾与相关工作
RSA密码系统和数字签名方案基于生成两个大致相等大小的随机素数p和q,以及随机指数d、e,满足de ≡ 1 (mod φ(n)),其中n = pq。
RSA密钥生成算法如下 :
Algorithm 2.1 ( RSA key generation )
1: Pick random primes p, q of the right size, let n := pq be a k-bit integer.
2: repeat
3: Pick a random odd e such that |e| ≤ k.
4: until gcd(e, φ(n)) = 1.
5: Compute d := e−1 mod φ(n).
6: return(p, q, d, e).
公钥对(n, e)可公开,用于加密(me mod n)和解密(cd mod n)消息,私钥函数md mod n可用于生成签名,ce mod n可用于验证签名。
Wiener证明了如果d < n.25/3,小私钥指数可以被有效恢复,Boneh和Durfee最近将此结果改进为d < n.292。并且已知,若有de - 1这样的φ(n)的倍数满足de ≡ 1 (mod φ(n)),就很容易分解n。
Boneh、Durfee和Frankel最近有两个有趣的结果,允许在已知小公钥指数e、n和部分私钥指数d的情况下恢复完整的d。
下面给出两个定理用于构建方案:
-
定理1
:设t是范围在[|n|/4, …, |n|/2]的整数,e是范围在[2t, …, 2t + 1]的素数。若已知(n, e)和d的t个最高有效位,则可以在多项式时间poly(|n|)内计算出完整的d并分解n。
-
定理2
:设t是范围在[1, …, |n|/2]的整数,e是范围在[2t, …, 2t + 1]的整数。若已知(n, e)、d的t个最高有效位和|n|/4个最低有效位,则可以在多项式时间poly(|n|)内分解n。
此外,Rivest和Shamir证明了p的|n|/3个最高有效位足以有效分解n,Coppersmith将所需位数减少到|n|/4。
3. 隐藏指数密钥生成算法
3.1 隐藏小私钥指数δ
“作弊”的RSA - HSDβ密钥生成方案的基础是在方案中嵌入后门β,用于隐藏小私钥指数δ的实例。
RSA - HSDβ密钥生成算法如下 :
Algorithm 3.1 ( RSA-HSDβ key generation )
1: Pick random primes p, q of the appropriate size, set n := pq.
2: repeat
3: Pick a random odd δ such that gcd(δ, φ(n)) = 1 and |δ| ≤ k/4.
4: Compute ϵ := δ−1 mod φ(n); e := πβ(ϵ).
5: until gcd(e, φ(n)) = 1.
6: Compute d := e−1 mod φ(n).
7: return(p, q, d, e).
该算法生成的实例满足所有要求的属性,只是d、e并非完全随机,而是在通过πβ对小指数δ的模φ(n)逆的映射所指定的较小可能性集合内随机。步骤3可通过设置δ := δ / gcd(δ, φ(n))使其不重复,但会使δ的分布偏向较小的值。
在运行时间方面,该算法与标准RSA密钥生成算法2.1相比表现良好。步骤1和6的运行时间与原算法相同,步骤2到5的循环次数与原循环大致相同,循环内的gcd计算次数约为原算法的三倍。只要πβ(ϵ)的计算相对于gcd等计算可忽略不计,运行时间的差异就可以很小。
当n、e公开后,给定秘密后门β,分解n的算法如下 :
Algorithm 3.2 ( RSA-HSDβ attack (n, e) )
1: Given (n, e), compute ϵ := π−1β (e).
2: Compute δ from (n, ϵ) using Wiener’s low exponent attack.
3: Given (ϵ, δ) factor n as p,q.
4: return(p, q).
在攻击时,若使用Boneh - Durfee密码分析攻击而非Wiener攻击,可使用更大的δ值,最大到n0.292。
该方法的主要缺点是生成的e的大小约为|e| ≈ |n|,这意味着对e的大小的任何限制(|e| < c|n|,c < 1)都会使攻击失效。
3.2 隐藏小素数公钥指数ϵ
“作弊”的RSA - HSPEβ密钥生成方案的基础是在方案中嵌入后门β,用于隐藏小素数公钥指数ϵ的实例以及对应私钥指数δ的部分信息。
RSA - HSPEβ密钥生成算法如下 :
Algorithm 3.3 ( RSA-HSPEβ key generation )
1: Pick random primes p, q of the appropriate size, set n := pq.
2: repeat
3: Pick a prime ϵ such that gcd(ϵ, φ(n)) = 1 and |ϵ| = k/4.
4: Compute δ := ϵ−1 mod φ(n); δH := δ⌉k4 ; e := πβ(δH :ϵ).
5: until gcd(e, φ(n)) = 1.
6: Compute d := e−1 mod φ(n).
7: return(p, q, d, e).
该算法生成的实例满足所有要求的属性,只是d、e并非完全随机,而是在通过πβ对小素数公钥指数ϵ的δH和ϵ的拼接的映射所指定的较小可能性集合内随机。生成的拼接(δH : ϵ)大小为k/2,通过额外的随机填充,可以生成范围在√n < e < φ(n)的指数e。
在运行时间方面,该算法与标准RSA密钥生成算法2.1相比表现较差。步骤1和6的运行时间与原算法相同,步骤2到5的循环次数与原循环大致相同,循环内的gcd计算次数约为原算法的三倍(因为ϵ是素数),而且生成素数ϵ比较耗时,尽管|e| = |n|/4。
该方法的主要优点是简单,且生成的密钥大小可以小到|n|/2。
当n、e公开后,给定秘密后门β,分解n的算法如下 :
Algorithm 3.4 ( RSA-HSPEβ attack (n, e) )
1: Given (n, e), compute (δH :ϵ) := π−1β (e).
2: Compute δ from (n, δH, ϵ) using BDF low public prime exponent attack (Theorem 1) with partial knowledge of private exponent.
3: Given (ϵ, δ) factor n as p,q.
4: return(p, q).
3.3 隐藏小公钥指数ϵ
“作弊”的RSA - HSEβ密钥生成方案的基础是在方案中嵌入后门β,用于隐藏小公钥指数ϵ的实例以及对应私钥指数δ的部分信息。
RSA - HSEβ密钥生成算法如下 :
Algorithm 3.5 ( RSA-HSEβ key generation )
1: Pick random primes p, q of the appropriate size, set n := pq.
2: repeat
3: Pick a random ϵ such that gcd(ϵ, φ(n)) = 1 and |ϵ| = t.
4: δ := ϵ−1 mod φ(n); δH := δ⌉t; δL := δ⌋k4 ; e := πβ(δH :δL :ϵ).
5: until gcd(e, φ(n)) = 1.
6: Compute d := e−1 mod φ(n).
7: return(p, q, d, e).
该算法生成的实例满足所有要求的属性,只是d、e并非完全随机,而是在通过πβ对小公钥指数ϵ的δH、δL和ϵ的拼接的映射所指定的较小可能性集合内随机。步骤3可通过设置ϵ := ϵ / gcd(ϵ, φ(n))使其不重复,但会使ϵ的分布偏向较小的值。
为避免被检测,需要对δL的ℓ(ℓ ≥ 2)个最低有效位进行随机化(或丢弃),其中2ℓ|φ(n)且2ℓ + 1̸ | φ(n),因为ϵδ ≡ 1 mod 2ℓ,所以δ⌋ℓ总是ϵ⌋ℓ模2ℓ的逆。同时,δH的最高有效位分布不均匀,最好将δH指定为描述δ相对于n位置的二进制序列。
以下是几种方案的对比表格:
| 方案名称 | 生成的e大小 | 优点 | 缺点 |
| ---- | ---- | ---- | ---- |
| RSA - HSDβ | |e| ≈ |n| | 运行时间与标准算法接近 | 对e大小限制敏感 |
| RSA - HSPEβ | √n < e < φ(n),可小到|n|/2 | 简单,密钥可较小 | 生成素数ϵ耗时 |
| RSA - HSEβ | 灵活 | 可隐藏小公钥指数及部分私钥信息 | 需要处理冗余信息 |
下面是RSA - HSDβ密钥生成和攻击的mermaid流程图:
graph TD;
A[开始] --> B[生成p,q,n];
B --> C[循环选择δ];
C --> D[计算ϵ,e];
D --> E{gcd(e, φ(n)) = 1?};
E -- 否 --> C;
E -- 是 --> F[计算d];
F --> G[返回(p,q,d,e)];
H[已知(n,e)] --> I[计算ϵ];
I --> J[计算δ];
J --> K[分解n];
K --> L[返回(p,q)];
综上所述,这些方案表明,用户不应依赖第三方提供的RSA密钥生成方案。在智能卡模型中尤其如此,除非有保证表明密钥生成过程未被嵌入此类攻击。即使在软件实现中,若没有实际的源代码,也很难确切了解密钥生成机制。软件公司为了市场优势而保密代码,这使得反编译程序以理解其实现变得困难。
RSA密钥生成的简单后门
4. 方案总结与安全建议
上述介绍的几种RSA密钥生成后门方案,各有特点和适用场景。为了更清晰地理解它们,我们可以从多个维度进行总结。
| 方案名称 | 核心思想 | 生成e的特点 | 运行时间 | 攻击方法 | 安全风险 |
|---|---|---|---|---|---|
| RSA - HSDβ | 嵌入后门β隐藏小私钥指数δ | 约为 | e | ≈ | n |
| RSA - HSPEβ | 嵌入后门β隐藏小素数公钥指数ϵ及部分私钥信息 | 可小到 | n | /2 | 生成素数ϵ耗时 |
| RSA - HSEβ | 嵌入后门β隐藏小公钥指数ϵ及部分私钥信息 | 灵活 | 需处理冗余信息 | 依赖已知定理 | 冗余信息可能被检测 |
从这些方案可以看出,攻击者可以通过巧妙的设计,在不显著改变密钥生成过程时间的情况下,嵌入后门,使得仅根据公开信息(n, e)就能分解n。这对使用RSA加密的系统安全构成了严重威胁。
为了应对这些安全风险,我们提出以下建议:
1.
自主实现密钥生成
:尽量自己实现RSA密钥生成算法,避免使用第三方提供的方案。这样可以确保对密钥生成过程的完全控制,减少被嵌入后门的风险。
2.
审查源代码
:如果必须使用第三方的密钥生成代码,一定要审查其源代码。仔细检查代码中是否存在异常的逻辑或隐藏的后门。
3.
增加随机性
:在密钥生成过程中,增加随机性的来源。例如,使用高质量的随机数生成器,确保生成的素数和指数真正随机。
4.
定期更新密钥
:定期更换RSA密钥,减少密钥被破解的风险。即使密钥被嵌入了后门,定期更新也可以降低攻击者利用后门的可能性。
5. 未来研究方向
虽然本文介绍的方案已经展示了RSA密钥生成中存在的安全隐患,但这只是冰山一角。未来的研究可以从以下几个方向展开:
- 更隐蔽的后门设计 :攻击者可能会设计出更加隐蔽的后门,使得在不改变密钥生成过程的任何可观测特征的情况下,仍然能够轻松分解n。研究如何检测和防范这类后门是一个重要的方向。
- 新的攻击方法 :随着数学和密码学的发展,可能会出现新的攻击方法,能够突破现有的安全防线。研究人员需要不断探索新的攻击手段,以便及时发现和修复安全漏洞。
- 增强密钥生成的安全性 :除了上述提到的建议,还可以研究如何从根本上增强RSA密钥生成的安全性。例如,结合其他加密算法或技术,提高密钥的抗攻击能力。
以下是未来研究方向的mermaid流程图:
graph LR;
A[更隐蔽的后门设计] --> B[检测和防范研究];
C[新的攻击方法] --> D[发现和修复漏洞];
E[增强密钥生成安全性] --> F[结合其他技术];
B --> G[提高系统安全性];
D --> G;
F --> G;
总之,RSA密钥生成的安全性是一个复杂而重要的问题。我们需要不断关注和研究,采取有效的措施来保护用户的信息安全。在使用RSA加密时,要保持警惕,不轻易相信第三方提供的密钥生成方案,确保自己的数据得到可靠的保护。
希望通过本文的介绍,能够让大家对RSA密钥生成的安全问题有更深入的了解,从而在实际应用中做出更明智的选择。
超级会员免费看
321

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



