Question

Est-il recommandé d'utiliser un vecteur d'initialisation pour chiffrer / déchiffrer mes données? Cela rendra-t-il les choses plus sûres? Est-ce une de ces choses qui doivent être évaluées au cas par cas?

Pour mettre cela dans un contexte réel, la fonction de cryptographie Win32, CryptSetKeyParam permet de définir un vecteur d’initialisation sur une clé avant le cryptage / décryptage. D'autres API le permettent également.

Qu'est-ce qui est généralement recommandé et pourquoi?

Était-ce utile?

La solution

Un IV est essentiel lorsque la même clé peut être utilisée pour chiffrer plusieurs messages.

La raison en est que, dans la plupart des modes de cryptage, deux messages cryptés avec la même clé peuvent être analysés ensemble. Par exemple, dans un simple flux chiffré en flux, XORing deux textes chiffrés chiffrés avec la même clé donne le XOR des deux messages, à partir duquel le texte en clair peut être facilement extrait à l’aide des techniques classiques de cryptanalyse.

Une IV faible fait partie de ce qui a rendu WEP cassable.

Un IV mélange en gros des données uniques non secrètes à la clé pour empêcher que la même clé ne soit utilisée deux fois.

Autres conseils

Dans la plupart des cas, vous devez utiliser IV. Puisque IV est généré de manière aléatoire à chaque fois, si vous chiffrez deux fois les mêmes données, les messages chiffrés seront différents et il sera impossible pour l'observateur de dire si ces deux messages sont identiques.

Regardez bien une image (voir ci-dessous) du mode CBC. Vous réaliserez rapidement qu’un attaquant connaissant le vecteur d’information est comme l’attaquant connaissant un bloc précédent de texte chiffré (et oui, il en sait déjà beaucoup).

Voici ce que je dis: la plupart des "problèmes". avec IV = 0 sont des problèmes généraux avec les modes de chiffrement de bloc lorsque vous n'assurez pas l'intégrité des données. Vous devez vraiment assurer l'intégrité.

Voici ce que je fais: utiliser une somme de contrôle forte (hachage cryptographique ou HMAC) et l'ajouter à votre texte en clair avant le cryptage. Il y a votre premier bloc connu de texte chiffré: il s'agit de l'IV de la même chose sans la somme de contrôle, et vous avez besoin de la somme de contrôle pour un million d'autres raisons.

Enfin: aucune analogie entre CBC et les chiffreurs de flux n’est pas très perspicace à mon humble avis.

Regardez l'image du 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

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

Si la même clé est utilisée plusieurs fois pour plusieurs secrets différents, des modèles peuvent apparaître dans les résultats chiffrés. L'IV, qui devrait être pseudo aléatoire et utilisé une seule fois avec chaque touche, est là pour obscurcir le résultat. Vous ne devez jamais utiliser deux fois le même IV avec la même clé, cela irait à l’encontre de son objectif.

Pour ne pas avoir à vous soucier de garder une trace de l'IV, la chose la plus simple à faire est d'ajouter ou de l'ajouter au secret chiffré obtenu. De cette façon, vous n'aurez pas à y penser beaucoup. Vous saurez alors toujours que le premier ou le dernier N bits est le IV.

Lorsque vous déchiffrez le secret, séparez simplement le vecteur IV, puis utilisez-le avec la clé pour déchiffrer le secret.

  

Est-ce une de ces choses qui doivent être évaluées au cas par cas?   base?

Oui, c'est ça. Lisez toujours le chiffre que vous utilisez et comment il attend ses entrées. Certains chiffreurs n'utilisent pas de solutions intraveineuses mais exigent que les sels soient en sécurité. Les IV peuvent être de différentes longueurs. Le mode de chiffrement peut changer l'usage de l'IV (s'il est utilisé du tout) et, par conséquent, les propriétés dont il a besoin pour être sécurisé (aléatoire, unique, incrémental?).

Il est généralement recommandé, car la plupart des utilisateurs sont habitués à utiliser AES-256 ou un chiffrement de bloc similaire dans un mode appelé "Chaîne de blocs de chiffrement". C'est un bon choix judicieux par défaut pour de nombreuses utilisations en ingénierie et vous devez disposer d'un IV approprié (non répétitif). Dans ce cas, ce n'est pas facultatif.

Le système IV permet de chiffrer le texte en clair de sorte que le texte chiffré soit plus difficile à déchiffrer pour un attaquant. Chaque bit d’IV que vous utilisez doublera les possibilités du texte chiffré à partir d’un texte simple donné.

Par exemple, chiffrons 'hello world' en utilisant un IV de caractère. Le IV est sélectionné au hasard pour être 'x'. Le texte qui est ensuite crypté est alors "xhello world", ce qui donne "asdfghjkl". Si nous le chiffrons à nouveau, générez d'abord un nouveau IV - disons que nous obtenons «b» cette fois-ci - et chiffrons comme d'habitude (chiffrant ainsi «bhello world»). Cette fois, nous obtenons 'qwertyuio'.

Le fait est que l’attaquant ne sait pas ce qu’est le IV et doit donc calculer chaque IV possible pour un texte brut donné afin de trouver le texte chiffré correspondant. De cette manière, le système IV agit comme un sel de mot de passe . Le plus souvent, un IV est utilisé avec un chiffre de chaînage (un chiffre ou un chiffre en bloc). Dans un chiffrement de bloc de chaînage, le résultat de chaque bloc de texte brut est transmis à l'algorithme de chiffrement pour rechercher le texte de chiffrement du bloc suivant. De cette manière, chaque bloc est enchaîné.

Alors, si vous avez une IV aléatoire utilisée pour chiffrer le texte brut, comment la déchiffrez-vous? Simple. Passez le IV (en texte brut) avec votre texte crypté. En utilisant notre premier exemple ci-dessus, le texte chiffré final serait 'xasdfghjkl' (texte chiffré IV +).

Oui, vous devriez utiliser un IV, mais assurez-vous de le choisir correctement. Utilisez une bonne source de nombres aléatoires pour le faire. Ne jamais utiliser le même IV deux fois. Et jamais utilisez une IV constante.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top