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,一经查实,立即删除!

相关文章

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接口,在接口分配参数,选择你要的参数(根据你的情…

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

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

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

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

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

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

mybatis一对一联表查询的两种常见方式

1.一条语句执行查询(代码如下图) 注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_id为c…

在Windows 7中设置Java开发环境

一段时间以来,我收到了很多愿意尝试Java语言的学生和人们的要求,它们提供了关于如何设置Java开发环境的简单指南,类似于我一年前写的那样。 Mac用户。 看到这里和这里 。 因此,本文主要针对Java开发新手,他们寻求有关使…

写给想成为前端工程师的同学们―前端工程师是做什么的?

前端工程师是做什么的? 前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。从狭义上讲,前端工程师使用 HTML、CSS、JavaScript 等专业技能和工具将产品UI设计稿实现成网站产品,涵盖用户PC端、移动端网页,处理视觉…

逆水寒服务器维护7.5,逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍...

逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍2018-07-26 10:08:08来源:游戏下载编辑:苦力趴评论(0)《逆水寒》官方发布微博,称为了保证服务器的运行稳定和服务质量,将于7月26日上午7:00-上午10:00进行停服维护。此次…

是否可以限制蓝牙传输距离_技术文章—关于蓝牙传输范围的常见误解

蓝牙技术在耳机、手机、手表及汽车领域的普及为人们带来了许多便利,却也引发了一些人们对于蓝牙的误解。目前,蓝牙可为多种重要的解决方案提供支持,其中包括家庭自动化、室内导航以及商业和工业创新等。误解一:蓝牙稳定传输的最远…

基于webpack搭建的vue element-ui框架

花了1天多的时间, 终于把这个框架搭建起来了。 好了, 不多说了, 直接进入主题了。前提是安装了nodejs,至于怎么安装, 网上都有教程。 这里就不多说了, 这边使用的IDE是idea。1.在E:/my-project(我的电脑上&…

编译打包vue_Vue 源码分析( 一 )

Vue 源码分析( 一 )目录结构、版本、入口1、Vue 源码目录结构dist:打包之后生成的结果目录 examples:代码示例 scripts:配置文件 src:源代码目录compiler: 编译相关 (将template模板转换成rende…

使用grep4j轻松测试分布式组件上的SLA

因此,您的分布式体系结构如下图所示,您刚刚从企业那里收到了一项要求,以确保生产者发送并随后传输到下游系统(消费者)的消息的SLA必须快且永远不会慢于此。 400毫秒。 要求说: 从生产者发送到任何消费者的…

Python+Appium环境搭建

1、python环境搭建,这里就不做过多介绍 2、安装 node.js 2.1、官网下载node.js:https://nodejs.org/en/download/ 2.2、获取到安装文件后,直接双击安装文件,根据程序的提示,完成nodejs的安装。 2.3、安装完成后&#x…

以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...

学习Excel技术,关注微信公众号:excelperfectQ:如下图1所示,一个名为“InputFile.csv”文件,每行有6个数字,每个数字使用空格分隔开。图1现在,我要将以60至69开头的行放置到另一个名为“OutputFi…

BZOJ 1008:[HNOI2008]越狱

傻逼题&#xff0c;然后n&#xff0c;m写反了WA了一发。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> typedef long long LL; using namespac…

属性被分为八大类不包括_Python语言---私有属性

属性分为实例属性与类属性方法分为普通方法&#xff0c;类方法&#xff0c;静态方法一&#xff1a;属性&#xff1a;尽量把需要用户传入的属性作为实例属性&#xff0c;而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍&#xff0c;不同的实例的实例…

Jenkins分层作业和作业状态汇总

您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置Jenkins工作层次的方法。 这是用例&#xff1a; 我们有一个主入口作业被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 &#xff08;第2级&…