2009-06-18 10 views
5

Les utilisateurs peuvent-ils demander que leur mot de passe leur soit envoyé par e-mail si le mot de passe est stocké en tant que valeur de hachage?Récupération du mot de passe lorsque le mot de passe est enregistré en tant que valeur de hachage

Y at-il un moyen de convertir une valeur de hachage à la valeur de texte en clair avec l'information appropriée (& de quelles informations auriez-vous besoin)?

Si un utilisateur a la même valeur de hachage de mot de passe stockée sur deux sites, son mot de passe serait-il le même pour les deux sites?

Répondre

28

Si vous stockez seulement un mot de passe, alors non. ... et vous devriez seulement stocker un hachage correctement salé de leur mot de passe, de toute façon.

Les mécanismes de réinitialisation de mot de passe constituent l'alternative appropriée.

+6

+1 pour rappeler l'utilisation de SEL ... –

+1

Voir ma réponse ci-dessous pour une utilisation correcte du sel ... stockage du sel est contraire à l'objectif de l'utiliser .. – jrista

+11

Le but de salt est de vaincre les tables de recherche, de sorte qu'il n'est pas possible de simplement hacher un grand nombre de mots de passe probables et de chercher leurs valeurs de hachage. Cela ne dépend pas de garder le secret du sel. En outre, si vous ne le stockez pas, comment diable vous vérifiez le mot de passe? –

7

En bref, non. Avec la plupart des algorithmes de hachage, vous pouvez avoir plusieurs entrées avec la même sortie. Il est souvent préférable d'offrir une option de réinitialisation du mot de passe.

10

Les mots de passe hachés ne peuvent pas être récupérés en général (cela dépend de la fonction de hachage, les hachages sécurisés ne peuvent pas être récupérés). S'ils ont le même hachage sur deux sites, ils peuvent avoir le même mot de passe, cela dépend du hash utilisé par les sites, de la méthode, etc.

Si votre mot de passe est correctement stocké dans un bon système de hachage, un fournisseur ne devrait jamais être en mesure de vous envoyer votre mot de passe, vous devez réinitialiser votre mot de passe si vous l'oubliez.

3

Il existe différents types d'algorithmes de hachage. Certains sont plus sûrs que d'autres. MD5 est un populaire, mais pas sûr. La famille SHA est un autre ensemble d'algorithmes plus sûr.

Par définition, un hachage est une fonction à sens unique. Cela ne peut pas être inversé.

http://en.wikipedia.org/wiki/Sha-1

+0

Plaine SHA-1/2 est une mauvaise idée. Vous avez besoin d'un sel, et quelque chose pour ralentir le hachage. PBKDF2, bcrypt, scrypt sont les choix standards. – CodesInChaos

+0

D'accord, je n'utilise généralement bcrypt ces jours-ci mais de toute façon la question était vraiment de renverser un hachage qui est impossible. (Et l'utilisation de tables de recherche de hachages connus n'est pas la même que l'inversion d'un hachage.) –

3

S'il y avait un moyen simple de récupérer le mot de passe en texte clair, il n'y aurait pas de point en hachant les mots de passe pour commencer. À ce moment-là, vous pourriez aussi bien les utiliser comme base64 ou ROT13. (ne faites pas cela!)

Comme mentionné précédemment, utilisez d'autres méthodes de récupération de mot de passe. Il n'y a jamais une bonne raison d'avoir accès à des mots de passe en clair.

Si le hachage sur deux sites est le même, l'utilisateur a probablement le même mot de passe dans les deux. Pas 100% garanti cependant, il pourrait y avoir une collision de hachage, mais c'est extrêmement improbable.

+2

Et plus probablement signifie qu'aucun site n'a ajouté de sel. –

-1

L'idée générale derrière le stockage d'un hachage de mot de passe est de s'assurer que les mots de passe sont sécurisés ... même ceux qui ont accès à la base de données. La confiance n'est jamais implicite. Un hachage est un algorithme unidirectionnel, il n'y a donc aucun moyen de dériver le mot de passe d'origine à partir d'un hashcode. Habituellement, lorsqu'un utilisateur a besoin de récupérer son mot de passe stocké sous forme de hachage, vous devez lui poser sa question secrète et lui envoyer par courrier électronique son mot de passe temporaire ou lui envoyer un lien temporaire lui permettant de changer son mot de passe. Cela garantit que le mot de passe n'est jamais stocké en texte clair et qu'il est protégé de tous les regards indiscrets, même ceux qui pourraient être considérés comme dignes de confiance.

+6

"et aussi de stocker le sel, alors vous vaincre le but d'avoir du sel en premier lieu." - c'est incorrect. Vous devez stocker le sel, et si vous ne le faites pas, vous ne pouvez pas valider le hachage. Il n'y a aucun inconvénient de sécurité à stocker le sel - il est seulement là pour vaincre les attaques de recherche. – frankodwyer

+2

Je ne suis pas d'accord avec votre commentaire que les lattes doivent être immédiatement jetées. Dans votre exemple d'échange de mots de passe, alors oui, le sel est unique et devrait être éliminé. mais dans l'authentification de l'utilisateur, un sel par utilisateur doit être utilisé et doit être stocké avec le mot de passe à rendre est utilisable. par exemple, saler le mot de passe avec le nom d'utilisateur empêche les attaques de dictionnaire précalculées car un dictionnaire est requis par utilisateur. – longneck

+0

Dans la pratique, la plupart des programmeurs ne mettent pas de sels dans la base de données, car si quelqu'un accède à la base de données et a les hachages, ils auront aussi le sel. Les sels vivent souvent dans le code de l'application. Une autre idée consiste à utiliser des sels calculés, tels que le salage basé sur le moment où l'utilisateur a rejoint. – marr75

2

Il n'y a aucun moyen d'inverser les hash couramment utilisés. Ils peuvent être bruteforced (en essayant chaque mot de passe possible) ou vous pouvez utiliser une liste de mots (en utilisant une liste de mots de passe couramment utilisés) en combinaison avec la force brute pour accélérer certains, mais c'est encore un processus très lent et CPU.Le meilleur moyen, utilisé par de nombreux sites, de créer un bouton "Password Reset" où vous entrez votre nom d'utilisateur et votre email, et s'ils correspondent, il vous envoie un mot de passe aléatoire et vous donne un lien vers la page de connexion et vous pouvez vous connecter avec votre mot de passe aléatoire et changer votre mot de passe.

0

Pour ce faire, vous devez disposer d'un modèle avec les champs:

Hashed_password 
Salt 

Et vous devez savoir que l'utilisateur de la méthode de hachage du mot de passe (Ici, j'utilise SHA1) Ensuite, vous pouvez définir dans votre contrôleur:

def self.encrypted_password(password, salt) 
    string_to_hash = password + "wibble" + salt 
    Digest::SHA1.hexdigest(string_to_hash) 
end 

suivante vous pouvez comparer:

user.Hashed_password == encrypted_password(password, user.salt) 

True signifie tha t "mot de passe" est le mot de passe pour l'utilisateur "utilisateur"

Questions connexes