Une empreinte ne revient pas
Le chiffrement vous rend le texte dès que vous détenez la clé. Une empreinte n’a pas de clé : elle écrase n’importe quelle entrée, si longue soit-elle, en une seule valeur de longueur fixe, et rien dans cette valeur ne permet de retrouver l’original.
Les empreintes répondent donc à une seule question : ces deux choses sont-elles identiques ? Le fichier téléchargé correspond-il à la valeur publiée ? Le mot de passe saisi correspond-il à celui enregistré ? S’il faut cacher une donnée pour la relire plus tard, c’est du chiffrement qu’il vous faut, pas une empreinte.
Quel algorithme choisir
- MD5 — une conception de 1991. Fabriquer deux entrées différentes de même empreinte prend quelques secondes sur un portable. Il subsiste parce que des éditeurs publient encore des sommes MD5 et qu’il faut pouvoir les comparer.
- SHA-1 — deux PDF en collision ont été publiés en 2017. Aucune raison de le retenir pour du neuf.
- SHA-256 — la valeur par défaut d’aujourd’hui : certificats, signatures et chaînes de blocs sont là.
- SHA-384 et SHA-512 — ils reposent sur des opérations 64 bits et peuvent donc dépasser SHA-256 sur une machine 64 bits. À choisir quand vous voulez une empreinte plus longue.
Pour vérifier une intégrité, SHA-256 suffit. Si l’éditeur n’a publié qu’un MD5, comparez avec lui, mais jugez séparément si le téléchargement vient d’une source fiable.
Les mots de passe demandent plus
Stocker un mot de passe en SHA-256 vaut mieux que de le laisser en clair, et reste une mauvaise idée. Les fonctions de hachage sont conçues pour être rapides : un attaquant en essaie des milliards par seconde, et tout mot de passe courant figure déjà dans une table.
Utilisez une fonction conçue pour être lente : bcrypt, scrypt ou Argon2. Elles permettent d’augmenter le coût de calcul et ajoutent automatiquement un sel différent par utilisateur. N’en écrivez pas une vous-même : prenez celle que fournit votre langage.
Même fichier, empreinte différente
Cet outil hache les octets UTF-8 de votre saisie. Quand le résultat diverge de celui d’un outil en ligne de commande, l’écart est presque toujours invisible à l’écran.
- Fins de ligne — le
\r\nde Windows et le\nd’Unix ne sont pas les mêmes octets. - Un saut de ligne final —
echoen ajoute un par défaut. Essayezecho -nouprintf. - Un BOM — certains éditeurs ajoutent trois octets en tête de fichier.