首页 > 菜鸟学院 > SecureRandom漏洞技术分析详解(CVE-2013-7372)

SecureRandom漏洞技术分析详解(CVE-2013-7372)

时间:2015-03-12 | 来源:互联网 | 阅读:53

话题: 漏洞 远程攻击 网络安全

免责声明:请在访问相关连接时替换HXXP为HTTP,仅供安全研究与教学实例,风险自负!

0×00 漏洞概述

Android 4.4之前版本的Java加密架构(JCA)中使用的Apache Harmony 6.0M3及其之前版本的SecureRandom实现存在安全漏洞,具体位于classlib/modules/security/src/main/java/common/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java文件的engineNextBytes函数里。当用户没有提供用于产生随机数的种子时,程序不能正确调整偏移量,导致伪随机数生成器(PRNG)生成随机序列的过程可被预测。漏洞文件参见文后链接1。

0×01 漏洞影响

2013年8月份的比特币应用被攻击也与这个漏洞相关。比特币应用里使用了ECDSA算法,这个算法需要一个随机数来生成签名,然而生成随机数的算法存在本文提到的安全漏洞。同时这个ECDSA算法本身也有漏洞,在这个事件之前索尼的PlayStation 3 master key事件也是利用的这个算法漏洞。

本文主要介绍SecureRandom漏洞,关于ECDSA算法漏洞读者可以自行阅读下面的资料:

ECDSA算法的细节:

hxxp://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm#Security

防范措施:

hxxp://tools.ietf.org/html/rfc6979

Google group上关于PlayStation 3 master key事件如何利用ECDSA算法漏洞获取私钥的讨论:

hxxps://groups.google.com/forum/?fromgroups=#!topic/sci.crypt/3isJl28Slrw

0×02 SecureRandom技术实现

在java里,随机数是通过一个初始化种子来生成的。两个PRNG实例,如果使用相同的种子来初始化,就会得到相同的随机序列。Java Cryptography Architecture里提供了几个加密强度更大的PRNGs,这些PRNGs都是通过SecureRandom接口实现的。

java.security.SecureRandom这个类本身并没有实现伪随机数生成器,而是使用了其他类里的实现。因此SecureRandom生成的随机数的随机性、安全性和性能取决于算法和熵源的选择。


湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网