RSA简介:
取一个大数 n=p*q,p,q为大素数.
设n的欧拉函数为 f(n) = (p-1)(q-1);
则取一个公钥为e,相应密钥为d.
ed + x * f(n) = 1
要求: e*d = 1 (mod f(n))
原文为m:
密文为c = m^e (mod n)
因为: m ^ f(n) = 1 (mod n)
解密: c^d = m^(e*d) = m*( (m^f(n)) ^(-x)) (mod n)
破密:
1,因子分解法:
破解意向:若知道 p-1 , q-1 ,就知道了 f(n), 则就很容易破解了.
由于 p*q = n, p+q = n - f(n) +1
p,q 是 x^2 + (f(n)-n-1)x + n = 0 的根.
进而只要试出n的因子分解,就可以破解,因此n的分子分解决定了安全性.
如:
当p 和 q 很接近时,
因为 n = p*q = ((p + q)/2)^2 - ((p - q)/2)^2
当 (p - q)/2 接近于 0 时 , t = (p + q)/2 接近于 n^(1/2)
只要枚举大于 n^(1/2) 的 t 很快就可以找出满足
t^2 - n 为平方数的 t
使得 t^2 - n = s^2
则 n = (t+s) * (t-s)
至此就求出了 p 和 q.
2,阶乘法
意向:
黑客可能会利用阶乘法不断地递增 t 来求出 m 如:
因为 c^(e^t) = c (mod n), 就有 c^(e^(t-1)) = m (mod n)
而 c^(e^(t-1)) = m (mod n) 就是 m^(e^t) = m (mod n)
即 n | ( m^(e^t -1) - 1 )
若 m mod n 的阶为k,则
e^t = 1 (mod k)
取 t 的最小值就是 e mod k 的阶,
而 e mod k 的阶,是 f(k) 在因子,又 k 是 m mod n 阶,
即 k 是 f(n) 的因子,求出 k 就容易破解了.
所以 最好使 f(n) 中的两个因子 p-1 , q-1 ,它们的因子中出现的素因子都要为大素数因子,
才能不容易被破解.