一 RSA与质数
问:
随着越来越多的人在不断地生成RSA的密钥对,质数会不会被用光呢?
答:
不需要担心。
512比特能够容纳的质数数量大约为10的150次方,这个数量比整个宇宙中的原子的数量还要多。
我们假设地球上有100亿人,每个人每秒生成100亿个密钥对,那么在经过100亿年之后会生成多少个密钥对呢?
1年最多366天,也就是366*24*60*60=31622400秒,因此
100亿人*100亿个*31622400秒*100亿年=31622400000000000000000000000000000000个
这个数量比10的39次方还少,和512比特能够容纳的质数的数量,即10的150次方相比还相差很远。
别人生成质数组合和自己生成质数组合偶然撞车的可能性,事实上也可以认为是没有的。
二 RSA与质因数分解
问:
RSA加密的过程,需要对大整数进行质因数分解吗?
答:
RSA在加密、解密、密钥对的生成过程中都不需要对大整数进行质因数分解。
只有在需要由数N求p和q的密码破译过程中才需要对大整数进行质因数分解,因此RSA的设计是将质因数分解这种困难留给了密码破译者。
问:
RSA的破译与大整数的质因数分解是等价的吗?
答:
2004年Alexander May证明了求RSA的私钥和对N进行质因数分解是等价的。
三 RSA的长度
问:
要抵御质因数分解,N的长度需要达到多少比特呢?
答:
N无论有多长,总有一个天能够被质因数分解,因此现在的问题是,在现实的时间内N是否能够被质因数分解。随着计算机性能的提高,对一定长度的整数进行质因数分解所需要的时间会逐步缩短,如果大型组织或国家投入其计算资源,则时间会进一步缩短。
在这一方面,一组被称为“RSA数”的整数可以作为参考。这些整数是截止2007年当时的RSA公司所举办的RSA Challenge活动中给出的题目,可以作为衡量质因数分解难度的一个指标。
RSA Challenge到2007年就结束了,截止2009年,有公开记录的被成功分解的最长的RSA数为RSA-768,就是下面这个232位的整数。
这个数是下面两个数的乘积
当然,有些人或组织在成功分解RSA数之后未必会将其公布出来,因此上面的证据只能说明“这么长的数能够被分解”,而不能说明“比这个更长的数就不能被分解”。
虽然只是一种预测,但在投入了非常大量的计算资源的情况下,现在可能已经能够分解长度为1024比特的整数了,但是长度为2048比特的整数目前看来还是安全的。因此,在一段时期内,下面这个RSA-2048(617位)的整数应该是不大可能被分解的。
随着计算机技术的进步,以前被认为是安全的密码会被破译,这一现象称为密码劣化。
针对这一点:NIST给出了如下方针。
1024比特的RSA不应该被用于新的用途。
2048比特的RSA可在2030年之前被用于的新的用途
4096比特的RSA在2031年之后仍可被用于新的用途