读书人

RSA算法中密钥长度是如何确定的

发布时间: 2012-02-15 12:09:44 作者: rapoo

RSA算法中密钥长度是怎么确定的?

我觉得RSA算法中两个大素数p,q的积的长度就是密钥的长度吧
N=p*q
128位,256或者1024位的N的长度是怎么确定的呢?
应该不是先找两个大素数,然后做乘积,看长度是不是128位,如果是就产生密钥
不是再继续找两个素数继续这样找吧。
是不是有什么简单方法或者一般是怎么实现这个长度是固定的目的的?
请高手指教。感激不尽

[解决办法]
密钥的长度是“安全”和“加解密效率”的折中选择。就好像你买的锁越“安全”,或许锁就越“大”,因此或许正常开锁操作就越慢。而锁厂在生产“锁”的时候一定要按照“级别”来分级生产的,也就是标准化的过程。所以就会有128位、256或者1024位的分级,当然我们也可以自己定一个666位的,只是不标准而已。
继续,我们定好了N的位数,一般要求p和q在一个数量级,所以就定好了p和q的位数,于是我们就随机产生一个那么多位的整数,然后检查它是不是素数,循环一直到成功为止,然后同理产生q,然后相乘的N。
这个过程中,可能有几个问题:
1、那个整数是“随机”产生的吗?可个问题看似简单,其实挺难的。
2、怎么检查它是不是素数?(1)看它是不是明显的合数,也就是看它有没有小因子(比如说100以内的因子),这一步不费什么力气,却可以排除许多整数。(2)然后素数的概率检测。(3)毕竟我们的目的是为了N难分解,所以可能要检测p和q的一些其他的性质,使N难以被攻击。总之,这一步没有想象的那么难。
3、循环能够在合理的时间内结束吗?其实素数的密度比想象中的要大,并不是那么“稀缺”,而是非常“充足”,所以放心好了。
4、这样产生的N真的那么难分解吗?有文献表明,对于1024位(bit)的N,以现有算法技术,2GHz、2G内存的机器,1百多万台,一年就搞定了。呵呵。这只是构想,貌似没有人去实践。或许有人能搞定,但是“能”这个信息本身就是很有价值的秘密。

读书人网 >软件架构设计

热点推荐