当前位置:  开发笔记 > 编程语言 > 正文

javascript在各种浏览器中随机实现的可信度如何?

如何解决《javascript在各种浏览器中随机实现的可信度如何?》经验,为你挑选了3个好方法。

我想做一些javascript和加密的实验,我很好奇随机函数的实现有多么不可预测.有人做过任何硬测试吗?

显然,浏览器能够生成强随机性(对于ssl).问题是他们给javascript访问相同的力量.



1> Aaron Maenpa..:

通常,随机函数的加密性不强,因为您需要确保使用加密伪随机数生成器.

通用随机函数通常不使用加密强生成方法,因为它们比简单生成方法花费更长时间(例如,Yarrow比Mersenne Twister更复杂)并且需要仔细管理熵池,这不能保证Mozilla,cstdlib,等想要给你.

如果您需要访问加密强大的随机数生成器,我会考虑访问底层的SSL实现(给定的浏览器可能允许或不允许访问).



2> Beni Chernia..:

最近的浏览器揭示了window.crypto.getRandomValues()加密强大的内容.

还有一些JS库可以实现强大的RNG,但是没有getRandomValues()它可以很难收集熵.它可以通过鼠标和键盘完成,虽然可能需要很长时间.

Math.random()在2008年的大多数浏览器中都很弱--Amit Klein的论文详细介绍了 - 可悲的是,今天几乎一样弱.

更新:看来几乎所有的浏览器在2015 - 2016年切换到XorShift128 + -上LFSR快速变型调整,以良好的统计特性,但也非常弱密码:https://lwn.net/Articles/666407/, https://开头的安全性. stackexchange.com/questions/84906/predicting-math-random-numbers.以下详细信息已过期.

Firefox使用了一个非常弱的"我们自己的自制LFSR"算法; 自2006年以来,他们一直在讨论转向更强大的算法和熵源(bug 322529).更新:2015年他们转向XorShift128 +.

在2013年5月,他们至少将种子从当前时间切换到良好的熵源(错误868860),同时消除(?)交叉标签泄漏.

Webkit 自2009年以来使用弱快速算法(GameRand), 但自2010年以来(在每种情况下)来自强大的操作系统源的强大RNG的种子.
(我认为这是Safari使用的,但我可能会对各种WebKit端口感到困惑......)

Chrome不使用WebKit的随机,在V8中做自己的弱线性事物.
Math.random()是否应该是强大的(bug 246054).

不确定它是如何播种的.V8具有SetEntropySource()钩子,但显然它仅用于单元测试,而不是Chrome调用.如果没有调用,random()则用于播种.

国家在2011年成为了每个环境,但是对于弱播种来说这并不是很有用.

Opera 在2009年1月宣布修复它并在这里说他们的Math.random()在加密方面很强大.

没有找到关于IE现在做什么的文档.他们在2008年的线性PRNG较弱(见论文).他们确实告诉Amit他们会在服务包中修复它,所以可能会在某处提供咨询......



3> Ben Blank..:

我熟悉的每个JavaScript引擎都不使用加密强RNG.

如果你需要一个良好的熵源在浏览器中(并且最好不经常需要它),我建议捕获鼠标移动数据并通过加密强哈希算法运行它.诸如Entropy Gathering Daemon(与gpg一起使用)的现有程序可以用作如何实现这样的系统的参考.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有