一种软件生成真随机数算法的设计和实现.docVIP

一种软件生成真随机数算法的设计和实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种软件生成真随机数算法的设计和实现

一种软件生成真随机数算法的设计和实现 nbsp;摘nbsp; 要nbsp; 本文提出了一种在软件上实现真随机数的方法,该方法根据计算机上的一些随机性事件,来生成一个由0和1组成的随机序列,然后对01序列进行进一步的随机处理,以进一步增强其随机性;根据这个01序列来生成所需要的随机数。基于这种设计方法,本文根据鼠标在计算机屏幕上的随机曲线来生成01序列,然后使用线性同余法对其进行进一步处理。 nbsp;nbsp;nbsp; 关键词nbsp; 真随机数;伪随机数;线性同余法;二元序列 nbsp; 1 引言 nbsp;nbsp;nbsp; 随机数在信息安全领域有着广泛的应用,比如各种安全认证协议,一次安全通信中使用到的会晤密钥,甚至软件产生RSA密钥对等,这些应用都会使用到随机数。特别是一些安全级别要求比较高的应用,对于随机数的质量提出了很高的要求。随机数的生成一般有两种方式,一种是硬件方式,一种是软件方式。一般情况下,硬件方式生成的随机数质量要好于软件方式生成的随机数。但是对于一般的用户来说,需要每位用户都配备一种硬件设备来生成随机数,这种方式可能不太现实。因此,通过软件方式来寻找高质量的随机数,这是一个很重要而且必要的课题。 2 基础知识 nbsp;nbsp;nbsp; 在密码学中,对于一个随机序列的定义如下: nbsp;nbsp;nbsp; (1) 看起来是随机的。 nbsp;nbsp;nbsp; (2) 这个序列是不可预测的。 nbsp;nbsp;nbsp; (3) 这个序列是不能重复产生的。 nbsp;nbsp;nbsp; 随机数生成器有真随机和伪随机之分。真随机数生成器满足以上所有的三点要求,伪随机数生成器只能满足以上的前两点要求。 nbsp;nbsp;nbsp; 软件生成随机数的一般方式如下: nbsp;nbsp;nbsp; (1) 确定一个数学模型或者算法。 nbsp;nbsp;nbsp; (2) 设置一些参数的值。 nbsp;nbsp;nbsp; (3) 按照规定的步骤和算法来生成第一个随机数。 nbsp;nbsp;nbsp; (4) 然后在第一个随机数的基础上,来生成第二个随机数。重复同样的步骤,从而得到一个随机数序列。 nbsp;nbsp;nbsp; 很明显,这种软件方式生成的随机数是伪随机数序列。只要知道了其使用的算法和参数值,我们就可以生成同样的随机数序列。因此,真正的随机数是不可能通过具体的算法来生成的。 真正的随机数序列只能来源于随机事件,那么我们可以从计算机系统中存在的大量的随机事件中提取随机事件,经过正确的处理就有可能生成真正的随机数序列。比如,将用户的击键次数,鼠标的操作次数,CPU负载,网络数据包到达次数等随机信息放入到一个被称为“熵池”的缓存区中,“熵池”被均匀地搅拌。当需要取随机数时,我们就从“熵池”中读取随机数源。但是这种方式生成随机数的速度不够理想。 3 设计思想 nbsp;nbsp;nbsp; 在信息安全领域,我们经常遇到这样的情况:需要生成8个字节的随机数序列。那么我们可以把这8个字节的随机数序列当成由64个bit所组成的,每个bit位的取值为0或者1。如果我们使用投掷硬币的方式来决定每个bit位应该取0还是1,那么我们投掷64次硬币,就会得到一个由0或者1组成的随机数序列。这个0和1组成的随机数序列每8位组成一个字节,最终我们得到了要求的8个字节的随机数序列。像这种随机数序列的生成方式,它符合了密码学对于随机序列定义的3个特点,从而保证它是一个真正的随机数序列。但是,显而易见地,这种生成随机数序列的方式效率太低下了。 nbsp;nbsp;nbsp; 基于这种思想,我们可以利用计算机系统的随机性,提取出0和1组成的随机数序列,然后对这个0和1组成的随机数序列进行组合处理,从而最终得到质量很高的真随机数序列。 我们的算法思想可以总结为如下几步: nbsp;nbsp;nbsp; (1) 根据计算机系统中的随机事件,得到0和1组成的原始随机数序列。 nbsp;nbsp;nbsp; (2) 对0和1组成的原始随机数序列进行某种处理,获得组合之后的由0和1组成的组合随机数序列。 nbsp;nbsp;nbsp; (3) 继续进行类似于第二步的处理,进行多次的组合处理。 nbsp;nbsp;nbsp; (4) 将最终得到的0和1随机数序列每8个bit组成一个字节,从而得到若干字节的随机数。 在这个设计方法中,关键的是第一步,随机事件的获取。只要能保证原始随机数序列是真正的随机事件生成的,即使我们不进行后续的组合处理,我们也可以得到真正的随机数序列。就好像我们通过投掷硬币来获得8字节的随机数一样。但是,由于计算时间或者计算机系统的精度等各方面的限制

文档评论(0)

ailuojue4 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档