Je tiens à mettre en œuvre la forme la plus sécurisée et la plus fiable de la cryptographie clé symétrique de la clé de mon application. L'utilisateur doit saisir un mot de passe pour chiffrer / déchiffrer, et c'est tout. Pour Rijndaelmaninging, il faut entrer une clé et un IV. Je ne sais pas comment aborder la situation. En ce moment, j'ai le mot de passe saisi en train d'être haché par SHA256, puis utilisé comme clé pour le Rijndael. Qu'est-ce que j'utilise pour le IV? Un autre mot de passe? P>
3 Réponses :
Vous pouvez utiliser générateur < / Code> (remplacé dans rijndaélanied code>) pour générer le IV. Vous pouvez ensuite transmettre le IV avec le CYPHertext. Vous pouvez penser à un IV comme agissant un peu comme un sel - essentiellement, il empêche le même clairant d'être crypté au même CYPHertext à chaque fois. Ne réutilisez pas un IV - cela le rend inutile. Générer un nouveau pour chaque message. P>
Existe-t-il une norme spécifique sur l'endroit où l'annexe IV à un texte chiffré?
Mettez-le avant le chiffre. De cette façon, vous pouvez avoir déchiffrer en mode streaming.
Est-il sécuritaire de préparer le IV au texte cypher? L'attaquant saurait que le premier, dire 128 bits, du message est le IV, et cela ne devrait pas être un problème?
@Mystic le iv code> n'est pas secret; Il est juste utilisé pour que la même clé code> code> ne soit pas utilisée plus d'une fois seule.
Il existe une fonction spéciale pour obtenir une clé d'un mot de passe, je crois que c'est plus sûr qu'un hash. Vous voudrez peut-être rechercher la classe YHE RFC2898GEBYTES. Il nécessite un C'est une pratique acceptée pour ajouter le numéro IV (et le sel) non chiffré au message. p> li>
Si vous créez une instance de la classe Rijndaal, elle génère automatiquement un IV, l'expéditeur peut simplement l'utiliser. p> li>
ol> sel code> et un mot de passe. p> li>
Jon Skeet est correct sur le IV, mais vous avez également un problème avec la façon dont vous dérivez une clé. p>
Il suffit d'utiliser une seule ronde de SHA256 sur le mot de passe en clairexuant est pas em> sécurisé. Il laisse le système ouvert à une simple attaque de dictionnaire. P>
Il existe une classe de fonctions conçues pour prendre un mot de passe en plainte et créer une clé de chiffrement à partir d'eux - ce sont des "fonctions de dérivation clés". Vous devez utiliser l'un de ces - PBKDF2 est un bon choix - pour générer votre clé. Le Le KDF nécessitera un sel généré aléatoirement à chaque fois et inclus avec le texte de chiffrement (comme le IV). P> rfc2898grivantBytes code> classe implémente PBKDF2. P>