Si je crypte certaines données avec une clé et un vecteur d'initialisation générés aléatoirement, je stocke les trois informations dans la même ligne de tableau; est-il nécessaire de crypter l'IV ainsi que la clé?
Structure de table simplifiée:
Veuillez supposer que l'architecture et la méthode sont nécessaires: l'explication derrière elle est longue et terne.
De Wikipedia :
Un vecteur d'initialisation a des exigences de sécurité différentes d'une clé, donc le IV n'a généralement pas besoin d'être secret . Cependant, dans la plupart des cas, , il est important qu'un vecteur d'initialisation ne soit jamais réutilisé sous la même clé . Pour CBC et CFB, la réutilisation d'un IV laisse échapper des informations sur le premier bloc de texte en clair et sur tout préfixe commun partagé par les deux messages.
Vous n'avez pas besoin de garder le IV secret, mais il doit être aléatoire et unique.
Bien que dans votre cas, l'IV devrait être correct en texte brut dans la base de données, il existe une vulnérabilité grave si vous autorisez l'utilisateur à contrôler le IV.
L'IV dans le décryptage est utilisé (et uniquement utilisé) pour XOR
le premier bloc dans le texte en clair final - donc si un attaquant peut contrôler le IV, ils peuvent contrôler arbitrairement le premier bloc de données, et le reste du texte en clair survivra sans modification.
Si l'attaquant connaît le texte en clair d'origine du premier bloc, le problème est à nouveau amplifié car l'attaquant peut choisir des données arbitraires pour le premier bloc sans essai et Erreur.
Ceci est particulièrement important dans le cas où des données chiffrées sont transmises via des canaux non fiables avec le IV, peut-être dans un navigateur ou une application, etc.