继续对Fortify的漏洞进行总结,本篇主要针对Insecure Randomness漏洞进行总结,以下:html
一、Insecure Randomness(不安全随机数)
1.一、产生缘由:
成弱随机数的函数是 random()。 java
电脑是一种具备肯定性的机器,所以不可能产生真正的随机性。伪随机数生成器 (PRNG) 近似于随机算法,始于一个能计算后续数值的种子。 算法
PRNG 包括两种类型:统计学的 PRNG 和密码学的 PRNG。统计学的 PRNG 可提供有用的统计资料,但其输出结果很容易预测,所以数据流容易复制。若安全性取决于生成数值的不可预测性,则此类型不适用。密码学的 PRNG 经过可产生较难预测的输出结果来应对这一问题。为了使加密数值更为安全,必须使攻击者根本没法、或极不可能将它与真实的随机数加以区分。一般状况下,若是并未声明 PRNG 算法带有加密保护,那么它有可能就是一个统计学的 PRNG,不该在对安全性要求较高的环境中使用,其中随着它的使用可能会致使严重的漏洞(如易于猜想的密码、可预测的加密密钥、会话劫持攻击和 DNS 欺骗)。安全
示例: 下面的代码可利用统计学的 PRNG 为购买产品后仍在有效期内的收据建立一个 URL。网络
String GenerateReceiptURL(String baseUrl) {dom
Random ranGen = new Random();函数
ranGen.setSeed((new Date()).getTime());加密
return (baseUrl + ranGen.nextInt(400000000) + ".html");spa
} 设计
这