MISE À JOUR: J'ai récemment appris de cette question que dans toute la discussion ci-dessous, j'étais un peu déroutant (et je suis sûr que d'autres l'ont fait aussi): ce que je n'arrête pas d'appeler une table arc-en-ciel, s'appelle en fait une table de hachage. Les tables arc-en-ciel sont des créatures plus complexes et sont en fait une variante de Hellman Hash Chains. Bien que je pense que la réponse soit toujours la même (puisqu'elle ne se résume pas à la cryptanalyse), une partie de la discussion pourrait être un peu biaisée.
La question: " Que sont les tables arc-en-ciel et comment sont-elles utilisées? "
En règle générale, je recommande toujours d'utiliser une valeur aléatoire cryptographiquement forte comme salt, à utiliser avec des fonctions de hachage (par exemple pour les mots de passe), comme pour se protéger contre les attaques Rainbow Table.
Mais est-il réellement nécessaire d'un point de vue cryptographique que le sel soit aléatoire? Une valeur unique (unique par utilisateur, par exemple userId) suffirait-elle à cet égard? Cela empêcherait en fait d'utiliser une seule Rainbow Table pour déchiffrer tous (ou la plupart) les mots de passe du système ...
Mais le manque d'entropie affaiblit-il vraiment la force cryptographique des fonctions de hachage?
Notez que je ne demande pas pourquoi utiliser le sel, comment le protéger (cela n'a pas besoin de l'être), en utilisant un seul hachage constant (non), ou quel type de fonction de hachage utiliser.
Juste si le sel a besoin d'entropie ou non.
Merci à tous pour les réponses jusqu'à présent, mais j'aimerais me concentrer sur les domaines que je connais (un peu) moins. Principalement des implications pour la cryptanalyse - j'apprécierais le plus si quelqu'un a une contribution du PoV crypto-mathématique.
De plus, s'il y a des vecteurs supplémentaires qui n'avaient pas été pris en compte, c'est également une excellente contribution (voir le point @Dave Sherohman sur plusieurs systèmes).
Au-delà de cela, si vous avez une théorie, une idée ou une meilleure pratique, veuillez les soutenir avec une preuve, un scénario d'attaque ou des preuves empiriques. Ou même des considérations valables pour des compromis acceptables ... Je connais les meilleures pratiques (majuscule B majuscule P) sur le sujet, j'aimerais prouver quelle valeur cela apporte réellement.
EDIT: Quelques très bonnes réponses ici, mais je pense que, comme le dit @Dave, cela revient à Rainbow Tables pour les noms d'utilisateurs courants ... et éventuellement les noms moins courants aussi. Cependant, que se passe-t-il si mes noms d'utilisateur sont uniques au monde? Pas nécessairement unique pour mon système, mais pour chaque utilisateur - par exemple, adresse e-mail.
Il n'y aurait aucune incitation à créer un RT pour un seul utilisateur (comme @Dave l'a souligné, le sel n'est pas gardé secret), et cela empêcherait toujours le clustering. Le seul problème serait que je pourrais avoir le même email et mot de passe sur un site différent - mais le sel ne l'empêcherait pas de toute façon.
Donc, cela revient à la cryptanalyse - l'entropie est-elle nécessaire ou non? (Ma pensée actuelle est que ce n'est pas nécessaire du point de vue de la cryptanalyse, mais c'est pour d'autres raisons pratiques.)