web-dev-qa-db-fra.com

"Vrai" sel et "faux" sel

Au cours d'une période de questions/réponses à DefCon cette année, un membre de l'audience a indiqué que nous utilisions "faux sel" lors de la concaténation d'une valeur aléatoire et d'un mot de passe avant le hachage. Il a défini un "vrai sel" comme quelque chose que j'ai vu dans la mise en œuvre originale de crypte UNIX qui a modifié la manière dont l'algorithme a couru, nécessitant ainsi un code différent de pouvoir craquer chaque mot de passe et des attaques GPU très troublantes.

Y a-t-il un mérite au "vrai" et "faux" discussion en sel?

45
Jeff Ferland

Oui, il y a une distinction valable à tirer; vous auriez besoin d'un cryptographe pour vous dire à quel point la différence est significative.

Un " vrai sel ", comme vous l'avez décrit est utilisé pour " perturb l'algorithme de cryptage ". Je comprends vaguement, mais pas assez bien pour décrire correctement. Qu'il suffise de dire que, avec un vrai sel, le original texte de mot de passe est chiffré mais avec des sorties en fonction de la façon dont l'algorithme intègre l'entrée de sel (l'algorithme a (au moins deux) entrées, le sel et (séparément) le texte de mot de passe d'origine).

Un " sel faux " consiste à modifier le texte de mot de passe original avec le sel avant avec l'chiffrant algorithme Crypto. Par exemple, si mon mot de passe est " Nezperce ", et mon sel est " QP ", alors l'algorithme sera remis le modifié mot de passe texte " qpnezperce " à coder. Si Alice essaie également d'utiliser le mot de passe " Nezperce ", mais a du sel " W4 ", alors l'algorithme va encoder modifié mot de passe texte " w4nezperce " pour elle. En conséquence, son hachage diffère chiffré de la mienne, même si nous sommes à la fois en utilisant le même mot de passe.

Les deux méthodes fournissent le principal avantage du sel; veiller à ce que le même mot de passe ne soit pas toujours le même chiffré façon. Utilisation de sels augmente la difficulté de montage d'une attaque de hachage pré-calculée (anciennement I dit attaque de force brute ou dictionnaire, voir commentaires).

Je crois qu'il ya d'autres avantages à utiliser un " vrai sel ", comme l'augmentation de temps de calcul (qui ralentit les attaques). Mais, encore une fois, vous auriez besoin de quelqu'un avec des compétences plus Crypto que je savoir si cela est vrai ou non.

Je pense que l'avantage d'un " sel de faux " est qu'il est plus facile à mettre en œuvre et nécessite moins avertis Crypto. Je sais que l'endroit où je suis le plus souvent vu des sels de faux est des applications web qui gèrent leur propre base de données auth.

21
gowenfawr

Comme Thomas l'a souligné, la notion générale d'appliquer simplement le sel qu'une modification de l'algorithme de hachage ne vous permet pas de protéger sans fondement une protection supplémentaire. Il peut obliger l'attaquant à adapter les attaques de logiciels et matériels existants, mais il peut également vous mettre en difficulté si vous ne savez pas vraiment ce que vous faites.

Mais ils ont manqué l'autre vieille innovation dans le papier d'origine sur la salage - ce qu'on appelle normalement un "poivre": une clé personnalisée faisant partie de la mise en œuvre, et non stockée avec les mots de passe. Je fais référence à la manière dont Morris et Thompson ont introduit ce concept également dans leur document de syndical séminal dans la discussion à Mot de passe hachage Ajouter un sel + poivre ou est assez sel?

Un poivron a l'avantage de pouvoir l'utiliser conjointement avec un sel, tel que même si quelqu'un vole la base de données de mot de passe (qui a les sels), ils auraient également besoin de voler le poivre (peut-être incorporé dans l'application ou le hachage code de bibliothèque ou stocké sur un système complètement séparé) pour craquer les mots de passe. Dans de nombreux cas, cela ne sera pas beaucoup plus difficile, mais dans certains cas, cela peut être significativement plus difficile.

