Java 保留SecureRandom(SHA1PRNG)种子机密-在种子设定之前计算哈希?

Java 保留SecureRandom(SHA1PRNG)种子机密-在种子设定之前计算哈希?,java,random,hash,random-seed,Java,Random,Hash,Random Seed,我正在使用SecureRandom和SHA1PRNG生成一个随机序列。我不会让SecureRandom自己播种,我正在使用我自己的值来播种它。(请不要告诉我这是不安全的,我有我这样做的理由) 然而,我不想让任何人知道我用了什么种子。种子必须保持秘密,并且不能从随机序列中重新计算种子 从我的值中计算SHA-512并使用它进行排序有意义吗?或者SecureRandom会从种子本身创建SHA1哈希吗 长话短说:如果我想保守“value”的秘密,我应该使用“value”.getBytes()或“valu

我正在使用SecureRandom和SHA1PRNG生成一个随机序列。我不会让SecureRandom自己播种,我正在使用我自己的值来播种它。(请不要告诉我这是不安全的,我有我这样做的理由)

然而,我不想让任何人知道我用了什么种子。种子必须保持秘密,并且不能从随机序列中重新计算种子

从我的值中计算SHA-512并使用它进行排序有意义吗?或者SecureRandom会从种子本身创建SHA1哈希吗

长话短说:如果我想保守“value”的秘密,我应该使用“value”.getBytes()或“value”的SHA-512散列来种子SecureRandom吗


我在哪里可以找到SHA1PRNG算法如何工作的信息?

从安全角度看,使用静态值与使用静态值的散列没有任何实际区别。由于
sha1(x)
始终是相同的值,因此您实际上只是将一个静态值交换为另一个静态值


不管是哪种方式,如果有人费事取消对您的程序的组合,他们会发现您使用的是什么种子。

事实上,我使用一个与随机值串联的静态值初始化SecureRandom。我不会发布我的程序,而是它生成的随机序列。我是否正确地理解,即使在播种之前我没有重新计算种子,也不可能重新计算种子?正确。但是这个系统的安全性直接关系到猜测进入种子的随机比特的难度。在PRNG和seeds中存在大量安全漏洞,因此您应该(1)假设攻击者可以访问您的源代码(2)收集足够的不可用位,(3)使用sha_512(concat(static,random))为您的PRNG设置种子。最近,人们开始怀疑是否将
/dev/random
用作数据源。它被认为是一种相对安全的获取随机比特的方法,但最近我们听说,在一些操作系统上,NSA可能已经破坏了它。