Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在Solaris SecureRandom.setSeed(“abc”)中被绕过_Security_Random_Cryptography - Fatal编程技术网

Security 在Solaris SecureRandom.setSeed(“abc”)中被绕过

Security 在Solaris SecureRandom.setSeed(“abc”)中被绕过,security,random,cryptography,Security,Random,Cryptography,您好,我有以下代码片段: SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" , "SUN"); secureRandom.setSeed("seed"); keyGen.init(DEFAULT_KEY_LENGTH, secureRandom); SecretKey secretKey = keyGen.generateKey(); byte[] encodedKey = secretKey.getEncoded()

您好,我有以下代码片段:

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" , "SUN");
secureRandom.setSeed("seed");
keyGen.init(DEFAULT_KEY_LENGTH, secureRandom);
SecretKey secretKey = keyGen.generateKey();
byte[] encodedKey = secretKey.getEncoded();
“编码密钥”每次在平台窗口、AIX和linux上都会给我相同的结果。HP Unix,但它在solaris中给出了不同的结果,似乎setSeed()不适用于solaris或被绕过

请帮帮我,从上两天起我就被这件事弄得头破血流

谢谢
Shivam

SecureRandom.setSeed(long)上的Javadoc说:

给定的种子是对现有种子的补充,而不是替代

SecureRandom
的工作方式与
java.util.Random
不同,
Random
算法在所有实现中都是标准化的,而
SecureRandom
算法没有任何保证

还要注意

[…]传递到SecureRandom对象的任何种子材质都必须是不可预测的


但事实并非如此。如果您的种子材料不是不可预测的,那么生成的随机数可能也不会是不可预测的,因此加密安全的随机数生成器没有任何用处。

如果您以这种方式声明您的keyGen keyGen=KeyGenerator.getInstance(“DES”、“SunJCE”) 您可以在solaris上获得相同的密钥。
所有其他平台都使用SunJCE作为默认提供程序,但solaris使用SunPKCS11 solaris作为默认提供程序。

crypt strong PRNG提供的保证是,您需要大量以前的示例来猜测生成的下一个数字。可预测种子的问题在于,攻击者可以使用以前的观察结果来帮助攻击,从而扩大漏洞窗口。如果种子是完全可预测的,那么他们就可以可靠地猜测。但我不明白为什么每次在windows、linux和AIX上执行代码时,我都能用相同的密码短语获得相同的密钥,但只有在solaris上我遇到了这个问题。@user2131172,因为SecureRandom算法不是标准的。除了Solaris之外,在您测试过的所有平台上都是一样的。Solaris算法也遵循该规范–没有任何东西禁止您正在经历的行为。我在回答的最后一句话中想说的是,在这种情况下,您显然不需要SecureRandom的加密安全属性:改为使用标准化随机。为什么要将种子传递给安全PRNG?在可能有用的测试中(即使这是值得怀疑的),在生产代码中肯定不是。如果您想从短密钥派生随机数据,请使用定义良好的流密码(例如AES-CTR)。