Java伪随机数生成器(PRNG)中的弱点

这将是Kai Michaelis,JörgSchwenk和我撰写的论文的总结,该论文在RSA Conference 2013的密码学家会议上发表 。 你可以得到我的演讲的幻灯片在这里和我们的全文在这里 。 我们对PRNG(主要是SecureRandom)附带的常见Java库生成的随机序列进行了分析,发现在特殊条件下存在明显的弱点。 为了使文章尽可能简短,PRNG使用的算法的描述,详细的错误描述和统计测试的结果均被省略,但可在本文中找到。 我们的研究涵盖PRNG本身以及用于播种的熵收集器(例如,如果没有实数生成器可用)。
底线:当需要良好的随机性时不要使用PRNG!
质量通过多种方式分级。 首先,我们进行了代码分析,并(成功地)尝试查找和识别导致严重缺陷的编码错误。 其次,我们对生成的随机序列进行了统计检验。 最后,我们强调了在特殊条件下(高系统负载,某些组件不可用等)的算法。

第一个库:

尽管经过重试,但Apache Harmony仍可作为Android源代码的一部分(请参见此处 )保留下来,因此是数百万种设备的一部分。

弱点

发现的错误之一直接影响Android平台。 其他错误仅存在于Apache Harmony中,而不存在于Android源代码中。
FIRST –创建自种子的SecureRandom实例时(通过调用不带参数的构造函数并随后进行setSeed()调用),代码在插入起始值后无法调整字节偏移(状态缓冲区中的指针)。 这将导致计数器和填充的开头(32位字)覆盖部分种子而不是附加种子。 第二 –在类似Unix的操作系统下运行时,新的SecureRandom实例从urandom或随机设备中植入了20个字节的种子。 如果两者均不可访问,则该实现将提供备用种子设施。 一旦播种工具收集了请求的字节数,出于未知原因,最高有效位将设置为零。 结果,对于每个请求的字节,SecureRandom实例的有效种子仅为7/8,从而将安全性(由于第一个错误,仅64位)降低了8位至56位。 更糟糕的是,由于另一个无效的模减少,单个调用播种功能的熵被限制为仅31位。 当查看生成的字节时,熵收集器的问题显而易见。 下图描述了单个点的两个连续字节。

每个方向上都完全缺少127以上的值。

第二个库:

GNU Classpath部分由著名的IcedTea项目使用,因此最著名的是Linux系统上的64位Java Browser-plugin。

弱点

该库在内部状态方面存在重大缺陷。 该错误与用于哈希函数的相同的初始化向量(IV)有关。 这将内部状态的未知字节数从32个减少到只有20个。EntropyCollector算法很难预测,这很好,但是它依赖于争夺CPU时间的线程,这很容易受到影响(通过将系统置于高负载)。 线程运行时检查不够严格,无法确保良好的随机性。 下图显示了有关平均分配输出的困难,留下了较大的色块。 该图显示了熵收集器在高系统负载下的性能。

相比之下,熵收集器在正常情况下的表现与预期相同:

第三图书馆:

Java SE的官方免费开源实现在很大程度上与Oracle提供的版本相同。 大多数Java用户很可能依赖此代码。

弱点

代码审查没有明显的弱点。 Entropy Collector依赖于线程递增计数器,但是与GNU Classpath相反,它对运行时的要求最低。 结果图填充得非常平衡。

第四图书馆:

该库与其他库有所不同,因为它只是用于各种密码算法的非常全面的库。 它附带多种替换品 BouncyCastle的熵收集器可以在两种操作模式下运行,即快速模式和慢速模式,其中不同数量的字节用于随机输出。

弱点

与OpenJDK案例一样,Bouncy Castle的SecureRandom替代品(DigestRandomGenerator)没有发现明显的错误。 相反,已知VMPCRandomGenerator容易受到攻击。 两种模式下的熵收集器都可以非常平衡地填充图形。

快速模式

慢速模式

摘要

非常有趣的是受检查的实现的有限且不可配置的内部状态大小。 几乎所有实现都依赖SHA-1作为哈希(压缩)功能。 因此,它们对于大于160bit的密钥生成似乎没有用。 只有Apache Harmony依赖于512位的内部状态,但是会遭受编码错误。 该博客文章省略了许多详细信息和统计信息,以便仅对库进行快速而肮脏的审查-如果您对更多详细信息和进一步的结果感兴趣,欢迎您阅读全文。

参考:来自Java安全和相关主题博客的JCG合作伙伴 Christopher Meyer的Java伪随机数生成器(PRNG)中的弱点 。

翻译自: https://www.javacodegeeks.com/2013/03/weaknesses-in-java-pseudo-random-number-generators-prngs.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp服务器组件安装包,ASP服务器组件

