Comment un sel protège contre une attaque par dictionnaire Stack Overflow
Je viens de lire un peu plus sur l'utilisation de sels, et l'exemple que j'ai lu APPORTE d'ajouter un sel à un mot de passe avant hachant pour se protéger contre une attaque par dictionnaire.
Cependant, je ne vois pas vraiment comment cela aide - si l'attaquant a accès au hachage du mot de passe (comme dans l'exemple que j'ai lu) il est fort probable qu'ils auront également accès au sel. ne peut donc pas un attaquant juste et préfixer postpend le sel de chaque élément dans un dictionnaire avant d'exécuter le dictionnaire pour voir si elle correspond au hachage? Ils doivent donc itérer le dictionnaire plus d'une fois, que ça ne semble pas beaucoup d'une amélioration de la protection?
Cette question a été posée et a déjà une réponse. Si ces réponses ne répondent pas pleinement à votre question, s'il vous plaît poser une nouvelle question.
Une attaque par dictionnaire est une attaque où l'attaquant prend une grande liste de mots de passe, peut-être commandés par likelyhood / probabilité, et applique l'algorithme pour chacun de celui-ci, vérifier le résultat.
Dans le cas d'un mot de passe salé, une telle attaque est toujours possible (et non significativement plus coûteux), si l'attaquant a le sel (ce qui est normalement supposé): Entrez simplement le sel dans votre algorithme, aussi.
Quel sel protège contre, est une table d'arc en ciel. Une table d'arc est une table contenant des paires de texte en clair (par exemple des mots de passe) et les valeurs de hachage correspondantes, commandées par hachage. Une telle table permet une recherche simple du mot de passe, étant donné le hachage.
La production d'une table d'arc en ciel est une étape coûteuse (en fonction de la taille du dictionnaire utilisé comme entrée), mais vous pouvez l'utiliser sans frais plus tard pour rechercher autant de mots de passe que l'on veut.
Comme le sel protège contre cela, puisque vous maintenant besoin d'une table distincte pour chaque sel. Même avec le sel simple 2-lettre de la crypte Unix, ce qui est déjà un facteur de 3844. algorithmes de hachage de mot de passe modernes utilisent un sel beaucoup plus grand (par exemple bcrypt utilise un sel de 128 bits, ce qui donne un facteur de 2 128.)
Pour se protéger contre les attaques de dictionnaire, aussi, vous allez utiliser un algorithme de hachage lent au lieu d'un rapide comme MD5 ou SHA1 simples / SHA2. Bcrypt est un tel algorithme (avec un facteur de travail configurable), et le même auteur scrypt plus tard proposé (qui non seulement prend beaucoup de temps, mais il faut aussi beaucoup de mémoire, ce qui les attaquants ne disposent souvent pas autant que la puissance de traitement).
Il augmente le travail qu'ils ont à faire en augmentant la quantité de réponses possibles dans le fichier de mot de passe.
Un moyen de faire une attaque de dictionnaire est d'analyser le fichier de mot de passe. S'il n'y a pas de sel et vous voyez « DFGE $% $% £ TEW » alors vous connaissez le mot de passe est « MOT DE PASSE ». Ajout de sel signifie que vous devrez utiliser un contenant dictionnaire beaucoup plus toutes les valeurs pour « MOT DE PASSE » avec tous les sels possibles, ou vous devez passer l'effort de lire le sel et faire le cryptage qui vous ralentit. Il est plus une simple recherche.
Le sel aide également dans les situations où plus d'un utilisateur choisit le mot de passe. Surtout dans les vieux jours où le fichier de mot de passe était lisible par tous les utilisateurs, il est-il pas évident si un autre utilisateur a le même mot de passe que vous, ou le même mot de passe que celui que vous connaissez.
En fait, un sel ne protège pas contre les attaques de dictionnaire. Il présente les avantages suivants:
- Augmenter le coût de calcul de casser, parce que pour chaque mot de passe dans le dictonary l'attaquant ont besoin d'essayer hachage avec tous les sels possibles.
- Prévenir les deux utilisateurs qui ont le même mot de passe pour avoir aussi le même hachage. De cette façon, un attaquant doit briser tous les mots de passe explicitement, même s'il y a des mots de passe identiques dans le même fichier (le hachage du mot de passe est toujours différent).
Chaque valeur de sel nécessite un dictionnaire différent, de sorte que chaque base de données qui n'utilise pas de sel peut être attaqué avec le même dictionnaire.
Sans sel un attaquant peut simplement utiliser un impromptu précalculée dictionnaire, dont il y a beaucoup.
Si vous avez un sel de votre base de données, puis ils ont besoin pour créer un dictionnaire spécifique à votre base de données.
Si chaque enregistrement utilisateur a son propre sel, maintenant ils ont besoin pour créer 1 dictionnaire par utilisateur.