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

igodit 2007-07-27 11:45:37

我觉得RSA算法中两个大素数p,q的积的长度就是密钥的长度吧
N=p*q
128位,256或者1024位的N的长度是怎么确定的呢?
应该不是先找两个大素数,然后做乘积,看长度是不是128位,如果是就产生密钥
不是再继续找两个素数继续这样找吧。
是不是有什么简单方法或者一般是怎么实现这个长度是固定的目的的?
请高手指教。感激不尽
...全文
3476 9 打赏 收藏 转发到动态 举报
写回复
用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百多万台,一年就搞定了。呵呵。这只是构想,貌似没有人去实践。或许有人能搞定,但是“能”这个信息本身就是很有价值的秘密。
【课程介绍】     课程目标:             - 有状态登录和无状态登录的区别             - 常见的非对称加密算法和非对称的加密方式             - 老版本只使用jwt进行加密的弊端             - 授权心的授权流程             - 如何整合网关组件实现jwt安全验证             - 理解什么是公钥什么是私钥      - 深刻理解授权流程什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?- 服务端保存大量数据,增加服务端压力- 服务端保存用户状态,无法进行水平扩展- 客户端请求依赖服务端,多次请求必须访问同一台服务器。什么是无状态? 微服务集群的每个服务,对外提供的都是Rest风格的接口。而Rest风格的一个最重要的规范就是:服务的无状态性,即:- 服务端不保存任何客户端请求者信息- 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份带来的好处是什么呢?- 客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务- 服务端的集群和状态对客户端透明- 服务端可以任意的迁移和伸缩- 减小服务端存储压力

33,008

社区成员

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

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