web-dev-qa-db-fra.com

Ajout d'un secret (poivre) à Argon2 Mot de passe hachage

J'ai lu un assez peu de débats Stackexchange et Hackernews sur l'utilisateur de "Peppers" dans la sécurité des documents de mot de passe. Il existe un certain nombre d'implémentations différentes de l'idée d'un poivron, allant d'un sel codé en dur supplémentaire dans le code hash(password, pepper, salt), pour crypter chaque mot de passe hachage séparément, auquel cas la clé secrète est le poivron.

Dans le cas de l'une des approches du Moyen-sol, une poivre partagée et secrète est incluse via hash(hmac(password, pepper),salt). Cela est essentiel principalement en raison de nombreux algorithmes de hachage sur la construction de Merkle-Damgård, vulnérable aux attaques de prolongation de longueur.

Cependant, Argon2 n'est pas basé sur une construction de Merkle-Damgård et donc cette attaque ne s'appliquerait pas. En utilisant Argon2, l'approche naïf de argon2(password, pepper, salt) peut-elle être utilisée?

De plus, l'introduction de la spécification Argon2 semble indiquer que l'utilisation de HMACS, de poivrons ou de clés secrètes est inutile. L'argon2id est-il avec une mémoire forte, des fils et des coûts de temps suffisants?

4
Prime

Argon2 permet en fait un poivron dans l'algorithme lui-même , appelé le secret. Ce serait le moyen idéal d'utiliser un poivron, malheureusement la plupart des liaisons de langue que j'ai regardées, je n'ai pas exposé à ce paramètre (de Bindings Répertorié sur Github seulement 2 d'entre eux mentionnent spécifiquement le support hachage).

Si le paramètre secret ne peut pas être utilisé, argon2(hmac(pepper, password)) est une alternative raisonnable. argon2 Peut être appliqué à l'extérieur hmac pour la simplicité, comme la manière dont il est généralement utilisé, cela vous donnera une sortie comprenant un codage du sel et des options utilisées. En utilisant hmac extérieur argon2 devrait être comparable à la sécurité, mais vous devez alors garder une trace des paramètres Argon2 vous-même.


Quant à la spécification semblant indiquer qu'un poivron n'est pas nécessaire, je suppose que vous parlez de ceci:

Une solution triviale pour le hachage de mot de passe est une fonction de hachage clé telle que HMAC. Si le concepteur de protocole préfère le hachage sans clés secrètes pour éviter tous les problèmes de génération de clés, de stockage et de mise à jour, il a quelques alternatives: le mode générique PBKDF2, le BCRYPT basé sur la poisson-poisson-poisson-poisson-poisson-poisson-poisson-bell.

La façon dont je le lis, ce que cela dit, c'est qu'un hachage clé est en réalité le meilleur Way to hachaw mots de passe, tant que vous protégez la clé vraiment bien (telle que vous utilisez un hsm). Le problème est que la protection de la clé est difficile (HSMS coûte de l'argent, soutenant un poivron avec un HSM prend le temps de développement), donc les hachages lents tels que Scrypt, Bcrypt et Argon2 sont utilisés à la place.

Qu'est-ce que c'est pas dire est que l'utilisation d'un hachage clé en plus de argon2 est une mauvaise idée. Même si vous ne pouvez pas protéger la clé avec un HSM, cela peut toujours valoir la peine si c'est mieux protégé que le mot de passe. Les pires mots de passe seront toujours fissurés, peu importe la taille du coût (et la patience de votre utilisateur vous donne une limite supérieure faible); Un poivron peut empêcher cela.

8
AndrolGenhald

Modifier: frappez tout ce commentaire. Mon approche n'est pas fausse, en soi, mais Argon2 propose déjà un paramètre secret. Il suffit d'utiliser ceci.

L'approche la plus simple de celle-ci - et celle du pied cryptographique la plus forte - est (simpliste) HMAC(key, argon2(password)). Cela permet également au calcul de l'argon2 coûteux d'être effectué côté client pour les situations de relèvement du serveur.

2
Stephen Touset