Qu'est-ce que bcrypt ?
bcrypt est une fonction de hachage de mots de passe fondée sur le chiffrement par bloc Blowfish, qui intègre un sel et un facteur de coût configurable. Elle est conçue pour être coûteuse en calcul d'une manière qui résiste spécifiquement à l'accélération par GPU et par matériel spécialisé.
Aussi connu sous le nom de : bcrypt hash, Blowfish crypt
bcrypt a été conçu en 1999 par Niels Provos et David Mazières spécifiquement pour le hachage de mots de passe, à une époque où la plupart des systèmes utilisaient des fonctions de hachage rapides comme MD5 ou SHA-1. L'innovation centrale était le facteur de coût — un paramètre qui contrôle le nombre d'itérations de la configuration de clé Blowfish sous-jacente. Chaque incrément du facteur de coût double le temps de calcul, ce qui permet aux défenseurs d'augmenter la difficulté à mesure que le matériel s'accélère.
Ce qui distingue bcrypt de PBKDF2, c'est sa résistance à l'accélération par GPU. PBKDF2 utilise des opérations HMAC qui se prêtent bien aux architectures GPU, offrant aux attaquants un parallélisme massif avec des GPU grand public. La planification de clé de bcrypt, fondée sur Blowfish, exige des accès fréquents à une table d'état de 4 Ko qui doit être modifiée pendant le calcul. Ce schéma d'accès mémoire ne se parallélise pas efficacement sur GPU, ce qui ramène les attaquants à la vitesse du CPU.
bcrypt produit une chaîne de 60 caractères qui encode ensemble la version de l'algorithme, le facteur de coût, le sel et le hachage, ce qui la rend autonome et portable. Un hachage bcrypt typique ressemble à : $2b$12$..., où 12 est le facteur de coût. Le facteur de coût minimal recommandé aujourd'hui est 10 (environ 100 ms par hachage sur du matériel moderne), même si 12 à 14 est courant pour les applications qui tolèrent des temps de connexion un peu plus lents. bcrypt est disponible dans pratiquement tous les langages de programmation et reste l'un des algorithmes de hachage de mots de passe les plus répandus.
Comment Vaulted utilise bcrypt
Vaulted utilise PBKDF2 plutôt que bcrypt pour la dérivation de clé fondée sur la phrase secrète, car PBKDF2 est nativement disponible via la Web Crypto API dans les navigateurs, contrairement à bcrypt. La Web Crypto API n'expose pas bcrypt, si bien que son usage nécessiterait une implémentation JavaScript qui sacrifierait les avantages de sécurité d'une exécution native en temps constant. Pour les applications côté serveur qui hachent des mots de passe à des fins d'authentification, bcrypt reste un excellent choix ; pour la dérivation de clé côté client dans le navigateur, PBKDF2 via Web Crypto est l'approche standard.