Editer 2 : Cette réponse a suscité de nombreuses controverses. J'invite le lecteur à lire les autres réponses et commentaires. Je m'en tiens toujours à mon opinion initiale selon laquelle cela n'a pas d'importance pour les Gravatars, mais il y a certainement de bons arguments pour le contraire.
EDITAR: Cette réponse a été rédigée il y a plus d'un an. Voir mon addendum au bas de la page.
@ICR : Il IS absolument impossible, il n'y a pas de "mais".
Une table arc-en-ciel permet d'obtenir une correspondance pour un hachis donné, mais vous devez JAMAIS être en mesure d'obtenir l'entrée exacte (bien qu'il y ait en effet une chance sur un nombre illimité de l'obtenir, mais vous ne sauriez pas s'il s'agit ou non de l'entrée exacte). Si vous pouviez obtenir l'entrée exacte à partir d'un hachage de 128 bits, vous auriez inventé le meilleur algorithme de compression au monde.
Il existe un nombre illimité de possibilités qui produiront toutes exactement le même hachage.
Permettez-moi d'expliquer un peu plus en détail. Imaginez un algorithme de hachage où "foo" et "bar" donneront le même hachage, disons "HAsh1 !".
Maintenant, vous avez le Hash - HAsh1 ! Comment savoir si les données d'entrée étaient "foo" ou "bar" ? Vous ne pouvez pas et vous ne pourrez jamais le savoir.
Quel est le problème et à quoi servent les tables arc-en-ciel ?
Imaginez que vous piratiez ma base de données d'utilisateurs et que vous vérifiiez la table des utilisateurs. Mon login est généralement stocké en clair, vous savez donc que vous devez vous connecter avec "mstum". Mais mon mot de passe est haché. J'ai utilisé "trez" avec des hashs incidentiels pour HAsh1 !
Vous vérifiez mon mot de passe haché, qui est HAsh1 !, mais vous ne savez pas que mon mot de passe en clair est trez. Mais le fait est que vous n'avez pas BESOIN de le savoir. Vous consultez votre table arc-en-ciel pour HAsh1 ! et vous voyez "foo".
Vous vous rendez donc sur la page pour laquelle vous venez d'obtenir les données de l'utilisateur et vous vous connectez en tant que "mstum" avec "foo". Bien que j'aie utilisé "trez" comme mot de passe, vous vous connecterez avec succès avec "foo" parce que le hachage est exactement le même.
C'est ce que l'on appelle une collision : 2 valeurs d'entrée ayant le même hachage. Pour MD5, il n'y a que 128 bits, alors que pour SHA-512, il y a 512 bits, mais vous aurez toujours une infinité d'entrées qui donneront le même hachage.
Donc : Les tables arc-en-ciel résolvent l'un des deux problèmes que les pirates veulent résoudre : elles leur permettent de s'authentifier comme n'importe quel utilisateur pour lequel ils ont obtenu le hash.
Le deuxième problème des pirates informatiques est un peu hors sujet : Comment donner à l'utilisateur un fichier (par exemple, un fichier d'installation manipulé qui contient des logiciels malveillants ou qui est une version modifiée d'un outil qui fait de mauvaises choses) qui aura avec succès le même hachage ? Lorsque l'on consulte des pages de téléchargement populaires ou des sites open source, on trouve "Setup.exe, MD5 Hash : f387......". Bien qu'il y ait une infinité de possibilités de produire quelque chose dont le hachage est f387..., le pirate doit modifier le fichier Setup.exe de manière à ce qu'il contienne son logiciel malveillant ET qu'il ait le hachage f387..... C'est difficile, mais possible. En ce qui concerne le MD5, c'est désormais possible dans un délai raisonnable. C'est pourquoi le MD5 ne devrait plus être utilisé à moins qu'une norme ne l'exige ou que la sécurité ne soit pas une préoccupation.
Pour Gravatar, la sécurité n'est pas une préoccupation, donc MD5 est très bien et ils veulent quelque chose de rapide puisque ce n'est pas lié à la sécurité.
Edit : Voici un exemple concret, celui qui a été utilisé pour montrer les collisions dans MD5 :
d131dd02c5e6eec4693d9a0698aff95c 2fcab5**8**712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325**7**1415a 085125e8f7cdc99fd91dbd**f**280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2**b**487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080**a**80d1e c69821bcb6a8839396f965**2**b6ff72a70
et
d131dd02c5e6eec4693d9a0698aff95c 2fcab5**0**712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325**f**1415a 085125e8f7cdc99fd91dbd**7**280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2**3**487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080**2**80d1e c69821bcb6a8839396f965**a**b6ff72a70
les deux hashs sont 79054025255fb1a26e4bc422aef54eb4.
Alors, compte tenu du hachage, comment savoir lequel des deux a été utilisé ?
Addendum : Je maintiens mon point de vue initial : Il est impossible de décoder une adresse électronique à partir d'un hachage. Vous pouvez utiliser la force brute ou une table arc-en-ciel et vous aurez peut-être la chance d'obtenir une adresse électronique. Comme il y a une infinité d'entrées dans un hachage, il y a aussi une infinité d'entrées qui ressemblent à une adresse électronique, mais les chances d'en obtenir une valide sont vraiment insignifiantes. Le décodage à partir d'un hachage n'est donc pas une option. Mais il y a des options que je n'avais pas envisagées à l'origine, comme par exemple aquí . En gros, vous pouvez deviner. Je poste avec mon vrai nom, vous pouvez donc essayer toutes sortes de combinaisons de michaelstum@, mstum@, michael.stum@ avec tous les grands fournisseurs et les faire passer par une fonction de hachage. Cela ne fonctionne pas dans tous les cas, mais comme de nombreuses personnes utilisent GMail, Yahoo ou Hotmail, les chances de succès ne sont pas si faibles. Le salage résoudrait-il ce problème ? Peut-être. Peut-être pas. Il faudrait trouver le sel, ce qui nécessite très certainement une approche par force brute. Au moins, vous disposez d'un texte clair connu (votre propre adresse de courrier électronique), ce qui vous permet d'utiliser la force brute sur votre machine. Le fait d'avoir un sel différent pour chaque utilisateur pourrait être plus sûr, mais je ne sais pas si cela pourrait entraîner un risque significatif de création de collisions.
En y réfléchissant, je pense que le salage avec un sel long et aléatoire améliorerait en effet la sécurité car il mettrait en échec la seule approche viable qui consiste à deviner. Je recommanderais plutôt d'utiliser des adresses électroniques jetables/différentes car on ne sait jamais ce qui peut arriver (les bases de données des sites web sont piratées tous les jours et ces adresses électroniques sont certainement vendues à des spammeurs), mais je me rends compte que ce n'est pas pratique pour les personnes qui n'ont pas de domaine et de boîte aux lettres électronique attrape-nigauds.