Calculateur SHA-1

Calculez l'empreinte SHA-1 de n'importe quel fichier, directement dans votre navigateur.

CALCULATEUR_SHA-1

[1] SÉLECTIONNER FICHIER(S) À HACHER

Un fichier, plusieurs, ou deux à comparer.

[2] CHOISISSEZ VOTRE FONCTION DE HACHAGE

[3] LANCER LE PROCESSUS DE HACHAGE

SHA-1 en bref

SHA-1 (Secure Hash Algorithm 1) a été conçu par la NSA et publié par le NIST américain en 1995, dans la norme FIPS 180-1. Il remplace une première version de 1993, rétrospectivement appelée SHA-0, retirée peu après sa parution pour une faiblesse jamais détaillée publiquement. SHA-1 traite le fichier par blocs de 512 bits, en 80 étapes par bloc, et produit 160 bits.

Une empreinte SHA-1 s'écrit donc avec 40 caractères hexadécimaux, huit de plus qu'un MD5. Celle d'un fichier vide vaut da39a3ee5e6b4b0d3255bfef95601890afd80709 ; si vous obtenez cette valeur pour un document que vous croyez rempli, c'est que le fichier sélectionné est vide.

SORTIE : 160 bits — 40 caractères hexadécimaux

NORME : FIPS 180-1 (1995), aujourd'hui FIPS 180-4

ÉTAT : Collisions démontrées en 2017 — déconseillé pour la sécurité

SHAttered et la fin de la confiance

Dès 2005, Wang Xiaoyun, Yin Yiqun Lisa et Yu Hongbo montrent qu'une collision SHA-1 coûte beaucoup moins que prévu par la théorie. Pendant douze ans, cela reste un résultat de laboratoire : l'attaque est connue, mais personne ne l'a menée jusqu'au bout.

En février 2017, Google et le CWI d'Amsterdam publient SHAttered : deux fichiers PDF au contenu visiblement différent, mais au SHA-1 rigoureusement identique. Le calcul a demandé de l'ordre de 263 évaluations de SHA-1, un effort énorme mais à la portée d'une grande entreprise ou d'un État. En 2020, Gaëtan Leurent et Thomas Peyrin franchissent une étape de plus avec une collision à préfixe choisi, baptisée « SHA-1 is a Shambles », et l'utilisent pour forger une fausse certification de clé PGP.

Depuis, les organismes de normalisation ont tranché. Le NIST a annoncé fin 2022 que SHA-1 devait être abandonné dans ses normes d'ici fin 2030. Pour la vérification de fichiers, la conséquence est simple : une somme SHA-1 ne prouve plus que personne n'a substitué le fichier.

Certificats, navigateurs et signatures

Le web a anticipé la chute. Les autorités de certification réunies au sein du CA/Browser Forum ont cessé d'émettre des certificats TLS publics signés en SHA-1 à partir du 1er janvier 2016, et début 2017 Chrome et Firefox ont commencé à refuser ceux qui restaient en circulation. Si un site affiche aujourd'hui une erreur de certificat liée à SHA-1, c'est presque toujours un équipement interne ancien, pas une attaque.

Tout ce qui relève de la signature a suivi le même chemin : signature de code, signatures de courriels, certificats de clés. En revanche, HMAC-SHA-1 n'est pas touché par les collisions, car sa sécurité repose sur une clé secrète. C'est pourquoi les codes à six chiffres des applications d'authentification (TOTP, RFC 6238) utilisent encore HMAC-SHA-1 par défaut sans que cela pose problème.

Git et SHA-1

Git est sans doute l'endroit où vous croisez le plus de SHA-1 sans le savoir : chaque commit, chaque arborescence et chaque fichier versionné est désigné par une empreinte de 40 caractères. Après SHAttered, Git 2.13 (2017) a intégré une détection des collisions, issue des travaux de Marc Stevens et Dan Shumow, qui rejette les fichiers construits selon cette méthode.

