is AES key random?

放肆的年华 提交于 2020-01-01 03:32:05

问题


AES key may be generate by this code

KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); 

but

If I have a "very reliable" method of generating random numbers can I use it in such a way

SecureRandom rnd = new SecureRandom();
byte[] key = new byte[16];
rnd.nextBytes(key);

is key obtained by this method reliable ?

or it ONLY must generated by some SPECIAL algorithm


回答1:


The AES key can be any 128 bits. It should be be practically unguessable, whatever the method of creating it.

For Example:

SecureRandom sr = new SecureRandom()

key = new byte[16];
iv = new byte[16];

sr.nextBytes(key);
sr.nextBytes(iv);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key,"AES"), new IvParameterSpec(IV));

SecretKeySpec, by the way, is just a thin wrapper around a byte[] --- it does not transform the key in any way. No "special algorithm".




回答2:


To add to the other answers ... I believe that the reason that the basic Random functions aren't secure are two reasons:

  1. Slight statistical biases that are acceptable for non-security related situations, but narrow the distributions unacceptably for security applications.
  2. They are seeded by the system DATETIME. Even knowing WHEN you generated your key - to a poor accuracy of +/- 6 months - would significantly reduce the brute force search space.



回答3:


You can add a random algorithm using SecureRandom :

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    SecureRandom random = new SecureRandom(); // cryptograph. secure random 
    keyGen.init(random); 
    SecretKey secretKey = keyGen.generateKey();



回答4:


It sounds like you're trying to generate an AES key based on a password.

If this is the case, you can use javax.crypto.SecretKeyFactory's generateSecret method, passing in a javax.crypto.spec.PBEKeySpec as the parameter. The PBEKeySpec allows to to specify the password as an argument to its constructor.



来源:https://stackoverflow.com/questions/10252449/is-aes-key-random

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!