web-dev-qa-db-fra.com

Comment un pirate sait-il combien de fois un mot de passe a été haché?

J'ai lu beaucoup de questions sur les fonctions de sécurité et de hachage sur ce site et sur d'autres. Je ne suis pas un expert, juste un esprit curieux et à ma connaissance, plus il y a d'itérations utilisées pour hacher un mot de passe, mieux c'est et vous êtes censé obtenir une sortie égale à une entrée (collision modulo avec des fonctions cassées). À cet égard, la sortie ne sera pas la même si le nombre d'itérations varie.

Mais ce que je ne comprends pas, c'est comment un pirate qui essaie de trouver la plaine sait combien d'itérations ont été utilisées. Parce qu'il doit le savoir ou ai-je raté quelque chose?

34
NKD

Le nombre de tours est souvent stocké avec le mot de passe et le hachage. Par exemple, en utilisant bcrypt:

$2a$10$oEuthjiY8HJp/NaBCJg.bu76Nt4eY4jG/S3sChJhZjqsCvhRXGztm

Le 10 indique le facteur de travail, ajoutant effectivement 10 bits d'entropie en termes de temps de hachage à la force brute. 2^10 = 1024 rounds.

Il est stocké avec le hachage en cas de besoin d'augmenter le facteur de travail en raison de loi de Moore .

Si votre système avait un facteur de travail secret qui est le même pour tous les comptes, cela pourrait être utilisé comme mesure de sécurité supplémentaire, un peu comme un piment. En fait, dans le cas où un attaquant est en mesure de définir son propre mot de passe et d'afficher le hachage, vous devez le combiner avec un piment, sinon il pourrait déterminer le nombre d'itérations en jeu à partir de l'affichage du hachage résultant. Cependant, il est plus complexe de mettre cela en place à l'avenir que lors du stockage avec chaque mot de passe distinct, car vous devrez plutôt stocker un indicateur de la version de configuration d'itération utilisée pour chaque mot de passe. Vous pouvez cependant avoir un facteur de travail secret qui est ajouté à la valeur stockée avec le hachage.

Veracrypt a récemment ajouté une fonction PIM (Personal Iteration Multiplier) qui peut être utilisée comme un secret supplémentaire pour protéger vos données cryptées.

39
SilverlightFox

Comment un pirate sait-il combien de fois un mot de passe a été haché? De la même manière que vous.

Le but du hachage d'un mot de passe est de rendre impossible (en pratique très difficile) la détermination du mot de passe, même avec un accès complet à toutes les données .

L'autre condition requise pour le hachage est que le serveur doit être en mesure de déterminer si un mot de passe saisi est correct. Cela signifie qu'à un certain moment du processus de connexion, le serveur doit avoir accès à la formule complète de hachage d'un mot de passe.

Le but de faire varier le nombre de hachages est principalement de ralentir les attaques par force brute et d'augmenter l'espace de recherche pour les tables Rainbow, et cela fonctionne sans aucun secret. C'est pourquoi le nombre de tours est généralement stocké directement dans la base de données avec le hachage, comme dans la réponse de SilverlightFox.

Il existe des solutions qui stockent le nombre de tours séparément et tentent de le garder secret, et qui peuvent ajouter une couche de protection supplémentaire. Mais lors de l'évaluation du système de hachage, nous devons supposer que l'attaquant sait tout ce que nous savons.

Après tout, s'il y avait un endroit pour stocker le nombre de tours garantis pour ne pas être compromis, nous pourrions simplement y stocker les mots de passe et ne pas nous soucier du hachage.

14
Robert

Le nombre d'itérations et le sel sont stockés dans la même base de données, généralement dans le même champ que le hachage de mot de passe lui-même. Parce que le site a besoin de connaître ces choses autant qu'un attaquant potentiel et doit donc être facilement accessible. Par exemple, bcrypt les mots de passe hachés contiennent le (log base 2 du) nombre d'itérations séparé par des signes $ du reste du hachage.

7
Mike Scott

Bien que la réponse actuellement acceptée soit correcte et que le nombre d'itérations soit généralement stocké là où se trouvent les hachages eux-mêmes, même si ce n'était pas le cas:

  1. Par principe de Kerckhoff , vous devez supposer que l'attaquant peut le découvrir. En pratique, ils pourraient le découvrir par exemple en créant leur propre identifiant avec un mot de passe connu ou en programmant une tentative de connexion.

  2. Même si le nombre d'itérations était inconnu, cela ne ferait qu'ajouter un facteur constant au temps requis par l'attaquant pour les vérifier toutes, au moins avec les fonctions de hachage de mot de passe courantes telles que PBKDF2 , où vous pouvez dériver le hachage de 1000 itérations du hachage de 999 itérations avec une seule itération. L'attaquant n'aurait qu'à comparer les valeurs intermédiaires au hachage du mot de passe.

3
otus