NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024
-
25 juin 2012 à 19:02
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 2016
-
27 juin 2012 à 08:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 27 juin 2012 à 08:41
*de VB excuse. Et le mode d'opération par défaut est apparemment CBC d'apres MSDN, ce qui est bon, mais il serait souhaitable de l'ajouter explicitement dans le code, au cas ou le défaut changerait.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 27 juin 2012 à 08:34
Trois points importants:
- l'IV ne DOIT PAS etre dérivé du mot de passe, il doit etre aléatoire (et plus, dépendant du mode d'opération utilisé) - utilises le générateur pseudoaléatoire cryptographique offert par C#. Tout l'intéret d'un IV est qu'il permet de chiffrer différemment meme avec la meme clef, dans ton exemple le meme IV est toujours associé a la meme clef, ca ne sert donc a rien. Il faut générer un IV aléatoire a chaque fois et le stocker dans le fichier!!
- tu ne spécifies pas le mode d'opération utilisé pour AES - lequel est utilisé par défaut? ECB n'est pas sécure si la taille du fichier est plus grande que 16 octets.
- il faudrait ajouter un HMAC d'integrité a coté de l'IV dans le fichier pour garantir que le fichier ne soit pas modifié par un attaquant, pour obtenir ca il suffit de faire un HMAC du fichier chiffré en utilisant la clef de chiffrement comme clef (avec par exemple SHA256 ou SHA512)
alex_vino
Messages postés27Date d'inscriptionjeudi 23 mars 2006StatutMembreDernière intervention25 mars 2011 26 juin 2012 à 14:02
Entierement d'accord avec NHenry.
J'ai réalisé un peu pres la meme chose mais sous forme de bibliotheque facilement utilisable dans tout projet .Net,
je laissé le choix de différentes méthodes de crypto: DES, Triple DES et Rinjkaert.
De plus tu n'étais pas obligé d'enregistrer le résultat sous forme de fichier, tu pouvais faire: var secretString = CryptLib.EncryptContent("blablabla")
Par ailleurs ce serait bien de faire des tests unitaires sur ce type de projet. Par exemple si tu encrypte un fichier XML ce serait bien que le décryptage ne perde pas l'indentation et tout le tralala.
Par exemple suivant les méthodes de crypto tu es limité a un certain nombre de bits pour le mot de passse (64bits pour DES = 8 lettres).
Bonne continuation.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 25 juin 2012 à 19:02
Ensuite, quitte à reprendre des codes tel quel, autant chercher à améliorer, par exemple en mettant les fonctions de cryptage dans un module pour pouvoir réutiliser facilement le code !!!
Sinon concernant le code :
Catch When Err.Number = 53
Utilises plutot le type d'erreur :
Catch Ex as Io.FileNotFoundException
Penses aussi à activer Option Strict et Option Explicit ainsi que de retirer l'import automatique de Microsoft.VisualBasic.
27 juin 2012 à 08:41
27 juin 2012 à 08:34
- l'IV ne DOIT PAS etre dérivé du mot de passe, il doit etre aléatoire (et plus, dépendant du mode d'opération utilisé) - utilises le générateur pseudoaléatoire cryptographique offert par C#. Tout l'intéret d'un IV est qu'il permet de chiffrer différemment meme avec la meme clef, dans ton exemple le meme IV est toujours associé a la meme clef, ca ne sert donc a rien. Il faut générer un IV aléatoire a chaque fois et le stocker dans le fichier!!
- tu ne spécifies pas le mode d'opération utilisé pour AES - lequel est utilisé par défaut? ECB n'est pas sécure si la taille du fichier est plus grande que 16 octets.
- il faudrait ajouter un HMAC d'integrité a coté de l'IV dans le fichier pour garantir que le fichier ne soit pas modifié par un attaquant, pour obtenir ca il suffit de faire un HMAC du fichier chiffré en utilisant la clef de chiffrement comme clef (avec par exemple SHA256 ou SHA512)
26 juin 2012 à 14:02
J'ai réalisé un peu pres la meme chose mais sous forme de bibliotheque facilement utilisable dans tout projet .Net,
je laissé le choix de différentes méthodes de crypto: DES, Triple DES et Rinjkaert.
De plus tu n'étais pas obligé d'enregistrer le résultat sous forme de fichier, tu pouvais faire: var secretString = CryptLib.EncryptContent("blablabla")
Par ailleurs ce serait bien de faire des tests unitaires sur ce type de projet. Par exemple si tu encrypte un fichier XML ce serait bien que le décryptage ne perde pas l'indentation et tout le tralala.
Par exemple suivant les méthodes de crypto tu es limité a un certain nombre de bits pour le mot de passse (64bits pour DES = 8 lettres).
Bonne continuation.
25 juin 2012 à 19:02
2 choses, je commence par la plus importante :
--------------------------------------
TU POURRAIS AU MOINS CITER TES SOURCES :
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/1750a192-520b-4b75-b08f-48b24fd2209c/
http://stackoverflow.com/questions/9243034/how-secure-is-vb-net-rijndael-managed-encryption-or-aes
--------------------------------------
Ensuite, quitte à reprendre des codes tel quel, autant chercher à améliorer, par exemple en mettant les fonctions de cryptage dans un module pour pouvoir réutiliser facilement le code !!!
Sinon concernant le code :
Catch When Err.Number = 53
Utilises plutot le type d'erreur :
Catch Ex as Io.FileNotFoundException
Penses aussi à activer Option Strict et Option Explicit ainsi que de retirer l'import automatique de Microsoft.VisualBasic.