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

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

prng伪随机数生成器

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

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

相关文章

时钟在微型计算机中作用,微型计算机系统中的实时时钟

实时时钟(RTC)是一种IC,可以跟踪当前时间。微处理器通常可以通过串行接口读取此信息,以方便软件执行与时间有关的功能。RTC专为超低功耗而设计,因为它们通常在主系统断电时仍可继续运行。这样一来,他们就可以根据绝对时间基准(通常…

五个使Java变得更好的功能

我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多,但这只是五个最重要的列表。 专制(2006),迈克贾奇(Mike Judge&#xf…

nit计算机应用基础是考试大纲,NIT考试大纲--计算机应用基础.doc

NIT考试大纲--计算机应用基础.doc全国计算机应用技术证书考试大纲【 HYPERLINK "javascript:doPrint()" 打印】【字体: HYPERLINK "javascript:doZoom(16)" 大 HYPERLINK "javascript:doZoom(14)" 中 HYPERLINK "javascript:doZ…

html选中列表整列变色,excel选中行变色完整代码和动画效果

内容提要:文章介绍excel选中行变色的效果以及实现选中行变色的VBA代码。在excel中如果行数过多,经常核对数据的准确性,容易错行跳行,所以才有本文的小技巧:excel选中行变色。当我们在excel工作表中,鼠标随便…

java 递归改非递归_使用Java ThreadLocals的意外递归保护

java 递归改非递归对于那些使用第三方工具来尝试扩展它们而又不完全了解它们的人来说,这是一个小技巧。 假定以下情况: 您想扩展一个展示分层数据模型的库(假设您要扩展Apache Jackrabbit ) 该库在访问内容存储库的任何节点之前…

大连理工18秋计算机应用基础,大连理工大学网络教育本科计算机应用基础入学考试模拟题...

大连理工大学网络教育本科计算机应用基础入学考试模拟题一、单选题1. 世界上第一台电子数字计算机采用的电子器件是______。A.大规模集成电路 B.集成电路C.晶体管 D.电子管2. 将计算机分为巨型机、大中型机、小型机、微型机、工作站等五类的分类标准是______。A.计算机处理数据…

构造函数还是静态工厂方法?

我相信Joshua Bloch在他的非常好的书“ Effective Java”中首先说了它:与构造函数相比,静态工厂方法是实例化对象的首选方法。 我不同意。 不仅因为我相信静态方法是纯粹的邪恶,而且主要是因为在这种特殊情况下,它们伪装成好的方法…

html vue分页,Vue.js bootstrap前端实现分页和排序

写之前先抱怨几句。本来一心一意做.net开发的,渐渐地成了只做前端。最近项目基本都用java做后台,我们这些.net的就成了前端,不是用wpf做界面,就是用html写web页面。深知自己前端技术不足,以前虽说用asp.net前后台都做&…

福建计算机及应用专业的大学,33所福建大学公布国家级/省级一流本科专业!

近日,教育部发布《教育部办公厅关于公布2020年度国家级和省级一流本科专业建设点名单的通知》。据悉,本次教育部一流本科专业建设“双万计划”评选共认定了3977个国家级一流本科专业建设点,其中中央赛道1387个、地方赛道2590个,并…

高度有用的Java ChronoUnit枚举

几年前,我发表了博客文章“ The Highly有用的Java TimeUnit Enum ”,其中介绍了JDK 5引入的TimeUnit枚举。 JDK 8引入了一个更新的枚举ChronoUnit ,它比TimeUnit更适合于诸如日期/时间操作等并发以外的上下文。 位于所述java.time.temporal包…

计算机管理ap,如何设置AC功能管理无线AP

AC功能管理无线AP第一步、连接ap举例型号TL-ER6520G不同类型的AP供电方式可能有所差异,包括直流电源供电和网线供电(PoE供电)两种。如下[1] 直流电源供电使用自带的电源适配器给AP供电,要求AP安放位置必须有电源插座,优点是节省成本。按照拓扑…

代表机械 计算机技术的颜色,基于机器视觉识别的交通灯控制系统

1、引言机器视觉又称计算机视觉,是用计算机来实现人的视觉功能,也就是用机器代替人眼来做测量和判断。机器视觉技术包含光源照明技术、光成像技术、传感器技术、数字图像处理技术、机械工程技术、检测控制技术、模拟与数字视频技术、计算机技术、人机接口…

java开发者工具开源版_JArchitect对Java开源贡献者免费

java开发者工具开源版JArchitect是用于Java代码库的静态分析工具,它提供交互式GUI和HTML报告,用于查找代码中过于复杂或有问题的区域,执行分析以重构并比较随时间的变化。 在版本3中,添加了类似LINQ的查询语言,该工具使…

有没有查计算机组成的答案得,计算机组成答案.doc

黄淮学院计算机科学系2008—2009年第二学期2007级《计算机组成原理》期终试卷(A)参考答案及评分标准命题人:王晓涓注意事项:本试卷适用于2007级软件工程专业本科学生使用一、单项选择题(每题1分、共15分)1、B 2、B 3、A 4、D 5、A 6、D 7、D 8、C 9、C 1…

使用JDK 8将收藏转换为地图

我多次遇到这样的情况,希望将多个对象存储在Map中而不是Set或List中,因为将唯一标识信息的Map应用于对象有一些优势 。 Java 8使用流和Collectors.toMap(…)方法使翻译变得比以往更加容易。 使用Map而不是Set的一种有用情况是&am…

计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办

现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件,安全卫士等等。可有时候会发现,在Win7操作系统中,安装后发现不能开机加载启动项。在注册表中,在msconfig中&…

车牌识别与计算机编程,基于计算机视觉的车牌字符识别技术的研究

摘要:车牌识别系统是现代智能交通管理系统的核心组成部分,是图像处理、神经网络和模式识别等技术的综合应用。 本文介绍了车牌识别系统的一般构成,包括车牌图像预处理、车牌字符分割和车牌字符识别等三个重要组成部分,并分别进行深入研究。 车牌图像预处理方面,针对…

线程同步,线程不同步_重新同步多线程集成测试

线程同步,线程不同步我最近在Captain Debug的Blog上偶然发现了一篇文章“ 同步多线程集成测试 ”。 那篇文章强调了设计涉及异步运行业务逻辑的被测类的集成测试的问题。 给出了这个人为的示例(我删除了一些评论): public class ThreadWrapp…

用户需求测试软件,用户需求和软件需求的区别

原标题:用户需求和软件需求的区别一些刚实施GJB5000A组织的开发人员,不是很理解软件研制任务书和软件需求规格说明的区别。这里再次解读下这个问题。软件研制任务书就是用户需求,而用户需求是从用户的角度,用用户熟悉的语言进行描…

在Java中使用可信时间戳

受信任的时间戳记是使受信任的第三方(“时间戳记权威”,TSA)以电子形式证明给定事件的时间的过程。 欧盟法规eIDAS赋予了这些时间戳合法的力量-即,如果事件带有时间戳,则没有人可以质疑事件的时间或内容。 它适用于多种…