我想在我用 java 实现的密钥生成中实现更多的随机性,因为密钥强度取决于它。
我想用java.security.KeyPairGenerator
来创建私钥和公钥。可以使用SecureRandom
对象定义种子。
SecureRandom random = new SecureRandom();
byte[] rand = new byte[8]; // or only one byte
想象一下,我创建random byte[]
如下:
// new KeyPress registered
long currentTime = System.currentTimeMillis();
long time = currentTime - lastTime;
lastTime = currentTime;
byte = time % Byte.MAX_VALUE;
// add byte to array or to the SecureRandom object
random.setSeed(byte);
初始化方法允许将种子添加到生成器对象。这应该会增加密钥的随机性。
// adds the seed to the generator
keyGen.initialize(4096, random);
问题是我应该在所有用户输入之后还是在例如 8 个字节之后设置密钥生成器的种子?我知道这里获得的随机性取决于系统时钟的精度。但我认为 currentTimeMillis() 方法是精确的。
你认为这是更多随机性的解决方案吗?或者你认为这不会改变什么?
EDIT 1 03.12.13 首先,感谢您的意见和想法!@Quincunx“我会说 SecureRandom 可能足够随机。” 够了干什么?我的意思是我认为这取决于你需要它。正确的?问题是我怎样才能增加随机性?!@IT-Pro 是的,我可以使用时间的平方,但我认为用户输入更随机,对吧?您的意思是说在用户输入后收集一个字节数组并在用户完成所有输入到生成器后将其传递?
编辑 2 03.12.13 @Erickson 我认为你所说的不是真的!“这些系统级设备已经从按键中收集熵”你能分享一个链接吗?你可能比我对这个话题有更多的理解,但是如果你说这样的话,我想阅读更多关于它的细节!