什么是随机数脆弱性?

计算机确定性,因此,可以预测的。 电脑不能,其本身,产生真正的随机数。

在没有外部输入,计算机只能创建伪随机数。

一个随机数脆弱性时,就会发生程序使用方式产生随机号码可以是:

  1. 不是随机的
  2. 可预测

创造良好的随机数,计算机必须有两件事:

  1. 一个良好的随机数生成算法
  2. 随机和unpredicatable种子的随机数生成算法

随机数漏洞实例

考虑下面的代码片断:

  x =兰特( ) ; 

此代码产生不良随机数,因为当您呼叫兰特( )之前的种子已经建立起来, srand ( ) ,它使用了价值1作为缺省种子。 其他人在同一台机器上使用相同的编译器谁呼吁兰特( )与1号种子将得到相同的随机数作为你只是做。

让我们来看看另一个代码段:

  srand (时间( 0 ) ) ; 
  x =兰特( ) ; 

此代码并调用srand ( )与当前时间作为种子。 但是,此代码仍然是不安全的,因为:

  1. 系统时间是一个非常坏的种子,因为它是可预见的范围内,且幅度较小。
  2. 是的ANSI C兰特( )函数本身并不创造良好的随机数。

让我们检查三分之一代码段:

  srandom (时间( 0 ) ) ; 
  x =随机( ) ; 

此代码使用BSD的随机( )和srandom ( )函数,将产生更好的随机数的ANSI C比他们的前辈。 但是,此代码仍然使用的时间( )来生成的种子数量。 更好的随机数源上的BSD和Linux系统是的/ dev /随机装置。

一些种子和随机数漏洞

良好的种子数量来自不可预测的事件,如用户按键或鼠标移动。 这些都不是完美的来源的随机性,但是。 有些人的行为是可预见的和电脑硬件可以缓冲键盘和鼠标中断,减少随意性。

许多其他随机数字产生器可用于各种平台和开发环境。 这是极其困难的创造一个良好的人,更难以确定,如果随机数发生器中创建真正产生随机和不可预测的数字。 的最佳途径对于大多数应用,是落实现有的随机数发生器一直受到公众的安全。

随机数漏洞的兴趣时,黑客可以利用,以确定输入值,以加密的功能。 这可以利用的安全性。

不当使用函数调用兰特( )和随机( )是正常的原因,随机数漏洞。

额外的信息来源生成随机数

欲了解更多有关生成随机数,阅读的RFC 1750 -随机性的建议安全

“任何人都试图产生随机数的算法是指纯粹的,当然是在一国的罪孽。 ” -约翰冯诺依曼。
书写安全的代码 建设安全的软件 安全编码 安全编程食谱
购买这些优秀的书籍安全编程在Amazon.com


最常见的5个免费网络工具

书签什么是随机数脆弱性?

最新的博客帖子


英文 英文 德语 德语 西班牙语 西班牙语 法文 法文 意大利语 意大利语 葡萄牙语 葡萄牙语 俄文 俄文 荷兰文 荷兰文
希腊语 希腊语 印地文 印地文 日语 日语 韩文 韩文 中文 中文 中文(简体) 中文(简体) 阿拉伯语 阿拉伯语

版权所有2009年技术常见问题解答 保留所有权利。 隐私政策。