web-dev-qa-db-fra.com

Comment Facebook hachage mots de passe

J'ai trouvé cela Présentation Comment Facebook stocke les mots de passe des clients et comment ils font l'authentification.

Cette diapositive montre comment ils ont des mots de passe hachés:

enter image description here

Est-ce une bonne idée de faire de telles opérations avec un mot de passe cru? N'est-il pas "Sécurité par obscurité"? A le sens de faire de telles opérations avec PBKDF2 Comme nous allons utiliser?

1
Artegon

Dans l'un des commentaires que vous avez écrites:

Je demande si quelque chose comme ça a du sens maintenant en 2018. Nous allons utiliser PBKDF2 HMAC-SHA-256 avec 8 octets Sel, nous discutons de ce que le schéma de hachage utilise.

La réponse à cela est non. La seule partie qui devrait être reproduite à partir de la solution Facebook utilise une fonction de mémoire-mémoire et la poivrée de cryptoService. Les MD5 et HMAC pièces ne pas ajouter à la sécurité. (Ils sont assez inoffensifs cependant.)

Vous ne devriez pas utiliser PBKDF2. Pour que vous préférez préférer:

  1. Utilisation d'une liaison à la mise en œuvre officielle optimisée de argon2 [.____]
    • Reportez-vous à la section Argon2 Spec Spec " Section pour savoir comment choisir des paramètres.
    • Le choix entre Argon2D, Argon2i et Argon2ID peut être élaboré pour le débat. La recommandation officielle actuelle est Argon2i pour des personnes qui ne savent pas laquelle choisir.
  2. Mettre à jour votre logiciel afin que vous puissiez choisir 1
  3. Protéger les données cryptées à l'aide d'un mot de passe et ne peut pas utiliser argon2? Utilisez une liaison à une implémentation de scrypte optimisée native. Définissez le paramètre unique de coût suffisamment élevé pour utiliser beaucoup de RAM === et heure. S'il semble que cela semble réduire le temps Scrypt exécute, puis réduit le coût basé sur la RAM.
  4. Protéger quelques mots de passe, ne peut pas utiliser argon2 et peut tolérer des réponses lentes? Utilisez SCRYPT avec les mêmes paramètres de coût que 4. Si vous essayez de protéger les comptes d'administration, priorisez-vous d'abord à l'aide de mots de passe et de cryptage très solides.
  5. Protéger les mots de passe de compte de nombreux utilisateurs et ne peut pas utiliser argon2? Utilisez une bibliothèque qui utilise une liaison à BCRYPT optimisé Native. Assurez-vous que la bibliothèque fonctionne correctement autour de toutes les bizarreries d'origine Bcrypt Algorithm. (Le mot de passe sera tronqué si c'est trop long ou contient un caractère null.)
  6. Utilisez une liaison à PBKDF2 optimisée native. N'utilisez pas une longueur de clé dérivée supérieure à la longueur de sortie de la fonction de hachage sous-jacente.
  7. Ne pas implémenter votre propre fonction de hachage de mot de passe. Et surtout ne pas gérer cette mise en œuvre dans un interprète où il sera beaucoup plus lent. Mettre à jour!

Quant à savoir si la méthode Facebook est une sécurité par obscurité. Non, mais la partie HMAC et probablement la partie MD5 sont redondantes. La partie cryptoservice utilise probablement un HSM. Cela devrait permettre que le mot de passe soit crypté/déchiffré sans exposer nécessairement la clé de cryptage sur le type de pirates informatiques pouvant voler une base de données de mot de passe-hachage. L'utilisation d'algorithmes de cryptage traditionnels avec une clé secrète ne compte pas comme obscurité. Le mot de passe doit encore être Hashed au cas où la clé est jamais divulguée. C'est ce que le scrypt est pour, mais maintenant argon2 devrait être préféré.

EDIT: Voir les commentaires. Comme présenté dans la diapositive, le mot de passe n'est pas crypté. Le HMAC est d'une manière, tout comme le hachage. L'alternative du cryptage après hachage est utile car elle permet de remplacer la clé. Les utilisateurs doivent entrer leur mot de passe si vous modifiez la clé avec cette configuration Facebook, en plus des paramètres de sel ou de scrypte. Si vous chiffrez le hash, vous pouvez déchiffrer et re-chiffrer sans demander à l'utilisateur de saisir leur mot de passe. (Si votre clé est jamais divulguée ... mais vous ne pouvez pas refaire un mot de passe sans l'original.)

Utilisez également 20 octets de sel. Ou au moins 16.

1
Future Security

Cette construction "oignon" peut être dangereuse et ne devrait être faite que si vous avez suffisamment de critiques, il ajoute toutefois plusieurs propriétés favorables par rapport au hachage simple:

Le premier MD5 non salé peut être effectué par des clients ou des serveurs frontaux. Il normalise Charset et Longueur et obtient des mots de passe tôt sans être trop intensif de la CPU.

Le sel est lu dans la base de données de l'utilisateur, de sorte qu'il n'est pas présent sur le client, ceci est le premier ajoute HMAC.

Le service Crypto (ou meilleur HSM) défend contre la force brute (comme la clé secrète n'est pas connue). En fait, cela prédit les recommandations du Nist à faire exactement cela. Cette poivrée n'est pas souvent faite car elle nécessite une configuration système compliquée (HSM ou Isolation de processus) - quelque chose que Facebook peut se permettre.

Étant donné que l'étape de poivre pourrait être compromise par des initiés, les données sont ensuite transmises au SCRYPT, une fonction conçue pour effectuer des tests de force brute de mots de passe plus chers.

L'étape finale pourrait ne pas être nécessaire, ou peut-être qu'il est utilisé pour ajouter une certaine diversification (SHA2 au lieu de SHA1).

Il ressemble un peu à l'huile de serpent en avant, mais les étapes peuvent être expliquées raisonnables. Si vous le comparez à la (beaucoup plus faible) GLIBC-SHA2 VOODOOO, il est vraiment propre.

BTW1: L'authentificateur mémorable est généralement une mauvaise chose, de tels schémas ne peuvent réduire que le risque de les manipuler.

BTW2: La faiblesse de la collision de SHA1 ne s'applique pas aux constructions HMAC et la taille de hachage de MD5 courte ne fait pas mal d'ici (car les mots de passe ont presque toujours moins d'entropie). Ce serait plus risqué pour la dérivation principale, mais ce n'est pas la tâche à accomplir.

1
eckes