Question

J'écris un programme qui prend une phrase secrète de l'utilisateur, puis écrit des données cryptées pour déposer. La méthode que j'ai proposée jusqu'à présent est la suivante:

  • Générez un IV 128 bits à partir de hachage du nom de fichier et de l'heure du système, et écrivez ceci au début du fichier.
  • Générez une clé de 256 bits à partir de la phrase secrète à l'aide de SHA256.
  • Cryptez les données (en commençant par une signature statique 32 bits) avec cette clé à l'aide d'AES en mode CBC, et écrivez-la dans le fichier.

Lors du décryptage, l'IV est lu, puis la phrase de passe utilisé pour générer la clé de la même manière, et les 32 premiers bits sont comparés à ce que la signature devrait être pour savoir si la clé est valide.

Cependant je regardais le Exemple AES Fourni dans Polarssl (La bibliothèque que j'utilise pour faire le hachage et le chiffrement), et ils utilisent une méthode beaucoup plus complexe:

  • Générez un IV 128 bits à partir de hachage du nom de fichier et de la taille du fichier, et écrivez ceci au début du fichier.
  • Générez une clé de 256 bits à partir de hachage (SHA256) La phrase secrète et l'IV ensemble 8192 fois.
  • Initialisez le HMAC avec cette clé.
  • Cryptez les données avec cette clé à l'aide d'AES en mode CBC et écrivez-la dans le fichier, tout en mettant à jour le HMAC avec chaque bloc crypté.
  • Écrivez le HMAC à la fin du fichier.

J'ai l'impression que la deuxième méthode est plus sécurisée, mais je n'ai pas assez de connaissances pour étayer cela, à part cela, il semble plus compliqué.

  • Si c'est plus sûr, quelles sont les raisons de cela?
  • L'ajout d'un HMAC à la fin du fichier est-il plus sécurisé que d'avoir une signature au début des données cryptées?
  • Le hachage 8192 fois augmente-t-il la sécurité?

Noter: Il s'agit d'un projet open source, donc quelle que soit la méthode que j'utilise, elle sera librement disponible pour quiconque.

Était-ce utile?

La solution

La deuxième option est plus sécurisée.

Votre méthode ne fournit aucune intégrité de message. Cela signifie qu'un attaquant peut modifier des parties du texte chiffré et modifier à quoi le texte brut se décrypte. Tant qu'ils ne modifient rien qui modifiera votre signature statique 32 bits, vous y ferez confiance. Le HMAC sur la deuxième méthode fournit l'intégrité du message.

En hachant la clé 8192, il ajoute des étapes de calcul supplémentaires pour que quelqu'un puisse essayer la clé. Supposons qu'un utilisateur choisira un mot de passe basé sur le dictionnaire. Avec votre méthode, un attaquant doit effectuer SHA256(someguess) Et puis essayez de décrypter. Cependant, avec la version Polarssl, ils devront calculer SHA256(SHA256(SHA256...(SHA256(someguess))) pour 8192 fois. Cela ne fera que ralentir un attaquant, mais cela pourrait suffire (pour l'instant).

Pour ce que cela vaut, veuillez utiliser une bibliothèque existante. La cryptographie est difficile et est sujette à des erreurs subtiles.

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