10
votes

Sels de mot de passe: Prepending vs. Ajout

Je viens de regarder à la mise en œuvre de hachage de mot de passe dans Django et remarqué ce qu 'il prepends sel, de sorte que la valeur de hachage est créé comme SHA1 (sel + mot de passe) , par exemple.

A mon avis, les sels sont bons pour deux raisons

  1. Prévention de la table de lookups arc-en-

    D'accord, préfixer / sel annexant ne fait pas vraiment une différence pour les tables arc en ciel.

  2. Durcissement contre la force brute / attaques par dictionnaire

    C'est ce que ma question est sur le point. Si quelqu'un veut attaquer un seul mot de passe à partir d'une base de données de mots de passe volés, il faut essayer beaucoup de mots de passe (par exemple, les mots du dictionnaire ou [A-Za z0-9] permutations).

    Supposons que mon mot de passe est "abcdef", le sel est "sel" et l'attaquant essaie tout [a-z] {6} mots de passe.

    Avec un sel Prepended, il faut calculer hachage ( « sel ») , stocker l'état de l'algorithme de hachage, puis passez de ce point pour chaque permutation. C'est, en passant par toutes les permutations prendrait 26 ^ 6 opérations-struct copie-hachage algorithm's-état et 26 ^ 6 hachage (permutation de [a-z] {6}) opérations. Comme la copie l'état de l'algorithme de hachage est freakin rapide, le sel ajoute guère de complexité ici, peu importe combien de temps il est.

    Mais, avec un sel annexé, l'attaquant doit calculer hachage (permutation de [a-z] {6} + sel) pour chaque permutation, ce qui conduit à 26 ^ 10 opérations de hachage. Alors, évidemment, appending ajoute la complexité en fonction de la longueur du sel sels.

    Je ne crois pas que ce soit pour des raisons historiques parce que Django est assez nouveau. Alors, quel est le sens appending sels?


1 commentaires

3 Réponses :


10
votes

Ne faites pas non plus, utilisez une standard fonction de dérivation de clé comme PBKDF2 . Ne rouler jamais votre propre crypto. C'est beaucoup trop facile de se tromper. PBKDF2 utilise de nombreuses itérations pour protéger contre la bruteforce qui est une amélioration beaucoup plus grande que la commande simple.

Et votre truc pré-calculant l'état interne de la fonction de hachage après traitement, le sel n'est probablement pas facile à tirer si la longueur du sel correspond à la longueur du bloc de bloc-chiffre sous-jacent. < / p>


3 commentaires

Merci pour l'indice sur les longueurs de blocs, je n'y ai même pas pensé. Je suppose que cela signifie que pour les hachages cryptographiques tels que SHA-1 (512 bits = 64 blocs d'octets), il n'y a pas de différence de préparation / l'ajout du sel (à moins que le sel ne soit plus long que 64 octets), non ?!


SHA-1 n'a qu'une taille de 160 bits / 20 octets. Je ne prétends pas comprendre assez Sha1 pour dire s'il y a une différence. Mais l'OMI, SHA1 (sel + PW) et SHA1 (sel pw +) sont également fausses.


J'ai vérifié une implémentation SHA-1 et il ne fait que le traitement du blocage seulement après qu'un bloc de données de 64 octets est plein, c'est-à-dire que mon astuce n'est pas applicable aux données courtes telles que les mots de passe. Merci d'avoir souligné cela.



0
votes

Vous faites un point valide, bien sûr; Mais, vraiment, si vous voulez augmenter le temps, il faut calculer le hasch, utilisez simplement une hachage plus longue. SHA256 au lieu de SHA1, par exemple.


1 commentaires

Le résultat de hachage plus long ne signifie pas nécessairement que le calcul du hachage prend plus de temps. En réalité, de nombreux algorithmes de hachage n'étaient acceptés que comme une norme de facto, car elles sont efficaces de manière efficace. L'augmentation de la durée de calcul pourrait être effectuée par des fonctions de dérivation clés (appliquer les hachage 1000 fois), par exemple, mais la question était vraiment quant à savoir s'il existe une raison spécifique de choisir de préparer des sels.



1
votes

Si le sel est préparé, l'attaquant peut rendre la base de données d'état hachage pour les sels (en supposant que le sel est suffisamment long pour faire une étape de hachage), puis exécuter une attaque de dictionnaire.

Mais si le sel est ajouté, l'attaquant peut apporter une telle base de données pour le dictionnaire de mot de passe et calculer également uniquement le hachage de sel. Étant donné que le sel est généralement plus court que le mot de passe (comme 4 caractères de caractères et 8 mot de passe de caractère), il s'agira d'une attaque plus rapide.


0 commentaires