Comment cela fonctionne
Une fonction de hachage transforme n’importe quelle quantité de données en une courte valeur de longueur fixe. Modifiez un seul bit de l’entrée et le résultat change complètement ; avec SHA-256, personne ne sait trouver deux entrées différentes qui donnent la même valeur. C’est pourquoi les pages de téléchargement publient un hash : si votre copie donne le même, c’est le même fichier, octet pour octet.
La page utilise l’API Web Crypto intégrée à votre navigateur pour SHA-1, SHA-256, SHA-384 et SHA-512, et une petite implémentation MD5 à elle, car les navigateurs n’en proposent pas. Le texte est haché sous forme d’octets UTF-8. Un fichier est lu en mémoire et haché sur place ; rien n’est envoyé. Web Crypto a besoin du fichier entier d’un coup : la limite pratique est donc de quelques centaines de Mo, selon votre appareil.
Le champ de somme de contrôle accepte un hash seul en majuscules ou en minuscules, des groupes séparés par des espaces ou des deux-points, une ligne issue de sha256sum, une ligne de style BSD comme SHA256 (file.iso) = …, ou du Base64. Il y repère le hash et le compare aux cinq résultats.
Exemple
Le texte « abc » (3 octets, sans saut de ligne) a pour hash SHA-256 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad et pour hash MD5 900150983cd24fb0d6963f7d28e17f72, les valeurs de test de FIPS 180-2 et de la RFC 1321. Une entrée vide donne le SHA-256 e3b0c442…b855 : si vous le voyez pour un fichier, ce fichier est vide.
Questions
À quoi sert SHA-256 ?
À vérifier que des données sont exactement ce qu’elles doivent être. Les distributions Linux publient les sommes SHA-256 de leurs images ISO, les gestionnaires de paquets vérifient chaque paquet avec l’une d’elles, Git et Docker nomment le contenu par son hash, et les certificats TLS et les signatures de code reposent dessus. On ne connaît aucun moyen pratique de trouver deux entrées ayant le même SHA-256.
MD5 est-il sûr ?
Pas pour la sécurité. Des chercheurs savent créer depuis 2004 des fichiers différents ayant le même MD5, et depuis le logiciel malveillant Flame en 2012, de telles collisions servent dans de vraies attaques. MD5 repère encore un téléchargement abîmé par accident, mais quelqu’un qui peut modifier le fichier peut aussi le faire correspondre. Pour tout ce qui compte, comparez le SHA-256. SHA-1 est cassé de la même façon depuis 2017.
Comment vérifier un fichier ISO ?
Téléchargez l’ISO et la somme de contrôle que publie le projet, idéalement depuis son propre site en HTTPS. Choisissez le fichier ici et collez la somme de contrôle dans le champ : une correspondance en vert signifie que votre copie est identique. Sur un serveur, lancez sha256sum sur le fichier et comparez, ou sha256sum -c avec le fichier SHA256SUMS. Si le projet signe aussi le fichier de sommes, vous pouvez vérifier la signature avec gpg.
Peut-on inverser un hash pour retrouver le texte ?
Non. Un hash garde bien moins d’informations que l’entrée : il n’existe donc aucun moyen de recalculer l’entrée à partir de lui. Les entrées courtes ou fréquentes peuvent tout de même être retrouvées en essayant des candidats, c’est pourquoi les mots de passe sont stockés avec des fonctions lentes et salées comme bcrypt ou Argon2, pas avec un simple SHA-256 ou MD5.
Pourquoi mon hash diffère-t-il de celui de la ligne de commande ?
En général à cause d’un saut de ligne. echo "text" | sha256sum hache le texte plus un retour à la ligne ; utilisez echo -n ou printf pour l’éviter. Les fins de ligne Windows (CR LF) et une marque d’ordre des octets (BOM) au début d’un fichier changent aussi le résultat. Pour les fichiers, le hash porte toujours sur les octets exacts : une correspondance ici et dans sha256sum signifie donc que c’est le même fichier.