La génération aléatoire IV pour l'AES en Java
Je suis la mise en œuvre et le chiffrement AES moteur pour PBE sous android, et j'ai trouvé deux façons de mettre en œuvre la création de la IV et je voudrais savoir lequel est le mieux et le plus sûr pour arriver IvParameterSpec
:
Méthode #1:
SecureRandom randomSecureRandom = SecureRandom.getInstance("SHA1PRNG");
byte[] iv = new byte[cipher.getBlockSize()];
randomSecureRandom.nextBytes(iv);
IvParameterSpec ivParams = new IvParameterSpec(iv);
Méthode #2:
AlgorithmParameters params = cipher.getParameters();
byte[] iv2 = params.getParameterSpec(IvParameterSpec.class).getIV();
ivParams = new IvParameterSpec(iv2);
OriginalL'auteur user1576396 | 2015-03-25
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser la méthode #1, parce que l'API Java spécifie les éléments suivants pour la
Cipher.init()
API qui prend tout de cryptage/décryptage mode et de la clé:(l'emphase est mienne).
De sorte qu'il est pas clair quels sont les différents fournisseurs de faire quand méthode 2 est choisi. En regardant le code source Android, il semble qu'au moins certaines versions (y compris la version 21?) va crée pas un hasard IV - aléatoires IV la création semble commenté.
La méthode 1 est également plus transparent et il est - à mon avis - plus facile sur les yeux.
Noter qu'il est généralement préférable d'utiliser des
new SecureRandom()
et de laisser le système de la figure qui RNG est le meilleur."SHA1PRNG"
n'est pas bien défini, peut varier au sein d'implémentations et est connu d'avoir eu la mise en œuvre des faiblesses, surtout sur Android.De sorte que le résultat final devrait être quelque chose comme:
Méfiez-vous que GCM mode qui fonctionne le mieux avec un 12 octets IV au lieu de 16 octets IV - la taille du bloc de l'AES.
OriginalL'auteur Maarten Bodewes