La Non-aléatoire de sel pour le hachage de mots de passe

Mise à JOUR: j'ai récemment appris de cette question que dans l'ensemble de la discussion ci-dessous, je (et je suis sûr que les autres l'ont fait aussi) était un peu confus: Ce que je l'appel, un arc-en-ciel de la table, s'appelle en fait une table de hachage. Rainbow tables sont plus complexes créatures, et sont en fait une variante de Hellman Chaînes de Hachage. Mais je crois que la réponse est toujours la même (car il ne descendit pas à la cryptanalyse), quelques éléments de la discussion peut-être un peu biaisé.

La question: "Ce sont des rainbow tables et comment sont-ils utilisés?"


En général, je recommande toujours à l'aide d'un chiffrement puissant valeur aléatoire comme le sel, pour être utilisé avec les fonctions de hachage (par exemple, pour les mots de passe), comme la protection contre l'arc-en-ciel de la Table des attaques.

Mais est-il réellement du point de vue cryptographique nécessaire pour le sel aléatoire? Serait une valeur unique (unique par utilisateur, par exemple userId) suffit à cet égard? Il serait, en effet, de prévenir à l'aide d'un simple arc-en-ciel de la Table pour faire craquer tous (ou la plupart) des mots de passe dans le système...

Mais le manque d'entropie vraiment affaiblir la robustesse cryptographique des fonctions de hachage?


Remarque, je ne demande pas au sujet de pourquoi utiliser du sel, comment la protéger (il n'a pas besoin de l'être), à l'aide d'une seule constante de hachage (ne), ou ce genre de fonction de hachage à utiliser.

Simplement de savoir si le sel besoins de l'entropie ou pas.


Merci à tous pour les réponses, mais j'aimerais me concentrer sur les domaines que je suis (un peu) moins familiers avec. Principalement des implications pour la cryptanalyse - j'apprécierais plus si quelqu'un a des commentaires à partir de la crypto-mathématiques PoV.

Aussi, si il y a d'autres vecteurs qui n'avait pas été pris en compte, c'est la grande entrée (voir @Dave Sherohman point sur plusieurs systèmes).

Au-delà, si vous avez une théorie, une idée ou une meilleure pratique - s'il vous plaît revenir ce soit avec la preuve, le scénario d'attaque, ou de preuves empiriques. Ou même les considérations valables pour les contreparties acceptables... je suis familier avec les Meilleures Pratiques (capitale de capital B P) sur le sujet, je tiens à prouver que la valeur de cette offre dans la réalité.


EDIT: Quelques bonnes réponses ici, mais je pense que @Dave dit, il s'agit de Rainbow Tables pour le commun des noms d'utilisateur... et possible des noms peu communs aussi. Cependant, que faire si mes identifiants sont uniques au monde? Pas nécessairement unique de mon système, mais par chaque utilisateur - par exemple, adresse mail.

Il n'y aurait aucune incitation à construire un RT pour un seul utilisateur (comme @Dave a souligné, le sel n'est pas secrète), et ce serait encore l'empêcher de clustering. Seul problème serait que je puisse avoir la même adresse email et le mot de passe sur un autre site mais le sel n'est pas d'empêcher que de toute façon.

Donc, il revient à la cryptanalyse EST l'entropie nécessaire, ou pas? (Ma pensée est qu'il n'est pas nécessaire à partir d'une cryptanalyse point de vue, mais il est d'autres raisons pratiques.)

  • Je dois dire que je suis confus par beaucoup de réponses ci-dessous. Le point principal de l'utilisation de sel est tout simplement pour éviter arc-en-ciel tableau attaque, donc quelque chose d'unique à l'utilisateur, comme elle l'forces de l'attaquant de recréer un arc-en-ciel de la table pour chaque sel. mon 2c.
  • Si le sel est nécessaire pour, par exemple. site, vous avez souvent des id dans l'url. Si le pirate sait (et nous supposons qu'il n') que le mot de passe de sel est userid+nom d'utilisateur, il est assez facile de modifier l'attaque pour éviter le sel de la valeur.
  • le sel est destiné à prévenir RT attaques et de différencier les mêmes mots de passe pour différents utilisateurs. C'est un fait, même avec des noms d'utilisateur.
  • C'est vrai. Mais si je sais que mon hachage pour mon laissez-passer, et je sais que le sel est mon nom d'utilisateur, puis je peux facilement créer haché passer de la valeur pour n'importe quel mot du dictionnaire et de le comparer à quelqu'un d'autre passe de hachage. C'est pourquoi le temps est mieux que nom d'utilisateur.
  • ( pas de formation ) - Traditionnellement, en essayant de mieux ce qui a été réalisé est sujette aux erreurs, au minimum peut détourner l'attention des autres questions. De ce que je vois, la seule question est de s'assurer que le sel est d'une longueur suffisante pour faire bouger les choses, alors il est à peu près algorithme de force à partir de là, non?
  • Voir aussi: stackoverflow.com/questions/1645161/...
  • Viens de trouver un article sur le PHP Security Consortium site web que dans son exemple utilise un md5 haché nombre aléatoire comme le sel phpsec.org/articles/2005/password-hashing.html

InformationsquelleAutor AviD | 2009-02-11