Hashs : quel algorithme utiliser ?

Catégorie Création | Tags : , ,

Utiliser des condensats (hashs) pour stoker des mots de passe, une bonne idée … pas si sécurisée que ça …

Au début je voulais juste vous présenter mon générateur de hashs, finalement j’ai rédigé ce petit billet destiné a ceux qu’il pourrait informer.

Les algorithmes de cryptages et le hash

Il est bon de ne pas confondre les deux choses. Un texte (ou tout autre document) crypté doit pouvoir être décodé, sinon il ne sert a rien. La chaine cryptée (le résultat), n’est pas toujours la même, sa longueur dépend du contenu crypté.

A l’inverse un condensat (ou hash in english), n’est utile que si il n’est pas (directement) réversible. Dans ce cas, une même chaine doit générer le même condensat après chaque passage à la moulinette mathématique. La longueur de du condensat (le résultat du hashage) est fixe et n’est pas un cryptage du contenu, juste une valeur obtenu sur la base de la chaine d’entrée. Ces condensats sont classiquement utilisés pour stocker des mots de passe (linux, applications php, etc.)

Collision

Avant de commencer, il vous faut savoir ce qu’est une collision. C’est simple, il s’agit de la génération d’un même hash pour deux chaine différentes. Autrement, dit, dans le contexte d’un mot de passe. Il y a collision si le mot de passe saisie est valide alors qu’il n’est pas celui défini par l’utilisateur. L’authentification est donc valide alors que le mot de passe saisie n’est pas le bon. Le condensat est le bon, le mot passe ne l’est pas.

L’habitude du MD5

Parmis les nombreux algorithmes disponibles, le md5 est le plus populaire. Pourtant, vous ne devriez pas l’utiliser.

Il n’est en effet pas considéré comme sûr depuis qu’il a été démontré qu’il est possible de produire des collisions à la demande. Connaissant le hash, il est alors possible de trouver un mot de passe qui permette l’identification. Prenons par exemple le cas ou le hash est stocké dans un cookie, si un hacher arrive a obtenir ce hash, il pourrait trouver un mot de passe valide au controle md5. Autrement dit, trouver un mot de passe générant le condensant voulu. Vous n’aurez donc pas le mot de passe recherché mais un mot de passe qui sera validé à la vérification de son condensat (ce qui revient finalement au même).

Reverse MD5, SHA, etc

Même si le pirate, n’est pas capable de générer des collisions à la demande (est-ce si simple ?; l’algorithme est t-il trouvable ?), il peut espérer le mot de passe associé au hash. Il est en effet possible de retrouver la chaine condensée (hashé). Le hash de ‘beer’ sera toujours le même (avec le même algorithme évidement). Donc il suffit qu’on s’amuse à stocker ses hashs et les chaines qui les produisent pour retrouver les chaines. Il existe ainsi plusieurs sites (même bases de données ?) qui permettent de retrouver ces chaines. Essayez de retrouver le mot qui produit le hash 3e1867f5aee83045775fbe355e6a3ce1 sur ce site md5.benramsey.com. Il est possible de faire la même chose avec le hash SHA1 600982cf9c0c41e12df616d2a9a72d675345ced7 sur ce site hashreverse.com.

Utiliser un algorithme pas très répandu peu être une bonne idée puisqu’il existerait donc moins de possibilités d’effectuer une recherche inverse. Mais ce n’est pas vraiment une conduite très sure.

Quel algorithme utiliser ?

Je ne suis un expert en cryptographie mais il va de soit que vous allez chercher à utiliser l’algorithme produisant le moins de collisions pour un nombre d’attaques donné. Il convient d’éviter les algorithmes peu fiables comme le MD5, MD4, MD2 et les algorithmes de moins de 128 bits. On peut lire dans le définition du MD5 sur wikipedia qu’il est préférable d’utiliser des algorithmes tels que SHA-256, RIPEMD-160 ou Whirlpool.
Mais leur utilisation n’est pas complètement légale.

Utilisation légale

Je ne suis pas expert juridique, les informations suivantes sont peut-être erronées ou périmées, cependant, il semblerait qu’en France vous n’avez pas le droit de stocker des informations cryptées en plus de 128 bits. Hors SHA-256, RIPEMD-160 ou Whirlpool génèrent des hashs de 256, 160 et 512 bits… interdit en france, pour stoker des données. Ce qui ne vous empêche pas de les utiliser si vous ne stocké pas les données ou les utilisé en tant que telle, pas en tant qu’information pseudo cryptée.

C’est mon choix

Mon idée (vous pouvez la discuter en commentaire) est qu’il est préférable d’utiliser un algorithme sans grave faille de sécurité (quelle prise de position !) générant un hash de 128 bits (donc légal). A partir des définitions de wikipedia, il semble que l’algorithme Tiger soit le plus sûr (qui repousse les attaques basées sur des techniques habituelles en cryptanalyse qui ont fait leur preuve avec d’autres fonctions comme le MD4).

Au delà du hash

Hasher les mots de passe est très bien mais cela ne suffit pas. Il faut également veiller à e que ces mots de passe ne soit pas ridiculement simple à trouver (une attaque brute-force pourrait suffire) et il faut que les hashs des mots de passe ne soit pas accessibles (stocké dans un cookie par exemple). Ce n’est pas exhaustif, vous l’aurez compris.

Une sensibilisation pratique à la sécurité des applications web : sécurite et application Web.

Première conclusion, le hash md5 ne doit pas être accessible a n’importe qui. Seconde conclusion : ne pas utiliser de md5, au cas où les hashs seraient trouvés.

Voilà, je ne suis pas expert, ni en sécurité, ni en cryptographie, si vous avez des remarques, oppositions… les commentaires sont ouverts, vous êtes le/la bienvenu(e).


Un générateur de hash

Parce qu’il peut parfois être pratique de générer un hash (pour remplacer directement un mot de passe en base de données, par exemple), j’ai codé un petit générateur de hash en ligne, disponible ici : générateur de hashs, 37 algorithmes sont disponibles, tous les algorithmes offerts par le php5 du serveur.

Ajouter a mon :
Del.icio.us digg Technorati Socializer fuzz scoopeo wikio 

Une réponse à “Hashs : quel algorithme utiliser ?”

  1. seb a écrit:

    Un article instructif :) Existe-t-il vraiment un algorithme de reverse MD5 capable de trouver un mot de passe à partir du hash ?

Laisser un commentaire