什么是随机数脆弱性?
计算机确定性,因此,可以预测的。 电脑不能,其本身,产生真正的随机数。
在没有外部输入,计算机只能创建伪随机数。
一个随机数脆弱性时,就会发生程序使用方式产生随机号码可以是:
- 不是随机的
- 可预测
创造良好的随机数,计算机必须有两件事:
- 一个良好的随机数生成算法
- 随机和unpredicatable种子的随机数生成算法
随机数漏洞实例
考虑下面的代码片断:
x =兰特( ) ;
此代码产生不良随机数,因为当您呼叫兰特( )之前的种子已经建立起来, srand ( ) ,它使用了价值1作为缺省种子。 其他人在同一台机器上使用相同的编译器谁呼吁兰特( )与1号种子将得到相同的随机数作为你只是做。
让我们来看看另一个代码段:
srand (时间( 0 ) ) ; x =兰特( ) ;
此代码并调用srand ( )与当前时间作为种子。 但是,此代码仍然是不安全的,因为:
- 系统时间是一个非常坏的种子,因为它是可预见的范围内,且幅度较小。
- 是的ANSI C兰特( )函数本身并不创造良好的随机数。
让我们检查三分之一代码段:
srandom (时间( 0 ) ) ; x =随机( ) ;
此代码使用BSD的随机( )和srandom ( )函数,将产生更好的随机数的ANSI C比他们的前辈。 但是,此代码仍然使用的时间( )来生成的种子数量。 更好的随机数源上的BSD和Linux系统是的/ dev /随机装置。
一些种子和随机数漏洞
良好的种子数量来自不可预测的事件,如用户按键或鼠标移动。 这些都不是完美的来源的随机性,但是。 有些人的行为是可预见的和电脑硬件可以缓冲键盘和鼠标中断,减少随意性。
许多其他随机数字产生器可用于各种平台和开发环境。 这是极其困难的创造一个良好的人,更难以确定,如果随机数发生器中创建真正产生随机和不可预测的数字。 的最佳途径对于大多数应用,是落实现有的随机数发生器一直受到公众的安全。
随机数漏洞的兴趣时,黑客可以利用,以确定输入值,以加密的功能。 这可以利用的安全性。
不当使用函数调用兰特( )和随机( )是正常的原因,随机数漏洞。
额外的信息来源生成随机数
欲了解更多有关生成随机数,阅读的RFC 1750 -随机性的建议安全 。
|
书签什么是随机数脆弱性?





