web-dev-qa-db-fra.com

NIST recommande-t-il vraiment PBKDF2 pour hachage de mot de passe?

Nous avons hésité entre BCRYPT et PBKDF2 pour le hachage de mot de passe. Dans de nombreux forums et blogs, les gens disent quelque chose comme "dans leur publication spéciale SP 800-132 NIST recommande essentiellement d'utiliser PBKDF2 pour hachage de mots de passe."

Cela peut être un argument très important pour notre client (ils adorent les normes). Mais je ne peux toujours pas lire cette recommandation dans le texte clair ... Donc, je ne peux donc pas le réclamer confortablement. En bref nis plus ou moins dire:

Le matériau de clé dérivé s'appelle une clé principale (MK), indiquée comme MK. Le MK est utilisé soit 1) pour générer une ou plusieurs touches de protection de données (DPKS) pour protéger les données, ou 2) pour générer une clé intermédiaire pour protéger un ou plusieurs DPKS existant ou généré à partir du MK à l'aide d'une fonction de dérivation de clé approuvée (KDF ) tel que défini dans [2]. Le MK ne doit pas être utilisé à d'autres fins.

Y a-t-il une telle recommandation ou c'est juste un mythe?

9
Lachezar Balev

La recommandation concerne PBKDF2 d'être utilisée comme algorithme pour générer une clé cryptographique à partir d'un mot de passe, non pour hachage un mot de passe pour un stockage sûr à des fins d'authentification. (J'espère que vous salez aussi bien?) La réponse est donc non, pour votre cas d'utilisation, il n'y a pas de recommandation de ce type. Cela ne signifie pas que ce n'est pas approprié, mais il n'y a pas de recommandation de NIST à citer.

12
David M

Je pense que vous trouvez - ceci :

Les vérificateurs stockeront des secrets mémorisés sous une forme qui résiste aux attaques hors ligne. Les secrets doivent être hachés avec une valeur de sel utilisant une fonction de hachage approuvée telle que PBKDF2 comme décrit dans [SP800-132] . La valeur du sel doit être une valeur aléatoire de 32 bits (ou plus) générée par un générateur de bits aléatoires approuvé et est stocké avec le résultat du hachage. Au moins 10 000 itérations de la fonction de hachage doivent être effectuées. Une fonction de hachage clé (E.G., HMAC), avec la clé stockée séparément des authenticateurs hachés (par exemple, dans un module de sécurité matérielle) doit être utilisé pour résoudre davantage les attaques de dictionnaires contre les auteurs authentrateurs hachés stockés.

6
GustavoTM

Tandis que NIST SP 800-132 n'est pas spécifiquement sur le hachage de mot de passe, et surtout pas sur les mots de passe de l'authentification, il existe une recommandation forte d'utiliser PBKDF2, en particulier en raison de sa résistance à la force brute.

Le prochain NIST SP 800-63B Draft (Guide de l'identité numérique Authentification et gestion de cycle de vie) Toutefois les mentionnes PBKDF2 Explicit, mais il demande également A [~ # ~ # ~] HMAC [~ # ~] Poivre basée:

Les vérificateurs stockeront des secrets mémorisés sous une forme qui résiste aux attaques hors ligne. Les secrets doivent être hachés avec une valeur de sel utilisant une fonction de hachage approuvée telle que PBKDF2 comme décrit dans [SP 800-132]. La valeur du sel doit être une valeur aléatoire de 32 bits ou plus générée par un générateur de bits aléatoires approuvé et stocké avec le résultat du hachage. Au moins 10 000 itérations de la fonction de hachage doivent être effectuées. Une fonction de hachage à clé (par exemple, HMAC [FIPS1981]), avec la clé stockée séparément des authenticateurs hachés (par exemple, dans un module de sécurité matérielle) doit être utilisé pour résoudre davantage les attaques de dictionnaires contre les auteurs authenticateurs hachés stockés.

Il y a beaucoup à discuter à ce sujet, mais dans tous les cas, il demande une "fonction de hachage approuvée" qui règle SCRYPT (partiellement comme il utilise intentionnellement une étape de PBKDF2) et BCRYPT . Et j'aime le fait qu'il appelle un stockage séparé d'un poivron. C'est pourquoi j'ai ravivé ma tentative de définir un fichier commun PBKDF2 Format: https://github.com/ecki/habibilibidipasswordhash

1
eckes