Cryptage: utilisation du vecteur d'initialisation par rapport à la clé?

j'utilise PHP's mcrypt la bibliothèque et le AES-256 (rijndael) algorithme, qui nécessite à la fois une clé + vecteur d'initialisation à exécuter.

mon cerveau logique ne va pas vraiment avec cela. Est - ce qu'une seule clé ne suffit pas?

scénario:

Si j'avais des données sensibles cryptées stockées dans une base de données, que seul le propriétaire devrait être en mesure de décrypter, serait-il approprié d'utiliser le mot de passe utilisateurs hashé à soit la clé ou le vecteur d'initialisation à ses données?

si la clé être considéré comme plus privé que le vecteur d'initialisation ou est-ce l'inverse?

18
demandé sur rook 2011-02-24 21:01:49

4 réponses

non, en fait une IV est vitale dans la plupart des implémentations. L'IV est également considéré comme sans danger pour le public, par exemple l'IV est transmis en clair pour WEP et WPA1/WPA2. Le problème se pose lorsque cette même clé+iv est utilisée pour chiffrer le même texte brut. Les textes codés seront identiques, sauf si vous utilisez une IV. Si un attaquant peut chiffrer du texte brut arbitraire avec cette clé, et puis voir le texte de chiffrement. Il s'agit d'une façon beaucoup plus rapide de brute forçant d'autres texte de chiffrement que l'attaquant a obtenu.

non seulement cela, la IV doit être aléatoire ou vous seriez en violation de CWE-329. La raison pourquoi c'est un problème est un peu plus subtil et je n'ai pas l'obtenir au début. Vous n'avez pas parlé de cela, mais j'espère que vous êtes en utilisant soit l' modes CBC ou CMAC

L'utilisation d'une fonction de hachage d'un mot de passe est presque identique à l'aide d'un String2Key fonction. C'est une conception solide tant qu'un attaquant ne peut pas utilisez L'Injection SQL pour obtenir la clé.

11
répondu rook 2017-05-23 12:14:50

n'utilisez pas le mot de passe hashé comme source unique pour la clé et IV. En règle générale, vous devez générer random IV chaque fois que vous mettez à jour des données cryptées et de stocker IV avec ces données. La clé peut être réutilisée plusieurs fois, mais utilisez le hachage salé et stocker le sel avec des données aussi.

si vous Hachez les mots de passe des utilisateurs et les utilisez comme des clés de cryptage, les utilisateurs avec les mêmes mots de passe auront les mêmes clés. Selon la structure de votre base de données et les droits d'accès des intrus, il pourrait y avoir des cas lorsque les utilisateurs avec les mêmes mots de passe peuvent être détectés. Ajoutez au moins un nom d'utilisateur unique à ce hachage.

si vous ne changez pas IV pour chaque mise à jour de données, des informations sur les changements de données peuvent être divulguées. Avec le mode CBC ou CFB, les premiers blocs de texte en clair seront cryptés en texte chiffré identique jusqu'au premier changement de texte en clair, de sorte que la position de ce changement peut être déterminée.

7
répondu blaze 2011-02-25 10:09:53

Le Vecteur D'initialisation (IV) n'est pas une clé du tout, et n'est pas secret. En fait, il est souvent exposé (par exemple prépayé aux données cryptées). Il est utilisé comme une entrée aléatoire supplémentaire à l'algorithme de cryptage de sorte que le résultat de cryptage des mêmes données claires est différent chaque fois que vous utilisez un IV différent. De cette façon, les statistiques ne peuvent pas être recueillies sur les données cryptées. Elle n'améliore pas à elle seule la puissance de cryptage.

Vous pouvez regarder ici pour nice des diagrammes montrant comment et pourquoi IV est utilisé.

6
répondu davka 2011-02-24 18:06:33

si vous utilisez le mode EBP du chiffrement de bloc, ou la plupart des chiffrements de flux, les combinaisons clé identique+IV sur des textes différents offriront aux attaquants une vue directe sur le résultat XOR de la clé. Ceci par extension révèle la clé elle-même et dans une certaine mesure le mot de passe.

mais est-ce que je veux dire que les IV sont vraiment nécessaires? Aucun. Aussi longtemps que vous changez votre mot de passe à chaque fois sur votre prochain bloc plaintext (même le même bloc la deuxième fois), vous êtes complètement bien sans IVs. En fait, tout ce qu'un IV n'est que l'automatisation du processus ci-dessus.

0
répondu NISplendidTerrains 2015-03-12 04:51:10