37 votes

Devrais-je utiliser un vecteur d'initialisation (IV) avec mon chiffrement?

Est-il préférable que j'utilise un vecteur d'initialisation pour chiffrer/déchiffrer mes données? Ça va rendre les choses plus sécurisé? C'est une de ces choses qui doivent être évalués au cas par cas?

Pour mettre cela en contexte réel, le Win32 Cryptographie fonction, CryptSetKeyParam permet le réglage d'un vecteur d'initialisation sur une touche avant le chiffrement/déchiffrement. D'autres API est également le permettre.

Ce qui est généralement recommandé et pourquoi?

25voto

Andrew Points 629

Un IV est essentiel lors de la même clé peut être utilisée pour chiffrer plus d'un message.

La raison en est que, dans la plupart des modes de chiffrement, deux messages chiffrés avec la même clé peuvent être analysés ensemble. Dans un simple algorithme de chiffrement par flux, par exemple, XORing deux chiffrés chiffrés avec la même clé de résultats dans le XOR de deux messages, à partir de laquelle le texte en clair peut être facilement extraites à l'aide d'traditionnelles techniques de cryptanalyse.

Un faible IV est en partie ce qui fait WEP cassante.

IV essentiellement des mélanges uniques, non-secret des données dans la clé de contact pour éviter la même touche jamais être utilisé deux fois.

5voto

Purfideas Points 1852

Prendre un bon coup d'oeil à une photo (voir ci-dessous), du mode CBC. Vous vous rendrez vite compte qu'un attaquant de connaître le IV est comme l'attaquant savoir un précédent bloc de texte chiffré (et oui, ils savent déjà beaucoup de cela).

Voici ce que je dis: la plupart des "problèmes" avec IV=0 sont des problèmes généraux liés à bloquer les modes de chiffrement lorsque vous n'avez pas d'assurer l'intégrité des données. Il faut vraiment s'assurer de l'intégrité.

Voici ce que j'ai à faire: utiliser une forte somme de contrôle (de hachage cryptographique ou HMAC) et ajouter à votre texte en clair avant de les crypter. Il y a de votre premier bloc de texte chiffré: c'est le IV de la même chose sans la somme de contrôle, et vous avez besoin de la somme de contrôle d'un million d'autres raisons.

Enfin: toute analogie entre la SRC et des chiffrements de flux n'est pas très perspicace à mon humble avis.

Il suffit de regarder la photo de mode CBC, je pense que vous serez agréablement surpris.

Voici une photo:

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

texte du lien

2voto

Peter Stone Points 1962

J'ai trouvé la rédaction de HTTP Digest Auth ( RFC 2617 ) très utile pour comprendre l'utilisation et la nécessité des solutions IV / nonces.

0voto

John Points 183

Le IV permet en clair pour être chiffrées telles que le texte chiffré est plus difficile à décrypter pour un attaquant. Chaque bit de IV vous utilisez permettra de doubler les possibilités de texte crypté à partir d'un texte brut.

Par exemple, nous allons chiffrer 'bonjour le monde' à l'aide d'un IV d'un caractère de long. Le IV est choisi au hasard pour être "x". Le texte qui est ensuite chiffré est alors 'xhello monde", qui yeilds, disons, 'asdfghjkl'. Si nous chiffrer à nouveau, d'abord générer une nouvelle IV--dire que nous obtenir 'b' à cette époque -, et de chiffrer comme normal (donc le cryptage 'bhello monde"). Cette fois, nous obtenons 'qwertyuio'.

Le point est que l'attaquant ne sais pas ce que le IV est et doit donc calculer tous les possibles IV pour un texte simple de rechercher le texte chiffré. De cette façon, le IV agit comme un mot de passe de sel. Le plus souvent, par un IV est utilisé avec un chaînage de chiffrement (soit un cours d'eau ou de chiffrement par bloc). Dans un chaînage de chiffrement par bloc, le résultat de chaque bloc de texte en clair est nourri de l'algorithme de chiffrement à trouver le texte de chiffrement pour le prochain bloc. De cette façon, chaque bloc est enchaînés.

Donc, si vous avez un hasard IV utilisée pour chiffrer le texte en clair, comment voulez-vous de les décrypter? Simple. Passer le IV (en clair) avec votre texte crypté. À l'aide de notre premier exemple ci-dessus, la version finale du texte de chiffrement serait "xasdfghjkl" (IV + texte chiffré).

Oui, vous devez utiliser un IV, mais assurez-vous de choisir correctement. Utiliser un bon nombre aléatoire de la source de à rendre. Ne jamais utiliser le même IV deux fois. Et ne jamais utiliser une constante IV.

L'article de Wikipedia sur l'initialisation des vecteurs fournit un aperçu général.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X