web-dev-qa-db-fra.com

Salage de votre mot de passe: meilleures pratiques?

J'ai toujours été curieux ... Quel est le meilleur mot pour mot de passe pour hachage: préfixe ou postfixe? Pourquoi? Ou est-ce important, tant que vous salez?

Pour expliquer: Nous savons tous (espérons-le) maintenant que nous devrions saler un mot de passe avant de le hacher pour le stocker dans la base de données [ Edit: Vous pouvez donc éviter des choses comme ce qui est arrivé à Jeff Atwood récemment ]. Cela se fait généralement en concaténant le sel avec le mot de passe avant de le transmettre à l'aide de l'algorithme de hachage. Mais les exemples varient ... Certains exemples ajoutent le sel avant le mot de passe. Quelques exemples ajoutent le sel après le mot de passe. J'en ai même vu qui essayaient de mettre le sel au milieu.

Alors, quelle est la meilleure méthode et pourquoi? Existe-t-il une méthode permettant de réduire les risques de collision de hachage? Ma recherche sur Google n'a pas abouti à une analyse décente sur le sujet.

Edit: Excellentes réponses, mes amis! Je suis désolé de ne pouvoir choisir qu'une réponse. :)

155
Randolpho

Préfixe ou suffixe est sans importance, il ne s'agit que d'ajouter une entropie et une longueur au mot de passe.

Vous devriez considérer ces trois choses:

  1. Le sel doit être différent pour chaque mot de passe que vous stockez. (Ceci est un malentendu assez commun.)
  2. Utilisez un générateur de nombre aléatoire cryptographiquement sécurisé.
  3. Choisissez un assez long sel. Pensez au problème de l'anniversaire.

Il y a un excellent réponse de Dave Sherohman à une autre question, pourquoi vous devriez utiliser des sels générés aléatoirement au lieu du nom d'un utilisateur (ou d'autres données personnelles). Si vous suivez ces suggestions, peu importe où vous mettez votre sel.

105
Georg Schölly

Je pense que tout est sémantique. Le placer avant ou après n'a pas d'importance, sauf contre un modèle de menace très spécifique.

Le fait que ce soit là est censé vaincre les tables Rainbow.

Le modèle de menace auquel j'ai fait allusion serait le scénario dans lequel l'adversaire peut aurait ajouté des tables Rainbow de sels communs au mot de passe. (Dites la NSA) Vous devinez qu'ils l'ont soit ajouté soit ajouté, mais pas les deux. C'est idiot, et c'est une mauvaise idée.

Il serait préférable de supposer qu'ils ont la capacité de stocker ces tables Rainbow, mais pas, par exemple, de tables avec des sels étranges entrecoupés au milieu du mot de passe. Dans cela cas étroit, je suppose que ce serait mieux intercalé.

Comme je l'ai dit. C'est la sémantique. Choisissez un sel différent par mot de passe, un sel long et incluez-y des caractères impairs, tels que des symboles et ASCII codes: © ¤¡

25
Tom Ritter

La vraie réponse, que personne ne semble avoir évoquée, est que les deux ont tort . Si vous implémentez votre propre crypto, peu importe la partie triviale que vous croyez faire, vous allez commettre des erreurs.

HMAC est une meilleure approche, mais même si vous utilisez quelque chose comme SHA-1, vous avez déjà choisi un algorithme qui ne convient pas au hachage de mot de passe. en raison de sa conception pour la vitesse. Utilisez quelque chose comme bcrypt ou éventuellement scrypt et supprimez entièrement le problème.

Oh, et ne songez même pas à comparer les hachages résultants pour vérifier leur égalité avec votre langage de programmation ou vos utilitaires de comparaison de chaînes de base de données. Ceux-ci comparent caractère par caractère et court-circuitent comme false si un caractère est différent. Alors maintenant, les attaquants peuvent utiliser des méthodes statistiques pour essayer de comprendre ce qu'est le hachage, un caractère à la fois.

18
Stephen Touset

Cela ne devrait faire aucune différence. Le hash ne sera pas plus facilement concevable où que vous mettiez le sel. Les collisions de hachage sont à la fois rares et imprévisibles, du fait qu’elles sont intentionnellement non linéaires. Si cela faisait une différence pour la sécurité, cela suggérerait un problème de hachage, pas de salage.

9
Phil H

Si vous utilisez un hachage cryptographiquement sécurisé, peu importe si vous préférez ou postfixez; un point de hachage est qu'un changement de bit unique dans les données source (peu importe où) devrait produire un hachage différent.

Quoi est Il est toutefois important d’utiliser des sels longs, de les générer avec un PRNG cryptographique approprié et d’avoir des sels par utilisateur. Stocker les sels par utilisateur dans votre base de données est ne pas un problème de sécurité, en utilisant un hachage à l'échelle du site est.

7
snemarch

Tout d'abord, le terme "Rainbow Table" est systématiquement utilisé à mauvais escient. Une table "Arc-en-ciel" est simplement une sorte de table de consultation particulière, qui autorise un type particulier de compression de données sur les clés. En échangeant le calcul de l'espace, une table de recherche qui prend 1000 TB) peut être compressée mille fois afin de pouvoir être stockée sur un lecteur plus petit.

Vous devriez être inquiet au sujet du hachage aux tables de recherche de mot de passe, Rainbow ou autre.

@ onebyone.livejournal.com:

L'attaquant dispose de 'tables Rainbow' composées non pas du hachage de mots du dictionnaire, mais de l'état du calcul du hachage juste avant de finaliser le calcul du hachage.

Il pourrait alors être moins coûteux de forcer brutalement une entrée de fichier de mot de passe avec salt postfix que préfixe salt: pour chaque mot du dictionnaire, vous chargez l’état, ajoutez les octets salt dans le hachage, puis vous le finalisez. Avec le sel préfixé, il n'y aurait rien de commun entre les calculs pour chaque mot du dictionnaire.

Pour une simple fonction de hachage qui balaye linéairement la chaîne d'entrée, telle qu'un générateur linéaire congruentiel simple, il s'agit d'une attaque pratique. Mais une fonction de hachage cryptographiquement sécurisée est délibérément conçue pour avoir plusieurs tours, chacun utilisant tous les bits de la chaîne d'entrée, de sorte que le calcul de l'état interne juste avant à l'ajout du sel n'est pas significatif après le premier tour. Par exemple, SHA-1 a 80 tours.

De plus, les algorithmes de hachage des mots de passe tels que PBKDF composent leur fonction de hachage plusieurs fois (il est recommandé de répéter PBKDF-2 au moins 1000 fois, chaque itération appliquant SHA-1 deux fois), ce qui rend cette attaque encore plus pratique.

5
cygil

BCrypt hash si la plate-forme a un fournisseur. J'aime la façon dont vous ne vous inquiétez pas pour la création des sels et que vous pouvez les rendre encore plus forts si vous le souhaitez.

4
Samuel

Insérer le sel dans un mot de passe d'un nombre arbitraire de mots est le cas le moins attendu, et donc le plus "sécurisé" socialement, mais ce n'est vraiment pas très important dans le cas général tant que vous utilisez un mot de passe long et unique. cordes pour les sels.

2
jeffcook2150