Question

Est-il possible d'ajouter un sel aux mots de passe dans les fichiers .hpasswd? Je suppose que non puisque le serveur aurait besoin du sel pour chaque utilisateur afin de vérifier le mot de passe et je ne peux pas penser à la façon dont il les obtenir, mais sinon si la liste devait être obtenue, il serait assez vulnérable. Y at-il une solution?

Merci pour votre aide, Ben

Était-ce utile?

La solution

Par défaut htpasswd utilise la fonction standard crypte et donc les mots de passe sont déjà salés - note dans cet exemple que les utilisateurs ont le même mot de passe mais les hash sont différentes:

simon@diablo:~$ htpasswd -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ htpasswd -b htpasswd simon2 abcd
Adding password for user simon2
simon@diablo:~$ cat htpasswd 
simon:NWvm/LCCxQ64E
simon2:2I.LBzsRqULN6

(note: le drapeau -b est normalement découragé parce que d'autres utilisateurs peuvent voir vos arguments de ligne de commande et donc le mot de passe)

Les deux premiers caractères de la valeur de hachage sont le sel; les mots de passe sont vérifiés en appelant crypt() à nouveau. Saisie du mot de passe erroné produit une chaîne qui est inégale au mot de passe haché:

>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'

alors que le mot de passe correct produit le hachage attendu:

>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'

htpasswd -m utilise un algorithme différent qui est basé MD5 et utilise un sel plus:

simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ cat htpasswd
simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/

Ici, le sel est le 8 caractères entre la deuxième et la troisième $.

htpasswd -s stocke un SHA-1 digèrent sans sel; Cela semble être la compatibilité avec Netscape / LDIF:

simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd
Adding password for user simon
simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd
Adding password for user simon2
simon@diablo:~$ cat htpasswd 
simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=

Ceux-ci peuvent facilement être inversées - convertir en un condensé hexagonal:

>>> "".join("%02x" % ord(c)
...      for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'

puis utilisez base de données de hachage en ligne .

Autres conseils

L'utilitaire htpasswd fait déjà des sels d'utilisation dans la plupart des cas:

La crypte () et les formats MD5 permutent la représentation par préfixer une chaîne de sel aléatoire, pour faire du dictionnaire des attaques contre les mots de passe plus difficile.

Et c'est (un peu) dans le but de sels dans les fichiers de mot de passe. Bien que les sels doivent être inclus dans le fichier .htpasswd du serveur pour le serveur pour pouvoir vérifier les mots de passe, ce sont les nombreuses possibilités différentes de ce qu'un sel pourrait être que défend contre de telles techniques d'attaque comme tables arc-en-.

Cependant, si vos utilisateurs choisissent des mots de passe faibles ou communs, la fissuration par mot de passe est un problème de toute façon, puisque l'attaquant (présumé avoir accès au fichier de mot de passe) va essayer ceux d'abord, très rapidement, en fait (non limité par la vitesse de le serveur et une connexion Internet), en essayant de deviner la façon normale. Le meilleur conseil que je peux donner est que les utilisateurs doivent toujours choisir des mots de passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top