TK TaskKit
Strumenti per dev

Generatore di hash SHA-1

Calcola hash SHA-1 a 160 bit per testo o file nel tuo browser. Usato da git per gli ID dei commit e da vecchi certificati. Considerato deprecato a livello di sicurezza; SHA-256 è il sostituto moderno.

Input
Hash
Incolla testo per calcolare MD5, SHA-1, SHA-256, SHA-384 e SHA-512.

Gli input restano su questo dispositivo. Ogni strumento per dev di TaskKit gira interamente nel tuo browser. Token, payload e testo incollato non vengono trasmessi ai server di TaskKit né a terze parti.

Cosa fa questo strumento

Calcola l'hash SHA-1 di qualsiasi testo o file nel tuo browser, restituendo un digest esadecimale di 40 caratteri. SHA-1 è una funzione di hash a 160 bit pubblicata dal NIST nel 1995 (FIPS 180-1), progettata dalla NSA. È deprecata per scopi di sicurezza: un attacco di collisione pratico (« SHAttered ») è stato dimostrato da Google e CWI Amsterdam nel 2017, e le collisioni a prefisso scelto sono seguite nel 2019. SHA-1 non è più considerato crittograficamente sicuro.

Dove SHA-1 è ancora presente

  • ID di oggetti git. Ogni commit, tree e blob git è identificato dal suo hash SHA-1. Il modello a oggetti di git si sta muovendo verso SHA-256 (il flag --object-format=sha256 esiste), ma SHA-1 resta il default per la grande maggioranza dei repository. Il rischio di collisione per gli ID di commit è reale ma gestito: GitHub e altre forge implementano un rilevamento stile SHAttered (la libreria sha1dc) per segnalare collisioni preparate.
  • Subversion (SVN). Stesso ragionamento di git, meno sforzo di migrazione in corso.
  • Vecchi certificati TLS. I browser hanno smesso di fidarsi dei certificati firmati in SHA-1 nel 2017, ma sistemi legacy ne producono ancora.
  • Codice esistente che hasha per ragioni non di sicurezza. Chiavi di cache, impronte, tabelle di deduplicazione — vanno tutte bene.

Quando SHA-1 non è adatto

  • Nuovi certificati TLS, certificati di code-signing o firme di documenti. Usa SHA-256 o SHA-384.
  • Archiviazione password. Usa un hash lento e salato come bcrypt o Argon2. SHA-1 è troppo veloce e non progettato per questo.
  • Qualsiasi cosa dove un attaccante può scegliere l'input. Un attaccante determinato con un cluster in affitto può produrre una collisione SHA-1 in giorni. Se il tuo modello di sicurezza lascia all'attaccante influenzare cosa viene hashato, SHA-1 è rotto.
  • Subresource Integrity (SRI). I browser accetteranno SHA-1 negli attributi integrity, ma la spec raccomanda SHA-256 minimo.

Vettori di test

Da FIPS 180-2 e dalla suite di riferimento SHA-1:

  • Stringa vuota ""da39a3ee5e6b4b0d3255bfef95601890afd80709
  • "abc"a9993e364706816aba3e25717850c26c9cd0d89d
  • "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"84983e441c3bd26ebaae4aa1f95129e5e54670f1
  • "The quick brown fox jumps over the lazy dog"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Note

Perché 40 caratteri? SHA-1 produce 160 bit = 20 byte. 20 byte × 2 caratteri hex per byte = 40 caratteri visibili.

Perché git usa SHA-1 se è rotto? Git usa SHA-1 come identificatore content-addressable, non come primitiva di sicurezza. Il modello di minaccia è « due oggetti ben formati collidono accidentalmente », che è ancora astronomicamente improbabile. Il modello di minaccia non è « un attaccante pusha un commit malevolo che ha lo stesso hash del tuo commit reale » — per quello, GitHub ecc. usano sha1dc per rilevare preparazioni stile SHAttered e rifiutarle. La migrazione a SHA-256 sta avvenendo ma lentamente perché la base installata è enorme.

Perché il mio SHA-1 differisce da quello che restituisce sha1sum? Newline finale. echo "hello" | sha1sum include il \n. Incollare "hello" qui no. Usa echo -n o il selettore di file.

Strumenti correlati

  • Generatore di hash — cinque hash affiancati
  • SHA-256 — il sostituto moderno di SHA-1
  • MD5 — il predecessore; ancora più profondamente rotto