Algorithme de chiffrement.init() de chaque message?
Assumer deux clients sont l'échange sécurisé de messages.
Doit ce bloc est exécuté tous les temps pour chaque message, ou peut-étape(s) être fait qu'une seule fois au démarrage:
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
output = cipher.doFinal(content);
Je suppose que de prêter un certain contexte - bien que je n'ai pas (encore) de comprendre le fonctionnement interne complètement, c'est ma compréhension que pour des raisons de sécurité, il est important de changer la IV pour chaque message. Donc, je pense que la réponse à cette question dépendra de savoir si cette étape se passe sous le capot à l'doFinal() stade ou init()....?
OriginalL'auteur davidkomer | 2012-10-25
Vous devez vous connecter pour publier un commentaire.
Vous avez raison: pour être en sécurité, vous devez utiliser un nouveau,aléatoire, IV, pour chaque message. Cela signifie que vous devez recréer l'algorithme de chiffrement ou de manière aléatoire définir le IV vous-même pour chaque message. Le premier est probablement plus sûr, car si vous modifiez les algorithmes ou les modes, il y a peut-être un autre état, vous devez définie de façon aléatoire ainsi et à la réinitialisation de l'algorithme de chiffrement doit gérer tout cela.
Si vous ne le faites pas, vous vous retrouvez avec le même plutôt mauvais bug SSL eu avec IV la réutilisation.
De chiffrement.doFinal ne réinitialise pas le chiffrement aléatoire IV. En fait, son bien pire que cela, il apparaît pour réinitialiser l'état interne de la même IV vous avez commencé avec. Comme indiqué par le présent code.
conseils gratuits: oui, vous pouvez garder en s'appuyant sur SecureRandom
nextBytes est très bien. Juste assurez-vous que lorsque vous créez le RNG de vous laisser la graine elle-même( c'est à dire de ne pas fournir certains prévisible de la graine à la il lorsque vous démarrez) donc f = SecureRandom(), f.nextBytes() doit être fine, mais SecureRandom(somefixedvalue) ou SecureRand(currentTime) ne fonctionnerait pas.
Merci - et sur un plan plus directement liées note 😉 le IV se passait en mode natif par Chiffrement? c'est à dire faire de chacun des clients ont besoin de préfixe de la nouvelle aléatoire iv pour le codage, et la bande le préfixe pour une utilisation sur le décodage? ou est-ce géré sous le capot par Chiffrement?
Yep - ajout/décapage a été nécessaire, merci! (IV est de 16 octets, avec AES). Va regarder dans l'authentification...
OriginalL'auteur imichaelmiers