平方逼近法分解RSA
上文RSA破解中提到一种方法为平方逼近法破解RSA,本文针对平方逼近法进行讨论。
平方逼近法
传统平方逼近法使用的实际上平方差公式。若一个数字可以表示成 n = p × q n=p\times q n=p×q,那么根据平方差公式,一定可以表示为 n = ( p + q 2 ) 2 − ( p − q 2 ) 2 n = \displaystyle(\frac{p+q}{2})^2-(\frac{p-q}2)^2 n=(2p+q)2−(2p−q)2的形式。根据上式的规则 ,我们可也要判断出 ( p + q 2 ) 2 ≥ n \displaystyle(\frac{p+q}{2})^2\ge n (2p+q)2≥n。也正是这种原因,我们可以从 n \sqrt{n} n开始测试,直到计算出符合上式的平方差数字。
传统平方逼近法
针对RSA中的模数 n n n进行传统平方逼近法进行分解。我们使用以下流程方式:
- 计算出初始值数 s s s,该值以计算的初始值,其值为 n \sqrt{n} n且为整数。
- 计算初始值 s s s的平方与 n n n的差, t = s 2 − n t = s^2 - n t=s2−n
- 检查计算结果 t t t是否为平方数,若不为平方数则 s s s增加1,返回2计算。
- 若 t t t为平方数,计算出 t t t的开方数 t 1 = t t^1 = \sqrt{t} t1=t。
- 事实上此时求出的 s s s是两因素数之和的一半,而 t 1 t^1 t1则是两因素之差的一半。可以顺利求出 p = s + t 1 p = s+t^1 p=s+t1, q = s − t 1 q=s-t^1 q=s−t1。
传统的平方逼近法要测试的数值个数,也是计算的时间代价为 p + q 2 − n \displaystyle\frac{p+q}2-\sqrt{n} 2p+q−n。
事实上,为了防止这种传统的平方逼法,在RSA体系生成超大素数时,其两者的差进行了一定的控制。也就是两个数字不可能过近,从而增加了破解的难度。
在实际使用中的RSA的1024bit类型中,该值基本上接近 2 512 2^{512} 2512。换句话来说,计算这个的时间长度很长,按每秒计算 2 20 2^{20} 220测试,该时间仍然是上亿年。
改进平方逼近法
根据欧拉定理,我们可以对传统的平方逼近法进行改进,使其计算速度上进行提升,同时减少计算的时间代价。
根据欧拉定理,我们知道 a φ ( n ) ≡ 1 m o d n a^{\varphi(n)}\equiv1\mod n aφ(n)≡1modn
这个定理我们少加推论, a φ ( n ) 2 ≡ 1 m o d n \displaystyle a^{\frac{\varphi(n)}2}\equiv1\mod n