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

igodit 2007-07-27 11:45:37

我觉得RSA算法中两个大素数p,q的积的长度就是密钥的长度吧
N=p*q
128位,256或者1024位的N的长度是怎么确定的呢?
应该不是先找两个大素数,然后做乘积,看长度是不是128位,如果是就产生密钥
不是再继续找两个素数继续这样找吧。
是不是有什么简单方法或者一般是怎么实现这个长度是固定的目的的?
请高手指教。感激不尽
...全文
3597 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
天凉 2012-01-17
  • 打赏
  • 举报
回复
填坑。

http://www.di-mgt.com.au/rsa_alg.html#note1

To generate the primes p and q, generate a random number of bit length b/2 where b is the required bit length of n; set the low bit (this ensures the number is odd) and set the two highest bits (this ensures that the high bit of n is also set); check if prime (use the Rabin-Miller test); if not, increment the number by two and check again until you find a prime. This is p. Repeat for q starting with a random integer of length b-b/2. If p<q, swop p and q (this only matters if you intend using the CRT form of the private key). In the extremely unlikely event that p = q, check your random number generator. Alternatively, instead of incrementing by 2, just generate another random number each time.

There are stricter rules in ANSI X9.31 to produce strong primes and other restrictions on p and q to minimise the possibility of known techniques being used against the algorithm. There is much argument about this topic. It is probably better just to use a longer key length.

theflyfish2 2011-09-19
  • 打赏
  • 举报
回复
哎白高兴了一场,还以为有解决方法了呢,得,接着找
TypeCool 2011-04-10
  • 打赏
  • 举报
回复
你看你看。。。你至少得贴个链接吧。。好呢,我接着找。
miaouu 2010-12-24
  • 打赏
  • 举报
回复
楼主,结贴时应该把答案写出来啊,得来,我又得重复你以前的路了。
huming0001 2010-01-21
  • 打赏
  • 举报
回复
那就把你的心得写出来让我们学习一下啦
igodit 2007-07-29
  • 打赏
  • 举报
回复
今天可以结贴了。
igodit 2007-07-28
  • 打赏
  • 举报
回复
我的分数不够哦,结不了贴了。
哎,下次就知道怎么弄了
igodit 2007-07-28
  • 打赏
  • 举报
回复
非常感谢你的回复,虽然我费了好大力气去找到了一个英文网站把我想知道的找到了还是非常感谢你。我主要是想知道摸数选定后怎么找那两个素数,我已经知道了。
我非常奇怪的是这样一个问题在一个介绍RSA的英文网页上介绍的非常详细。怎么国内就很少有这样介绍的地方,我找这个答案找了三四天所有找到的中文网站对RSA的介绍都不怎么详细,甚至很多都是错的。
我刚注册的没有多少分数,给你加10分吧,我总共有20分。*_* 见面分一半。
zgg___ 2007-07-27
  • 打赏
  • 举报
回复
密钥的长度是“安全”和“加解密效率”的折中选择。就好像你买的锁越“安全”,或许锁就越“大”,因此或许正常开锁操作就越慢。而锁厂在生产“锁”的时候一定要按照“级别”来分级生产的,也就是标准化的过程。所以就会有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百多万台,一年就搞定了。呵呵。这只是构想,貌似没有人去实践。或许有人能搞定,但是“能”这个信息本身就是很有价值的秘密。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