《ASP服务器组件》由会员分享,可在线阅读,更多相关《ASP服务器组件(20页珍藏版)》请在人人文库网上搜索。1、7/10/2020,1,网络开发技术,第二部分 ASP开发技术,7/10/2020,2,第四章 ASP服务器组件,4.1 ASP 服务器组件 ASP服务器组件 ASP服务器组件(ActiveX…

On Comparing Side-Channel Preprocessing Techniques for Attacking RFID Devices

对HF和UHF RFID标签进行DEMA和DFA攻击,并将DFA和应用不同预处理技术的DEMA效果进行比较。 实验中,进行两种隐藏进行攻击: 1、幅域(读写器的场干扰)隐藏 (1)DEMA攻击时,轨迹预处理&am…

python超市售货统计程序_用Python实现简易超市售货系统

今天来实现一个简单的超市售货系统数据存储形式为json的数据首先是读取数据,这里用到的Python的json库,用于处理json类型的数据pythondef load(): # 数据读取j open(goods.txt, r, encodingutf-8)# 逐行读取文件中的数据readers j.readlines()# 将数据…

vue安装概要以及vue测试工具

一、概述 1、安装node,去node官网 2、新建一个项目,通过npm init命令初始化,即创建一个package.json文件 3、用命令 npm install vue -g 全局安装vue(网上已经有详细的资料,在此就不复述了) 二、vue测试…

linux安装与远程连接

1、在VMware上创建新的虚拟机,保证有linux版本的iso镜像文件 具体参考http://jingyan.baidu.com/article/eae0782787b4c01fec548535.html 2、进行切换用户 进行root用户的切换:   #su password: 进行普通用户的切换: #su username 3、编辑…

Spring框架:三种Spring Bean生命周期技术

当使用术语“生命周期”时,Spring的家伙指的是您的bean的构造和破坏,通常这与Spring Context的构造和破坏有关。 在某些情况下,Bean生命周期的管理不是一件容易的事,因为需要它执行自己的内部设置。 当您的bean必须与外部系统进行…

wincc客户机打开服务器文件通讯不上,wincc客户机连不上服务器

如果你计算机名称改正确了,检查一下安装OPC服务软件吗?比如SIMATIC NET。然后试一试下面方法能否解决:首先,设置一下PG/PC接口。方法:开始--设置--控制面板--设置PG/PC接口,在接口分配参数,选择你要的参数(根据你的情…

笔记《精通css》第2章 选择器,注释

第2章 选择器,注释 1.常用选择器(id选择器,类选择器,类型选择器,后代选择器,伪类选择器(文档结构之外)) 通用选择器(*{ }) 高级选择器&a…

Android ios嵌套web页面

我们现在做一个活动页面,Android和ios的活动页面用web来做,方便更改,下面有几个小问题; 1、在Android和ios中,虽然web上面可以存localstorage,但是到了Android和ios上面就失效了,也就是说不能存…

课程学习:程序设计与算法

基本单位 0-1: 1位(2^12), 比特, bit(b)字节: 8位(2^8256), byte(B);1KB: 2^10字节(2^13位)ASCII编码方案就是用一个字节表示一个字母,数字或标点进制转换 十进制->n进制: A0xk^0....AnxK^nn进制->十进制: 取余数(从右往左)十六进制->二进制: 4进制对应1十…

css3点击会移动到点,CSS3过渡点击事件

根据CSS3过渡:div{transition-property: width;transition-duration: 1s;transition-timing-function: linear;transition-delay: 2s;}transition-property:指定应用转换的CSS属性的名称.transition-duration:定义转换所需的时间长度.默认值为…

通过JAX-WS Provider在Web服务中利用MOXy

在先前的文章中,我演示了如何将EclipseLink JAXB(MOXy)直接集成到WebLogic(从12.1.1开始)和GlassFish(从3.1.2开始)的JAX-WS实现中 。 在本文中,我将演示如何通过使用JAX-WS Provide…

python如何获取url中的内容_python怎么提取url中的参数

目标:结果:{tma_jssdk_version: 1.93.0.1, ac: WIFI, appTheme: dark}代码:import urllib.parse as urlparseurl https://search5-search-hl.amemv.com/aweme/v1/challenge/search/?tma_jssdk_version1.93.0.1&acWIFI&appThemedark…

子元素的margin-top会影响父元素

---恢复内容开始--- 之前在写项目的时候,发现原本想让父子元素之间加点边距,却让父元素产生了margin-top,于是百度之后发现了原因。 在css2.1盒模型中 In this specification, the expression collapsing margins means that adjoining ma…

spring boot高性能实现二维码扫码登录(上)——单服务器版

前言 目前网页的主流登录方式是通过手机扫码二维码登录。我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查询数据库或r…

查看 固态硬盘位置_3米防摔+人脸/指纹解锁:西数Armorlock移动固态硬盘

要求快速而又安全的数据拷贝工具?指纹识别移动SSD大家应该都见过了,今天西数推出了一个更为特别的人脸/指纹识别加密移动SSD。G-Technology Armorlock使用AES256全盘加密固态硬盘中的数据,解锁方式不是常见的密码或自带指纹传感器&#xff0c…

CCF - 201403-2 - 窗口

问题描述 试题编号:201403-2试题名称:窗口时间限制:1.0s内存限制:256.0MB问题描述: 问题描述在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之…

通过Spring集成从Hibernate 3迁移到4

本周是时候将我们的代码库升级到最新的Hibernate 4.x了。 我们推迟了迁移(仍在Hibernate 3.3上),因为3.x分支的较新维护版本需要对API进行一些更改,这些更改显然仍在不断变化中。 一个示例是UserType API,该API仍然存在…

web前端工程师全套教程免费分享

这是我自己早前听课时整理的前端全套知识点,适用于初学者,也可以适用于中级的程序员,你们可以下载下来。我自认为还是比较系统全面的,可以抵得上市场上90%的学习资料。讨厌那些随便乱写的资料还有拿出来卖钱的人!在这里…

vb在服务器上新建文件夹,vb.net-如果不存在,如何在VB中创建文件夹?

vb.net-如果不存在,如何在VB中创建文件夹?我为自己编写了一个小小的下载应用程序,以便我可以轻松地从服务器上获取一组文件,然后将它们全部放入带有全新安装的Windows的新PC上,而无需实际运行网络。 不幸的是&#xff…