Salut,
D’un point de vue technique :
- On ne parle pas vraiment de résistance à l’inversion (vu qu’une foncion de hash est non-inversible), mais de résistance à la (première) préimage.
-
Ta définition de la résistance à la collision est correcte (difficulté de trouver deux messages qui rentrent en collision). Cela dit l’exemple que tu donnes avec "Zeste de" ressemble plus à de la résistance sur la seconde préimage (soit un clair donné, peut-on trouver facilement un autre clair qui possède le même hash ?). Comme tu l’expliques, la résistance à la collision peut se buteforce en $\sqrt N$ opérations, où $N$ est la taille de l’espace du hash. Au contraire, il existe très peu de méthodes pour casser la seconde préimage, à part explorer $N$ en entier. Je crois que pour MD5, on est descendu à quelque chose comme devoir calculer $2^{120}$ hashs sur les $2^{128}$, mais rien de transcendant.
-
Enfin, tu ne parles pas non plus du fait qu’une fonction de hash cryptographique doive empêcher de modifier le message sans altérer le hash. Autrement dit, n’importe quelle légère modification du message entraîne une modification complète du hash. C’est de la résistance sur la seconde préimage, mais ça va mieux en le disant clairement.
Bon et sinon, je ne sais pas exactement si tu veux en parler, mais les fonctions de hash n’ont pas qu’un rôle cryptographique, loin de là. Pour ces applications non cryptographiques, il n’y a souvent pas besoin de ces résistances à la préimage, ou à la collision.
A part ça, tu peux aussi parler de rainbow tables, de (H)MAC, recherche de triplets ayant le même hash… Mais je ne sais pas si tu veux être aussi exhaustif dans ton tuto.
Sur la forme, tu n’introduis pas bien tes $2^{80}$ dans la partie "Avec des vraies fonctions de hachage", et dans la partie "signature électronique", tu ne dis pas ce qu’est une clef privée, ce qui peut poser problème parce que tout le monde n’est pas forcément familier avec le chiffrement asymétrique. Dans la partie "Quel peut-être le problème d’une collision ?", sous-partie "Exemple avec la fonction bidon", tu dis que Alice signe d1 avec sa clef privée et obtient S, et que M en profite pour signer d2 avec S. Ce n’est pas tout à fait ça, vu qu’en fait Bob n’a pas besoin de faire quoi que ce soit, il lui suffit de publier d2 et S, et tout correspondra.
Voilà voilà, bonne continuation.
Juste pour le fun, je rajoute un petit PDF qui explique comment DoS plein de serveurs Web en exploitant une faiblesse des fonctions de hash : https://events.ccc.de/congress/2011/Fahrplan/attachments/2007_28C3_Effective_DoS_on_web_application_platforms.pdf La faille a été corrigée depuis, mais c’est quand même instructif.