#计算 c^d mod n
RSA解密与中国剩余定理(CRT)详解
1. c^d mod n 是什么?为什么要计算它?
c^d mod n 是RSA解密的核心操作,用于从密文c恢复明文m。
- RSA加密过程:c = m^e mod n(用公钥(e, n)加密)
- RSA解密过程:m = c^d mod n(用私钥(d, n)解密)
为什么需要计算它?
- 在RSA中,d是e在模φ(n)下的乘法逆元(e*d ≡ 1 mod φ(n))
- 通过这个性质,我们有:Text
编辑
c^d mod n = (m^e)^d mod n = m^(e*d) mod n = m^(1 + k*φ(n)) mod n = m * (m^φ(n))^k mod n ≡ m * 1^k = m mod n (根据欧拉定理)
- 所以,c^d mod n 确实等于原始明文m。
2. 用中国剩余定理(CRT)快速计算 m mod (p*q) 的方法
RSA中,n = p*q,其中p和q是两个大素数。CRT优化的核心思想是将大模数n的计算分解为小模数p和q的计算。
计算步骤:
- 计算模数 n = p * q
- 计算 m_p = c^dp mod p
- 计算 m_q = c^dq mod q
- 计算 p 在模 q 下的逆元:inv_p = p^{-1} mod q(即 p * inv_p ≡ 1 mod q)
- 组合结果:m = (m_p + p * ((m_q - m_p) * inv_p % q)) % n
为什么这样计算?
- 中国剩余定理告诉我们,如果p和q互质,那么:Text
编辑
x ≡ m_p (mod p) x ≡ m_q (mod q)
- 组合公式确保x满足上述两个同余条件。
3. m_p 是什么运算?
m_p = c^dp mod p,它是明文m对p取模的结果,即 m_p = m mod p。
- dp = d mod (p-1),这是RSA CRT优化中的关键参数。
- 通过计算 m_p = c^dp mod p,我们得到了明文m在模p下的值。
4. 为什么 dp = d mod (p-1),所以 c^dp ≡ m mod p?
这个结论基于费马小定理和RSA的数学原理:
- 费马小定理:如果p是素数,且m和p互质,则 m^(p-1) ≡ 1 mod p。
- RSA私钥性质:e*d ≡ 1 mod φ(n),其中φ(n) = (p-1)(q-1)。
推导过程:
因为d是e在模φ(n)下的逆元,所以:
Text
编辑
e*d ≡ 1 mod φ(n)
e*d = 1 + k*φ(n) = 1 + k*(p-1)*(q-1)
现在,计算c^dp mod p:
Text
编辑
c^dp = (m^e)^dp mod p = m^(e*dp) mod p
由于dp = d mod (p-1),所以d = dp + t*(p-1)(t为某个整数),代入得:
Text
编辑
e*dp = e*d - e*t*(p-1)= [1 + k*(p-1)*(q-1)] - e*t*(p-1)= 1 + (p-1)*[k*(q-1) - e*t]
所以:
Text
编辑
m^(e*dp) = m^(1 + (p-1)*[k*(q-1) - e*t])= m * (m^(p-1))^[k*(q-1) - e*t]
根据费马小定理,m^(p-1) ≡ 1 mod p(当m和p互质时),所以:
Text
编辑
m^(e*dp) ≡ m * 1^[k*(q-1) - e*t] = m mod p
因此,c^dp ≡ m mod p。
特殊情况:如果m和p不互质(即p|m),那么m ≡ 0 mod p,所以m^e ≡ 0 mod p,c^dp ≡ 0 ≡ m mod p,同样成立。
5. 为什么使用CRT可以加速RSA解密?
- 标准RSA解密:计算c^d mod n,其中n是2048位或更大的大数。
- CRT优化:计算c^dp mod p和c^dq mod q,其中p和q是n的一半大小(1024位左右)。
加速原理:
- 模数p和q比n小一半,所以模幂运算的复杂度降低。
- 模幂运算的复杂度与模数的位数成正比,因此CRT将计算量减少到标准方法的1/4。
- 实际上,使用CRT的RSA解密速度比标准方法快约4倍。
通俗总结
操作 | 说明 | 为什么 |
---|---|---|
c^d mod n | RSA解密的核心操作 | 从密文c恢复明文m |
m_p = c^dp mod p | 明文m对p取模的结果 | 通过费马小定理,快速计算m mod p |
CRT组合 | 将m_p和m_q组合成m | 中国剩余定理保证在模n下唯一解 |
关键点:
- 不需要知道公钥e,只需要dp和dq(它们是d的优化参数)
- 中国剩余定理(CRT)是RSA解密的常用优化方法
- 这种优化让RSA在实际应用中变得实用,因为直接计算c^d mod n太慢
通过这种方式,RSA解密可以高效地进行,即使n非常大(如2048位)。这就是为什么在RSA实现中,私钥通常存储dp和dq而不是d,因为它们可以用于CRT优化,提高解密速度。