Si vous êtes développeur PHP et que vous vous souciez un tant soit peu de la sécurité de votre système d’information ou de vos données sensibles, vous vous êtes sûrement déjà demandé quelle était la meilleure manière de sécuriser ses mots de passe en PHP. Cet article, loin d’être une étude universitaire sur le stockage des mots de passe dans une base de données exploitée par PHP, vous donnera quand même quelques pistes de réflexion.

Petit rappel d’usage sur la sécurisation des mots de passe

Cela va sembler évident pour la plupart des développeurs mais il est néanmoins nécessaire de le rappeler car c’est la règle numéro 1 : ne stockez jamais vos mots de passe en clair dans votre base de données. Un mot de passe ne doit pas pouvoir être lu au premier coup d’oeil. Il faut donc l’encrypter pour avoir un niveau de sécurité acceptable.

Mais après avoir dit ça, il est une fois de plus nécessaire d’enfoncer une porte ouverte car cela s’est déjà vu, malheureusement : ne cryptez pas vous même vos mots de passe. Certains petits malins croient pouvoir crypter un mot de passe en utilisant des fonctions triviales de php comme base64_encode par exemple. Non ! Ne faites pas ça. Vous n’êtes pas expert en cybersécurité ou en cryptographie. Laissez ce travail à d’autres. Des algorithmes ont été inventés pour ça et leur robustesse éprouvée par une communauté de connaisseurs. Si cela n’est pas votre métier, laissez-le à d’autres.

Comment crypter ses mots de passe en php ?

Il est fortement conseillé d’utiliser Bcrypt pour sécuriser ses mots de passe sous PHP. Précisons quand même que Bcrypt sorti en 1999 est basé sur l’algorithme blowfish de Bruce Schneier qui lui est sorti en 1993 !

Cela peut sembler “vieux” pour un algorithme de hashage et laisser quelques doutes sur sa capacité à “être dans le coup” et pourtant… bcrypt reste la solution préférée et la plus secure pour protéger ses hash dans une base de données.

La raison en est de sa lenteur. En effet, si d’autres algorithmes existent (SHA, MD5) ce sont des fonctions de hashage rapides. C’est à dire qu’un ordinateur (dont certains puissants GPU prennent en compte ces algorithmes) peut générer des millions voire des centaines de millions  de hash à la seconde ! Ce n’est plus qu’une question d’heures pour pouvoir décrypter les mots de passe qui nous intéressent.

Alors qu’avec Bcrypt qui n’est pas pris en charge par les processeurs modernes, un ordinateur va générer quelques dizaines d’empreintes à la seconde, rendant son travail plus long et plus compliqué.

Pour conclure, Bcrypt est, de loin, la meilleure solution pour sécuriser ses mots de passe en php. Son utilisation est possible via la fonction password_hash() de PHP et vous trouverez de nombreux tutoriels pour l’utiliser. Mais quoiqu’il en soit, comme toute algorithme de cryptage, ce n’est pas une formule magique infaillible et un attaquant patient et bien équipé pourra toujours trouver une parade.