总的来说,我读过这篇文章,SecureRandom的某些实现可能产生真正的随机数。。
特别是,Android文档说
该类的实例将使用内部熵源(如
/dev/urandom)生成初始种子。
但这是否意味着它将产生真正的随机数(即,而不是伪随机数)?
如果我以这种方式在机器人上使用SecureRandom ..。
SecureRandom sr = new SecureRandom();...will --每当我调用sr.nextBoolean()时,都会得到一个真正随机的输出
或者输出可能更多(或更少)?如果我通过每次执行以下操作获得输出,则随机:new SecureRandom().nextBoolean()
发布于 2014-09-13 09:55:33
“真”和“伪随机数”对不同的人来说意味着很多不同的东西。最好避免这样做。
/dev/urandom的代表很差,因为人们不理解它和/dev/random之间的区别(比你想象的要差得多)。
如果您在问/dev/urandom的种子是否会损害SecureRandom用于加密目的的适宜性,那么答案是响亮的“否”。
如果您有一些时间,您可能想要阅读我的文章关于整个问题。
发布于 2019-04-10 07:41:23
(SecureRandom)符合FIPS140-2中规定的统计随机数生成器测试,密码模块的安全要求,第4.9.1节
然而,同样的警告也适用于Android和Java:
许多SecureRandom实现都是以伪随机数生成器(PRNG)的形式实现的,这意味着它们使用确定性算法从真正的随机种子产生伪随机序列。其他实现可能产生真正的随机数,而其他实现则可能使用这两种技术的组合。
因此,简单的回答是:这取决于实现,但如果您对FIPS 140-2满意,那么SecureRandom在法律上就足以满足您的需要。
发布于 2014-09-13 00:10:36
关键的答案是,/dev/urandom,作为由linux内核定义的,保证不会阻塞。强调的是在产生足够的熵时不要拖住用户。如果android文档说他们使用/dev/urandom进行初始化,并且内核中没有足够的熵来提供随机数,那么内核将返回到伪随机算法。
根据内核文档,除了“长寿命加密密钥”之外,几乎所有用途都可以使用/dev/urandom。考虑到您的预期用途,我怀疑android将证明对您的目的来说是足够随机的。
https://stackoverflow.com/questions/25817133
复制相似问题