🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
回顾上面的密钥生成步骤,一共出现六个数字: >   p >   q >   n >   φ(n) >   e >   d 这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。 那么,有无可能在已知n和e的情况下,推导出d? >   (1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。 > >   (2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。 > >   (3)n=pq。只有将n因数分解,才能算出p和q。 结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。 可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。维基百科这样写道: >   "对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。 > >   假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。 > >   只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。" 举例来说,你可以对3233进行因数分解(61×53),但是你没法对下面这个整数进行因数分解。 >   12301866845301177551304949 >   58384962720772853569595334 >   79219732245215172640050726 >   36575187452021997864693899 >   56474942774063845925192557 >   32630345373154826850791702 >   61221429134616704292143116 >   02221240479274737794080665 >   351419597459856902143413 它等于这样两个质数的乘积: >   33478071698956898786044169 >   84821269081770479498371376 >   85689124313889828837938780 >   02287614711652531743087737 >   814467999489 >     × >   36746043666799590428244633 >   79962795263227915816434308 >   76426760322838157396665112 >   79233373417143396810270092 >   798736308917 事实上,这大概是人类已经分解的最大整数(232个十进制位,768个二进制位)。比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。