Créé en 1999 par Niels Provos et David Mazières, Bcrypt est un algorithme spécialement conçu pour le hachage, basé sur un algorithme de chiffrement communément appelé « Blowfish ». Le plus souvent utilisé en PHP 5.3+ (ce qui justifie le fait qu’on l’appelle Bcrypt PHP), Bcrypt s’est toutefois généralisé à un grand nombre de langages (Go, JavaScript, C, C++, Elixir, Python, Java…) après son implémentation dans OpenBSD. Comment donc utiliser Bcrypt en PHP ? La réponse dans la suite !

Bcrypt en PHP : de quoi parle-t-on ?

Nous vous le disions, Bcrypt a été conçu par Niels Provos et David Mazières sur la base du chiffrement Blowfish, ce qui explique le nom de l’algorithme : « b » pour « Blowfish » et « crypt », le nom de la fonction de hachage utilisée par le système de mots de passe UNIX. Bcrypt PHP, à quoi ça sert exactement ? Pour répondre à cette question, il est essentiel de faire un peu d’histoire.

Commençons par noter l’incapacité de « crypt » à s’adapter aux changements technologiques. En 1976, crypt était capable de hacher moins de 4 mots de passe par seconde, ce qui était largement suffisant à l’époque pour repousser les attaques des hackers. Deux décennies plus tard, il suffisait d’un ordinateur personnel avec des logiciels spécifiques pour hasher plus de 200 000 mots de passe par seconde ! Concrètement, un hacker pouvait alors réaliser une attaque par dictionnaire, méthode utilisée pour trouver un mot de passe, avec une extrême efficacité. Il fallait donc une cryptographie qui soit exponentiellement plus difficile à pénétrer au fur et à mesure que le matériel devenait plus puissant. 

Comment utiliser Bcrypt PHP ?

Bcrypt utilise le chiffrement Blowfish, un chiffrement par blocs rapide, avec des paramètres qui établissent la sortie fonctionnelle d’un algorithme cryptographique : chaque nouvelle clé nécessite un prétraitement équivalent au chiffrement d’environ 4 kilo-octets de texte, ce qui est considéré comme très lent par rapport aux autres chiffrements par blocs.

Ce changement de clé lent est bénéfique pour les méthodes de hachage de mot de passe telles que Bcrypt, car la demande de calcul supplémentaire permet de se protéger contre les attaques par dictionnaire et par force brute en les ralentissant. Bcrypt est capable d’atténuer ces types d’attaques en combinant la phase d’établissement de la clé Blowfish avec un nombre variable d’itérations pour augmenter la charge de travail et la durée des calculs de hachage. Le plus grand avantage de Bcrypt est que, au fil du temps, le nombre d’itérations peut être augmenté pour le rendre plus lent, ce qui permet à l’algorithme de s’adapter à la puissance de calcul. Autrement dit, il est possible de réduire les probabilités de réussite des hackers en augmentant le nombre d’itérations pour rendre Bcrypt plus lent. 

Mais comment donc utiliser Bcrypt pour hacher les mots de passe en PHP ? Il est aujourd’hui de notoriété publique que le stockage d’un mot de passe en clair pose un gros problème de sécurité. Pourtant, beaucoup de personnes continuent à le faire… Rappelons que Bcrypt est une technique de hachage utilisée pour se protéger du mot de passe contre les attaques des hackers en stockant les mots de passe sous un format « bcrypté ».

La fonction password_hash de PHP est une fonction intégrée qui est utilisée pour créer un nouveau hachage de mot de passe. Utilisant un algorithme de hachage fort et robuste, cette fonction est compatible avec la fonction crypt. Par conséquent, les hachages de mot de passe créés par crypt peuvent être utilisés avec password_hash et vice-versa. Les fonctions password_verify et password_hash ne sont que des enveloppes autour de la fonction crypt, et elles facilitent grandement son utilisation précise.