Ce que fait cet outil
Calcule le hash SHA-1 de n'importe quel texte ou fichier dans ton navigateur, en renvoyant un digest hexadécimal de 40 caractères. SHA-1 est une fonction de hash 160 bits publiée par le NIST en 1995 (FIPS 180-1), conçue par la NSA. Elle est dépréciée pour les usages de sécurité : une attaque par collision pratique (« SHAttered ») a été démontrée par Google et CWI Amsterdam en 2017, et les collisions à préfixe choisi ont suivi en 2019. SHA-1 n'est plus considéré comme cryptographiquement sûr.
Là où SHA-1 est encore présent
- IDs d'objets git. Chaque commit, tree et blob git est identifié par son hash SHA-1. Le modèle d'objet de git migre vers SHA-256 (le flag
--object-format=sha256existe), mais SHA-1 reste le défaut pour la grande majorité des dépôts. Le risque de collision pour les IDs de commit est réel mais maîtrisé : GitHub et d'autres forges déploient une détection style SHAttered (la bibliothèquesha1dc) pour signaler les collisions préparées. - Subversion (SVN). Même raisonnement que git, moins d'effort de migration en cours.
- Anciens certificats TLS. Les navigateurs ont arrêté de faire confiance aux certificats signés en SHA-1 en 2017, mais des systèmes legacy en produisent encore.
- Code existant qui hashe pour des raisons non-sécurité. Clés de cache, empreintes, tables de déduplication — tout va bien.
Quand SHA-1 est inadéquat
- Nouveaux certificats TLS, certificats de signature de code ou signatures de document. Utilise SHA-256 ou SHA-384.
- Stockage de mots de passe. Utilise un hash lent et salé comme bcrypt ou Argon2. SHA-1 est trop rapide et pas conçu pour ça.
- Tout ce où un attaquant peut choisir l'entrée. Un attaquant déterminé avec un cluster loué peut produire une collision SHA-1 en jours. Si ton modèle de sécurité laisse l'attaquant influencer ce qui est hashé, SHA-1 est cassé.
- Subresource Integrity (SRI). Les navigateurs accepteront SHA-1 dans les attributs
integrity, mais la spec recommande SHA-256 minimum.
Vecteurs de test
De FIPS 180-2 et de la suite de référence SHA-1 :
- String vide
""→da39a3ee5e6b4b0d3255bfef95601890afd80709 "abc"→a9993e364706816aba3e25717850c26c9cd0d89d"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"→84983e441c3bd26ebaae4aa1f95129e5e54670f1"The quick brown fox jumps over the lazy dog"→2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
Notes
Pourquoi 40 caractères ? SHA-1 produit 160 bits = 20 bytes. 20 bytes × 2 caractères hex par byte = 40 caractères visibles.
Pourquoi git utilise-t-il SHA-1 si c'est cassé ? Git utilise SHA-1 comme identifiant content-addressable, pas comme primitive de sécurité. Le modèle de menace est « deux objets bien formés rentrent accidentellement en collision », ce qui reste astronomiquement improbable. Le modèle de menace n'est pas « un attaquant pousse un commit malicieux qui a le même hash que ton vrai commit » — pour ça, GitHub etc. utilisent sha1dc pour détecter les préparations style SHAttered et les rejeter. La migration vers SHA-256 est en cours mais lente parce que la base installée est énorme.
Pourquoi mon SHA-1 diffère-t-il de ce que sha1sum retourne ? Newline final. echo "hello" | sha1sum inclut le \n. Coller "hello" ici non. Utilise echo -n ou le sélecteur de fichier.
Outils liés
- Générateur de hash — cinq hashes côte à côte
- SHA-256 — le remplaçant moderne de SHA-1
- MD5 — le prédécesseur ; encore plus profondément cassé