Souvent, les développeurs croient, à tort, que hasher les mots de passes (ou tout autre information sensible) est suffisante. Je risque d’en décevoir beaucoup, mais la sécurité apportée par ce chiffrement est de moins en moins fiables. Et ceux que ce soit un hash MD5 ou un hash SHA1.

Tout d’abord, rappellons ce qu’est un hash. Un hash est simplement la création d’une empreinte numérique d’une chaîne de caractères. La fonction de hash est injective : cela signifie que pour toute chaîne hashée, il y a au plus une chaîne de départ qui lui est associée. Une autre propriété est qu’en changeant même très légèrement la chaîne de départ, on obtient un hash complètement différent. Enfin, un hash est irréversible : à partir d’un hash, il est impossible de retrouver l’antécédent.

La sécurité des mots de passe dans la majeure partie des applications Web amateurs repose sur le hash simple d’une chaîne de caractères (quand le mot de passe est chiffré, ce qui n’est pas toujours le cas… eh oui, il y a des kamikazes). Lorsque l’internaute s’inscrit, son mot de passe est chiffré dans la base. Ensuite, on teste si le hash du mot de passe saisi lors de l’authentification correspond. Etant donné l’unicité de l’antécédent par la fonction injective qu’est le hash, cela fonctionne généralement bien.

Cependant, ce qui marchait bien il y a quelques années dans le monde de la sécurité est à présent complètement dépassé. En effet, il existe ce que l’on appelle des tables arc-en-ciel. Ces tables permettent de déchiffrer très aisément un hash quelconque. Comment cela marche-t-il puisqu’on ne peut pas revenir en arrière ? Tout simplement en n’allant pas en arrière. Il s’agit en fait d’une table contenant des hashs pré-calculés. Les mots de passe les plus simples peuvent donc être très facilement récupérés : il suffit de récupérer l’enregistrement correspondant au hash à déchiffrer, et on obtient le mot de passe en clair.

Prenons par exemple un hash SHA1 au hasard :

db4f707f9c5d964c6af953a08f87c57e780c0a35

Allons faire un tour sur un site de cracking. Par exemple, Passwords recovery. Cela nous permet alors de retrouver très facilement le mot de passe de départ :

jonathan-petitcolas

La sécurité par hash est donc illusoire. Cela obligera simplement à ouvrir un nouvel onglet et à faire un copier/coller. On a vu mieux, non ? ;)

Dans un prochain billet, nous parlerons de l’ajout d’un grain de sel, ce qui nous permettra d’ajouter une sécurité supplémentaire à notre algorithme.