Tout d’abord quelle est la bonne technique pour stocker des mots de passe?
Si un jour vous avez une faille de sécurité et que celle-ci est exploitée, vous êtes punissable par la loi si vous n’avez pas pris de bonnes précautions pour ne pas dévoiler les accès des personnes.
Il est très important voire obligatoire de stocker ces MDP chiffrés dans une mysql,
C’est la qu’intervient la notion de hashing! Mais d’abord quesqu’un hash !?
Un hash est une fonction qui crypte une chaine de caractères en une autre totalement différente et de longueur fixe.
En gros si vous cryptez “Avis-Planethoster” en md5 vous aurez quelque chose comme ceci “53b98299388ee1e8f93dac0620f3ae62” !
Nous allons faire un petit test et changer une lettre “Avis-Planethostor” cela donne “3d9c30fa401b01c2a727c3b1443fa7b0”
Comme vous pouvez le voir, le simple fait de changer une lettre donne un hash complètement différent mais de la même taille!
Comment utiliser ce hash la ? Quel est son but et comment savoir si quand la personne s’authentifie , celle-ci a rentré le même mot de passe que celui rentré à l’inscription (qui a été hashé et stocké dans la DB)?
Le hashing est non réversible, ça veut dire qu’on ne peut pas retrouver” le MDP avec seulement le cryptage!
Son utilisation est la suivante:
if( hash(MDP-LOGIN)==HASH-STOCKER)
.. la personne a rentré le bon MDP
else
.. le mot de passe est mauvais
Maintenant il existe différent type de hashage! (Le md5, sha1 ,sha256 ,sha512 sont les plus connus)
Prenons les tour à tour et comparez les!
md5:fbade9e36a3f36d3d676c1b808451dd7 VARCHAR(32)
sha1:395df8f7c51f007019cb30201c49e884b46b92fa VARCHAR(40)
sha256:594e519ae499312b29433b7dd8a97ff068defcba9755b6d5d00e84c524d67b06 VARCHAR(64)
sha512:5ae625665f3e0bd0a065ed07a41989e4025b79d13930a2a8c57d6b4325226707d956a082d1e91b4d96a793562df98fd03c9dcf743c9c7b4e3055d4f9f09ba015 VARCHAR(128)
Plus la chaine générée est grande, plus celle-ci est sécurisée et il y a moins de chance d’avoir des juxtapositions de valeur pour un mot de passe.
Le md5 est une bonne pratique mais il commence à être dépassé, car les hackeurs se sont amusé à bruteforcer le hash -> à enregistrer “toutes” les possibilités ….. 32(longueur)exposant36(a->z+0-9) = 1,53249554086589e+54 possibilités!
Je vous conseille donc de passer dans un hash plus grand et d’y rajouter une valeur (salt ou salage) pour rendre le cryptage unique!
Voici comment utiliser les hash en PHP:
$md5=md5($chaine);
$sha1=sha1($chaine);
$sha256=hash("sha256",$chaine);
$sha512=hash("sha512",$chaine);
Les fonctions sont très rapides et peuvent traiter 300 000 mdp/seconde sur un 1.6Ghz!
5ae625665f3e0bd0a065ed07a41989e4025b79d13930a2a8c57d6b4325226707d956a082d1e91b4d96a793562df98fd03c9dcf743c9c7b4e3055d4f9f09ba015 = Test
sha1:395df8f7c51f007019cb30201c49e884b46b92fa VARCHAR(40)
mot de passe hashé = z 😉