Password hashing
Contents
https://letrainde13h37.fr/22/le-stockage-des-mots-de-passe/
Il existe trois algorithmes qui répondent aux critères que nous venons de voir
- PBKDF2 est l’un des plus utilisés. Il a fait l’objet d’une RFC (RFC 2898) et est recommandé aux États-Unis par le National Institute of Standards and Technology (NIST) depuis 2010. Relativement simple à implémenter, il réutilise une fonction cryptographique au choix de l’implémenteur et l’appelle en boucle.
- bcrypt a été inventé spécifiquement pour le stockage de mots de passe. Plus complexe à implémenter, il est aussi un peu plus difficile à craquer, notamment par les GPU. Également disponible dans de nombreux langages, c’est l’alternative de choix face à PBKDF2.
- scrypt est une troisième alternative encore plus vicieuse. Conçue pour consommer beaucoup plus de mémoire que les autres et ainsi gêner davantage un attaquant, elle ne dispose pas encore de beaucoup d’implémentations. Cela dit, la situation pourrait vite évoluer car il est prévu d’en faire un standard IETF.
Petit tour d’horizon des implémentations
Attention : si les implémentations présentes dans les frameworks ont normalement toutes fait l’objet de vérifications et de relectures par des experts en sécurité, ce n’est pas forcément le cas de celles qui traînent sur le net. Comme mentionné précédemment, mieux vaut réutiliser une implémentation connue, testée et éprouvée par la communauté.
- JavaScript : Pour les utilisateur de NodeJS, il existe une implémentation de bcrypt.
- PHP : la fonction crypt() permet depuis la version 5.3 d’utiliser bcrypt, mais demande de générer soi-même son salt et la fonction n’est pas très pratique à utiliser. PHP 5.5 devrait disposer d’une API simplifiée pour résoudre ce problème.
- Python : py-bcrypt et pbkdf2 sont disponibles sur pypi. Le framework Python le plus répandu, Django, supporte les deux depuis la version 1.4, et utilise PBKDF2 par défaut..
- Ruby : bcrypt-ruby et pbkdf2 sont disponibles sur rubygems.
- Java : Le framework Spring 3.1.x implémente le support de bcrypt.
- C# : Une implémentation PBKDF2 est présente de base dans.NET.
Attachments