web-dev-qa-db-fra.com

Facebook stocke-t-il des mots de passe en texte brut?

J'étais sur le point de réinitialiser mon mot de passe Facebook et j'ai eu cette erreur:

Votre nouveau mot de passe est trop similaire à votre mot de passe actuel. Veuillez essayer un autre mot de passe.

J'ai supposé que Facebook stocke uniquement les hachages de mot de passe, mais si oui, comment peuvent-ils mesurer la similitude des mots de passe? Cela devrait être impossible avec une bonne fonction de hachage, non?

La question est - comment est-ce possible et quelles sont les implications?

Merci d'avance.

[~ # ~] mise à jour [~ # ~]

Je n'ai pas été clair - on ne m'a pas demandé de fournir l'ancien et le nouveau mot de passe. C'était la procédure "réinitialiser le mot de passe", où je ne fournissais qu'un nouveau mot de passe, donc la plupart des réponses de doublon suggéré ne sont pas applicables.

MISE À JOUR2

mystère résolu - voir commentaire (de l'ingénieur Facebook)

185
Michał Šrajer

Espérons et supposons que Facebook ne stocke que les hachages du mot de passe actuel (et éventuellement des mots de passe précédents).

Voici ce qu'ils peuvent faire:

  1. l'utilisateur définit le premier mot de passe sur "premier" et fb stocke le hachage ("premier").

  2. plus tard, les utilisateurs réinitialisent le mot de passe et sont invités à fournir un nouveau mot de passe "First2"

  3. Facebook peut générer un tas de mots de passe (similaire au nouveau): ["First2", "fIrst2", "firSt2", ... "first2", ... "first", ...] et puis comparer le hachage de chacun avec le hachage stocké.

C'est la seule solution qui me vienne à l'esprit. Tout autre?

201
Michał Šrajer

Je ne sais pas s'ils le font (n'utilisez même pas Facebook), mais il est également possible qu'ils utilisent modules de sécurité matérielle (HSM) pour leur cryptotraitement qui ne stocke pas les mots de passe hachés mais simplement les chiffrer de manière réversible. Avec le volume de demandes d'autorisation auxquelles ils doivent faire face, cela serait parfaitement logique, car ses ordres de grandeur sont plus rapides que hachage de mot de passe sécurisé (lire: lent) , tout en offrant un stockage de mot de passe sûr.

Les HSM pourraient alors être programmés pour comparer le mot de passe stocké et le nouveau mot de passe en entrée de l'une de leurs fonctions et simplement en renvoyer le résultat (pourrait même être une valeur booléenne dans notre cas), avec le mot de passe d'origine jamais même transmis ou stocké en texte clair n'importe où, en plus de leur mémoire interne (qui est inviolable). Il s'agit généralement d'une clé sécurisée intégrée et du stockage/traitement des applications .

Soit dit en passant, de nombreuses banques utilisent des HSM car une bonne mise en œuvre de celui-ci nécessite également une sécurité physique pour les appareils eux-mêmes et la façon dont ils sont accessibles (en plus, ils sont plutôt coûteux), mais cela offre évidemment beaucoup plus de flexibilité dans la manière les mots de passe peuvent être traités en toute sécurité sans jamais être divulgués.

22
TildalWave

Il n'y a qu'une seule bonne réponse à cela. Personne ne sait (sauf Facebook).

Facebook peut stocker votre mot de passe Facebook en texte brut, mais il peut également y avoir un schéma qui utilise des hachages flous ou des hachages pré-calculés de mots de passe similaires.

Il n'y a vraiment aucun moyen de savoir à moins que nous devions pénétrer Facebook et auditer tous leurs actifs.

17
user11869

Une autre possibilité est que Facebook stocke un hachage de votre mot de passe et un hachage du SOUNDEX de votre mot de passe. Ensuite, lorsque vous entrez votre nouveau mot de passe, il peut comparer le hachage de son SOUNDEX avec ceux précédemment stockés et répondre qu'un mot de passe est trop similaire.

Il s'agit, bien entendu, d'une pure conjecture.

7
Ammusionist

Une autre possibilité est que fb ne hache pas, mais crypte les mots de passe avec leur clé principale. Qu'ils pourraient le déchiffrer à tout moment pour le comparer à votre nouveau.

  1. Espérons que non - ils devraient le hacher!
  2. Comme l'a souligné Rell3oT, personne ne sait, sauf fb. Donc, tout ce que nous pouvons faire est de lancer des suppositions sauvages dans le ring.
3
mohrphium

Fournir un peu plus de détails sur la méthode de stockage des mots de passe elle-même.

Les réponses historiques antérieures sont antérieures à toute confirmation de Facebook. Mais à Passwords 14, Alec Muffett a donné une conférence dans lequel il a explicitement décrit le stockage des mots de passe sur Facebook en détail.

Dans son discours, il confirme que Facebook ne pas stocke les mots de passe en texte brut, mais utilise plutôt une méthode en plusieurs étapes qui est assez résistante à une variété de attaques:

slide from Alec Muffett talk, showing Facebook's password storage method

... comme suit:

$cur  = 'plaintext'

# MD5 the plaintext.
$cur  = md5($cur)

# Hash SHA1 with a 160-bit salt.
$salt = randbytes(20)
$cur  = hmac_sha1($cur, $salt)

# Hash SHA256 with a secret salt, using an internally abstracted crypto service.
$cur  = cryptoservice::hmac($cur)
        [= hmac_sha256($cur, $secret)]

# Run the result through the scrypt KDF (using undisclosed tuning parameters)
$cur  = scrypt($cur, $salt)

# Use SHA256 (to reduce and normalize the large scrypt result)
$cur  = hmac_sha256($cur, $salt)

Ce niveau de résistance ne devrait pas être surprenant, car Muffett est l'auteur de crack , l'un des premiers outils efficaces de craquage de mot de passe.

Nous avons donc maintenant la confirmation que Facebook ne stocke pas les mots de passe en texte brut.

1
Royce Williams