7
nealmcb

J'étais aussi à la discussion et j'étais celui qui s'est assis avec les deux cryptographes pendant la conversation. Le vrai sel par rapport à un faux sel m'a vraiment intrigué. Maintenant, pardonnez-moi comme je n'ai pas mes notes devant moi, mais il y a une vaste différence dans la sécurité du vrai sel par rapport à un faux sel. Un vrai sel modifie la clé, car il passe dans le chiffrement à blocs, il est donc possible que le plaintext (mot de passe) unique est unique la clé pour déterminer comment les itérations auront lieu est également unique. Maintenant, un faux sel modifie simplement le plainte (mot de passe) et la clé reste la même. En ajustant l'algorithme, le vrai sel devient de manière exponentielle de fissurer qu'un faux sel.

Donc, utilisez un exemple pour décrire cela. Dans cet exemple, j'utiliserai un hachage MD5 (je ne me souviens pas si vous pouvez utiliser un vrai sel sur MD5, cependant, ne me plonge pas pour cela) avec un vrai sel et un faux sel. Disons maintenant que j'utilise Cuda-multiforcer comme craqueur de mot de passe GPU. Je serais mis à courir contre le MD5 standard pour essayer de casser le mot de passe, mais puisque j'ai salué le mot de passe, il pourrait fonctionner pour toujours sur la base du sel (vrai ou faux). Maintenant, une partie de la description qui m'a été donnée était la capacité de craquer le faux sel et de la façon dont il a juste pris un peu plus longtemps pour calculer/craquer en brisant le hachage en morceaux. Je n'ai pas suivi ce qu'ils disaient, je pourrais donc être complètement bas de la base. Supposons maintenant que nous avons pu acquérir le sel de mot de passe (vrai de faux). En utilisant un faux sel, nous venons de le saisir dans notre becker de mot de passe et continuez à brute la force jusqu'à ce que nous puissions correspondre aux hatupes. Pas très difficile à faire et va courir assez rapidement.

Maintenant, si nous utilisions un vrai sel, il serait exponentiellement plus difficile et plus long de craquer les hatupes. L'utilisation d'un vrai sel, je devrais réécrire réellement une partie de la CUDA-multiforcer pour utiliser un vrai sel avec l'algorithme spécifique utilisé. N'oubliez pas qu'il change la clé du chiffre, ce qui signifie que ce n'est pas simplement un changement de texte simple, c'est un changement d'algorithme, je dois donc modifier le code pour le faire. D'accord, alors nous avons maintenant changé la façon dont le craquelin de mot de passe fonctionne, nous rencontrons maintenant un problème de vitesse. Avec le changement de la clé, il prend désormais un peu plus longtemps pour tester chaque mot de passe, car il change maintenant l'itération utilisée pour chaque mot de passe forcé brute. Ils m'avaient tous deux donné quelques exemples de la différence de vitesse et je pense avec un faux sel, il était d'environ 1 million par seconde, et un vrai sel était autour de

3
GuloGulo

La distinction entre faux sel et sel réel ne fait que différent si les algorithmes de hachage sont cachés à l'attaquant. Un "vrai sel" qui déterminent une variation de l'algo hachage dans une algue de hachage de hachage ouverte serait facilement mis en œuvre par une attaque GPU/distribuée, puisque toutes les entrées sont connues de l'attaquant et que la sous-algo peut donc être facilement déterminée à l'avance temps.

Le début de la hache Unix algo pour les mots de passe (comme je le rappelle de Bell System V7) n'a pas fourni l'algo pour le hachage de mot de passe - c'était la seule partie du système pour lequel vous ne pouviez obtenir que le fichier .O, où les universités étaient capable d'obtenir le code source pour tout le reste.

2
Soren