web-dev-qa-db-fra.com

Est-il sûr d'utiliser PBKDF2 pour le hachage?

Je voudrais obtenir quelques opinions sur la sécurité ou non de l'utilisation de PBKDF2 pour générer un hachage d'un mot de passe. Pour mes besoins, je voudrais supposer que le hachage lui-même sera publié sur la page Twitter de la Maison Blanche (en d'autres termes, il sera public).

Serais-je mieux d'utiliser un grand nombre d'itérations SHA-256 (en remplacement de mes 100 000 itérations PBKDF2)? Y a-t-il des attaques qui peuvent inverser PBKD2?

Voici le code que j'utilise:

        string salt = Utility.RandString(32);
        // convert to byte[] and store in both forms
        this.Salt = salt;
        this.BSalt = Utility.ToByteArray(salt);
        // generate the password hash
        Rfc2898DeriveBytes preHash = new Rfc2898DeriveBytes(this.Password,  this.BSalt, 100000);
        byte[] byteHash = preHash.GetBytes(32);
        this.Hash = Convert.ToBase64String(byteHash);
15
Razick

La réponse courte est que PBKDF2 est considéré comme approprié et sécurisé pour le hachage de mot de passe. Ce n'est pas aussi bon qu'on pourrait le souhaiter car il peut être efficacement mis en œuvre avec un GPU; voir cette réponse pour une discussion (et celle-ci pour plus sur le sujet).

Il y a quelques points discutables, notamment que PBKDF2 a été conçu pour être un Key Derivation Function , ce qui n'est pas le même type de animal comme fonction de hachage; mais il s'est également avéré tout à fait utilisable pour le hachage de mot de passe, à condition de ne rien faire de stupide (ce qui signifie: assurez-vous de conserver au moins 80 bits de sortie et d'utiliser un nombre d'itérations suffisamment élevé, idéalement aussi élevé). que vous pouvez tolérer sur votre matériel).

N'essayez pas de créer votre propre fonction de hachage; ces choses sont étonnamment difficiles à obtenir correctement, surtout parce qu'il est presque impossible d'évaluer si une construction donnée est sûre ou non. Utilisez PBKDF2. Si vous voulez vraiment SHA-256 (ou SHA-512), alors utilisez PBKDF2 avec SHA-256: PBKDF2 est une construction configurable, qui est traditionnellement configuré pour utiliser SHA-1, mais fonctionne aussi bien avec SHA-256 ou SHA-512.

17
Tom Leek

Je pense que c'est un bon KDF bien qu'il y en ait de meilleurs.

L'entropie du mot de passe lui-même est d'une plus grande importance.

http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/

Si vous vous souvenez de votre mot de passe, des techniques de raccourci spéciales peuvent être utilisées pour réduire la force théorique du mot de passe. Pensez essentiellement aux mots comme un seul caractère quand il s'agit de calculer l'entropie.

Un mot de passe à 6 caractères avec un coût KDF très élevé sera toujours fissuré en un rien de temps.

2
Andrew Hoffman