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

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

来源:互联网 | 时间:2015-03-12 16:08:10 | 阅读:152 |  标签: 漏洞 远程攻击 网络安全   | 分享到:

免责声明:请在访问相关连接时替换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生成的随机数的随机性、安全性和性能取决于算法和熵源的选择。

小编推荐阅读

好特网发布此文仅为传递信息,不代表好特网认同期限观点或证实其描述。

相关视频攻略

更多

扫二维码进入好特网手机版本!

扫二维码进入好特网微信公众号!

本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件[email protected]

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