Depuis Git 2.29 (2020), on peut créer un dépôt qui utilise SHA-256 avec git init --object-format=sha256. Ce format reste peu répandu, car les forges et les outils doivent tous le prendre en charge, et un dépôt SHA-256 ne s'échange pas directement avec un dépôt SHA-1.

Attention à une confusion fréquente : l'identifiant Git d'un fichier n'est pas le SHA-1 du fichier. Git hache un petit en-tête (blob, la taille, un octet nul) suivi du contenu. git hash-object rapport.pdf et le calculateur ci-dessus donnent donc deux valeurs différentes, et c'est normal.

Quand SHA-1 reste acceptable

  • ›comparer un fichier à une somme SHA-1 publiée par un ancien miroir, faute de mieux, puis chercher une signature ou un SHA-256 si l'enjeu est réel ;
  • ›identifier des fichiers dans un inventaire interne ou détecter des doublons, où personne n'a intérêt à provoquer une collision ;
  • ›reproduire une valeur exigée par un vieux logiciel ou une procédure qui n'a pas encore été mise à jour.

Pour tout nouveau besoin, choisissez SHA-256 : il est disponible partout, et le calculateur SHA-256 fonctionne exactement de la même façon.

Les commandes SHA-1 par système

Windows

certutil -hashfile setup.exe SHA1
Get-FileHash -Algorithm SHA1 .\setup.exe

Notez l'absence de tiret dans SHA1 : c'est le nom attendu par les deux commandes.

macOS

shasum setup.dmg
shasum -a 1 setup.dmg

Sans option, shasum calcule justement un SHA-1 ; -a 1 le rend explicite dans un script.

Linux et autres Unix

sha1sum setup.tar.gz
openssl dgst -sha1 setup.tar.gz

OpenSSL est souvent présent là où les outils GNU manquent ; il écrit le résultat sous la forme SHA1(setup.tar.gz)= ….

Erreurs typiques avec une empreinte SHA-1

  • ›Confondre avec une empreinte PGP. Une empreinte de clé OpenPGP v4 fait aussi 40 caractères, souvent présentés en dix groupes de quatre. C'est le SHA-1 de la clé publique, pas d'un fichier téléchargé.
  • ›Groupes séparés par des espaces. Quand une valeur est publiée par paquets de quatre ou huit caractères, supprimez tous les espaces avant de la coller dans le champ de vérification.
  • ›Casse. Get-FileHash répond en majuscules, sha1sum en minuscules ; c'est la même valeur, et le calculateur compare sans tenir compte de la casse.
  • ›32 ou 64 caractères au lieu de 40. La valeur publiée est alors un MD5 ou un SHA-256 : changez d'algorithme plutôt que de conclure que le fichier est corrompu.

Pour aller plus loin

Questions fréquentes sur SHA-1

Puis-je encore me fier à une somme SHA-1 pour un téléchargement ?

Pour repérer un fichier abîmé pendant le transfert, oui. Pour être sûr que personne n'a remplacé le fichier, non : depuis 2017, des collisions SHA-1 ont été produites publiquement. Si l'éditeur publie aussi un SHA-256 ou une signature, utilisez-les en priorité.

Pourquoi le SHA-1 de mon fichier ne correspond-il pas à son identifiant Git ?

Git ajoute un en-tête avec le type d'objet et la taille avant de hacher le contenu. L'identifiant d'un blob Git est donc toujours différent du SHA-1 brut du fichier, même si les deux font 40 caractères.

Qu'a démontré exactement l'attaque SHAttered ?

Qu'il est possible, avec beaucoup de puissance de calcul, de fabriquer deux fichiers différents ayant le même SHA-1. Elle ne permet pas de produire un fichier correspondant à une empreinte SHA-1 déjà publiée par quelqu'un d'autre.

SHA-1 et SHA1 désignent-ils la même chose ?

Oui. « SHA-1 » est le nom officiel, « SHA1 » l'orthographe attendue par certutil, PowerShell ou OpenSSL. Le calcul est identique, seule l'écriture change selon l'outil.