Saler Votre Mot De Passe: Pratiques Exemplaires?

j'ai toujours été curieux... Quel est le meilleur en salant un mot de passe pour le hash: prefix, ou postfix? Pourquoi? Ou est-ce important, du moment que vous salez?

pour expliquer: nous savons tous (espérons) maintenant que nous devrions salt un mot de passe avant que nous le hachons pour le stockage dans la base de données [ Edit: afin que vous puissiez éviter des choses comme ce qui est arrivé à Jeff Atwood récemment ]. Typiquement, cela se fait par concaténer le sel avec le mot de passe avant de le passer à travers l'algorithme de hachage. Mais les exemples varient... Quelques exemples préparent 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? Y a-t-il une méthode qui diminue les risques de collision? Mon Googling n'a pas trouvé d'analyse correcte sur le sujet.

Edit: de Grandes réponses les gars! Je suis désolé, je n'ai pu choisir qu'une réponse. :)

152
demandé sur Adam Marshall 2009-03-23 22:33:50

8 réponses

Le préfixe ou le suffixe

n'est pas pertinent, il s'agit seulement d'ajouter un peu d'entropie et de 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. (C'est un malentendu commun.)
  2. utilisez un générateur de nombres aléatoires cryptographiquement sécurisé.
  3. choisissez un sel assez long. Réfléchir sur le problème d'anniversaire.

Il y a un excellent répondre par Dave Sherohman à la question de savoir pourquoi vous devriez l'utiliser généré de façon aléatoire des sels au lieu d'un nom d'utilisateur (ou d'autres données personnelles). Si vous suivez ces suggestions, peu importe où vous mettez votre sel.

104
répondu Georg Schölly 2017-05-23 12:18:08

je pense que c'est de la sémantique. Le mettre avant ou après n'a pas d'importance, sauf contre une menace spécifique du modèle.

le fait que c'est là est censé battre les tables arc-en-ciel.

le modèle de menace auquel j'ai fait allusion serait le scénario où l'adversaire peut aurait des tables arc-en-ciel de sels communs annexées/pré-annexées au mot de passe. (Dire la NSA) vous supposez qu'ils l'ont soit en annexe ou en préprogrammation mais pas les deux. C'est idiot, et c'est un pauvre deviner.

il serait préférable de supposer qu'ils ont la capacité de stocker ces tables arc-en-ciel, mais pas, disons, les tables avec des sels étranges intercalés au milieu du mot de passe. Dans que cas étroit, je conjecture que intercalé serait mieux.

comme j'ai dit. C'est de la sémantique. Choisir un sel différent par mot de passe, un long sel, et y inclure des caractères impairs comme des symboles et codes ASCII: © 151910920"

25
répondu Tom Ritter 2009-03-23 19:41:25

la vraie réponse, que personne ne semble avoir abordée, est que les deux sont faux . Si vous implémentez votre propre crypto, peu importe à quel point une partie que vous pensez faire est insignifiante, vous allez pour faire 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 pour le hachage de mot de passe en raison de son conception pour la vitesse. Utilisez quelque chose comme bcrypt ou peut-être scrypt et de prendre le problème de vos mains entièrement.

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

17
répondu Stephen Touset 2012-07-05 21:33:02

ça ne devrait pas faire de différence. Le hash sera pas plus facilement deviner où vous mettez le sel. Les collisions par hachage sont à la fois rares et imprévisibles, du fait qu'elles sont intentionnellement non linéaires. Si il fait une différence pour la sécurité, qui suggère un problème avec le hachage, pas le salage.

9
répondu Phil H 2009-03-23 19:37:36

si vous utilisez un hash cryptographiquement sécurisé, peu importe que vous pré - ou postfixiez; un point de Hash est qu'un simple changement de bit dans les données source (n'importe où) devrait produire un hash différent.

What is important, cependant, est l'utilisation de longs sels, les produisant avec un PRNG cryptographique approprié, et d'avoir des sels pour l'utilisateur. Stocker les sels par utilisateur dans votre base de données est et non un problème de sécurité, l'utilisation d'un hachage à l'échelle du site est .

7
répondu snemarch 2009-03-23 20:55:27

tout d'abord, le terme "table arc-en-ciel" est constamment utilisé à mauvais escient. Une table" arc-en-ciel "est juste un type de table de recherche, un qui permet un type particulier de compression de données sur les clés. En échangeant le calcul pour l'espace, une table de recherche qui prendrait 1000 TB peut être compressée mille fois de sorte qu'il peut être stocké sur un lecteur plus petit.

vous devriez être inquiet de hachage pour les tables de recherche de mot de passe, arc-en-ciel ou autrement.

@onebyone.livejournal.com:

l'attaquant a des 'tables arc-en-ciel' consistant non pas des hachures des mots du dictionnaire, mais de l'état du calcul de hachage juste avant de finaliser le calcul de hachage.

il pourrait alors être moins cher de forcer une entrée de fichier de mot de passe avec le sel de postfix que le sel de préfixe: pour chaque mot de dictionnaire à son tour vous chargeriez l'état, ajoutez les octets de sel dans le de hachage, puis à le finaliser. Avec sel préfixé il n'y aurait rien en commun entre les calculs pour chaque mot du dictionnaire.

pour une fonction de hachage simple qui scanne linéairement à travers la chaîne de saisie, comme un simple générateur de congruence linéaire, il s'agit d'une attaque pratique. Mais une fonction de hachage cryptographiquement sécurisé est délibérément conçu pour avoir plusieurs tours, dont chacun utilise tous les bits de la chaîne d'entrée, de sorte que le calcul de la l'état interne juste avant pour l'ajout de sel n'est pas significative après le premier tour. Par exemple, SHA-1 A 80 tours.

de plus les algorithmes de hachage de mot de passe comme PBKDF composent leur fonction de hachage plusieurs fois (il est recommandé d'itérer PBKDF-2 Un minimum de 1000 fois, chaque itération appliquant SHA-1 deux fois) ce qui rend cette attaque doublement impraticable.

5
répondu cygil 2009-03-24 07:09:55

BCrypt de hachage si la plate-forme a un fournisseur. J'aime que vous ne vous inquiétez pas de créer les sels et vous pouvez les rendre encore plus fort si vous voulez.

4
répondu Samuel 2009-03-23 19:40:44

insérer le sel un nombre arbitraire de caractères dans le mot de passe est le cas le moins attendu, et donc le plus "sûr" socialement, mais ce n'est vraiment pas très significatif dans le cas général tant que vous utilisez de longues chaînes uniques par mot de passe pour les sels.

2
répondu jeffcook2150 2009-03-23 20:41:32