Italiano

Strumenti per sviluppatori · SHA calcolatore hash

Da SHA-0 a SHA-3: come si è evoluto lo standard Secure Hash di NIST

· Sfondo

sha-256 crittografia API del browser

Cronologia da SHA-0 a SHA-1, famiglia SHA-2 e SHA-3 che mostra due decenni di evoluzione
Illustrazione vettoriale originale ToolAcre

SHA-1, SHA-2 e SHA-3 sono tre generazioni con origini diverse. Questo post ripercorre il Secure Hash Standard dal SHA-0 ritirato alla competizione Keccak e spiega perché SHA-2 domina ancora.

Cosa significano i numeri? — perché SHA-256 è SHA-2 ma SHA-3 è qualcos'altro completamente diverso

Gli sviluppatori vedono SHA-1, SHA-256 e SHA-3 e presumono che siano una progressione lineare. Non lo sono. I numeri significano cose diverse in contesti diversi e la comprensione della storia familiare spiega perché SHA-256 è la scelta sensata per le nuove applicazioni, perché SHA-1 è solo legacy nonostante sia ampiamente utilizzato e perché SHA-3 è un progetto separato anziché un'evoluzione.

Quando NIST pubblicò per la prima volta una funzione hash sicura, la chiamarono SHA e successivamente SHA-0, una versione così di breve durata che la maggior parte degli sviluppatori non ne ha mai sentito parlare. Il SHA-0 fu ritirato nel giro di pochi anni a causa di un difetto non specificato che non fu mai reso pubblico. Questo ritiro è avvenuto in silenzio e gli algoritmi che ne sono seguiti hanno dato origine a confusione sui nomi. Dopo il ritiro di SHA-0, NIST ha pubblicato SHA-1, che è diventato lo standard per vent'anni.

Lo strumento copre SHA-1 e SHA-2; la cronologia dettagliata di SHA-0 non è prova del repository

SHA-1 è una funzione hash di 160 bit che produce un output esadecimale di 40 caratteri. Si basa sulla costruzione Merkle-Damgård, in cui una funzione di compressione elabora l'input blocco per blocco, concatenando lo stato in avanti. Il progetto era valido al momento della pubblicazione e per molti anni non ci furono attacchi pratici. Tuttavia, l'anno 2005 ha portato una svolta crittoanalitica. Un team guidato da Xiaoyun Wang ha pubblicato un attacco di collisione su SHA-1, dimostrando che trovare due messaggi diversi con lo stesso hash era fattibile utilizzando tecniche molto più efficienti dell'approccio della forza bruta.

Anni dopo, in 2017, un team chiamato SHAttered ha dimostrato la prima collisione pratica, utilizzando un cluster di GPU per trovare due diversi file PDF con lo stesso hash SHA-1. In 2020, un documento di follow-up ha dimostrato che le collisioni con prefisso scelto, la variante più pericolosa, erano accessibili. SHA-1 non era più semplicemente debole; era rotto. La risposta all'interruzione di SHA-1 è stata l'introduzione di SHA-2, una famiglia di quattro funzioni: SHA-224, SHA-256, SHA-384 e SHA-512.

SHA-2: la famiglia dei primi anni 2000 (224, 256, 384, 512 e successivamente la troncata 512/224 e 512/256) costruite sulla stessa costruzione

Questi quattro operano su diverse dimensioni di stato e diverse dimensioni di blocco, ma utilizzano la stessa costruzione fondamentale di SHA-1. La famiglia SHA-2 è stata pubblicata su 2001, anni prima delle grandi rotture su SHA-1, ma non è stata ampiamente adottata finché i crolli di SHA-1 non sono diventati concreti. SHA-256 produce un hash da 256 bit ed è ora la scelta standard per le nuove applicazioni. SHA-512 produce un hash da 512 bit ed è spesso più veloce sui processori da 64 bit perché funziona su parole da 64 bit anziché da parole da 32 bit.

La convenzione di denominazione per SHA-2 è l'origine della confusione. Le funzioni si chiamano SHA-256, SHA-384 e SHA-512 e fanno tutte parte della famiglia SHA-2. Quando qualcuno dice SHA-2, intende la filosofia di progettazione e la costruzione Merkle–Damgård, non un singolo algoritmo. I numeri nei nomi rappresentano le larghezze di output in bit, non uno schema di versione. SHA-256 non è un aggiornamento di SHA-1; è un design contemporaneo che utilizza la stessa struttura ma con migliori proprietà di sicurezza.

I documenti del repository hanno dimostrato le collisioni SHA-1 senza ricostruire la storia teorica senza fonti

All'interno della costruzione Merkle–Damgård utilizzata da SHA-1 e SHA-2, una funzione di compressione elabora l'input blocco per blocco. Lo stato viene trasferito da un blocco a quello successivo e lo stato finale viene visualizzato come digest. La funzione di compressione SHA-256 utilizza operazioni 32 bit e stato 256 bit, quindi elabora blocchi 512 bit. La funzione di compressione SHA-512 utilizza operazioni 64 bit e stato 512 bit, quindi elabora blocchi 1024 bit. Queste scelte influiscono sulle prestazioni e sulla larghezza di banda: SHA-512 è spesso più veloce perché l'aritmetica 64 bit è nativa sull'hardware moderno.

La decisione tra SHA-256 e SHA-512 per un nuovo sistema si basa solitamente su test delle prestazioni e vincoli di spazio piuttosto che sulla sicurezza, perché entrambi sono ancora sicuri all'inizio degli anni '20. Il calcolatore hash ToolAcre SHA fornisce SHA-256, SHA-384 e SHA-512 e quando i lettori confrontano i digest fianco a fianco, vedono la differenza di quattro caratteri tra SHA-256 (64 caratteri esadecimali) e SHA-512 (128 caratteri esadecimali).

SHA-3 non è compreso tra API supportato; la storia della competizione non è accertata dalle prove depositate

Le motivazioni per sostituire SHA-1 erano chiare all'inizio degli anni 2000, quindi NIST ha iniziato il processo di selezione di SHA-3. Invece di progettare un sostituto in modo isolato, NIST ha aperto la competizione alla comunità di ricerca crittografica. L'obiettivo era selezionare una funzione hash fondamentalmente diversa dalla costruzione Merkle-Damgård, per acquisire sicurezza da una varietà di progetti. Più team hanno presentato proposte e, nel corso di diversi anni, il concorso ha selezionato Keccak come vincitore. Keccak era una costruzione spugnosa, un modo diverso di costruire una funzione hash che non era mai stata utilizzata prima in uno standard.

SHA-3 è la standardizzazione NIST di Keccak, finalizzata in 2015. A differenza di SHA-2, che è una famiglia di algoritmi, SHA-3 viene solitamente definito un singolo algoritmo, sebbene anch'esso abbia più larghezze. SHA-3 non è ancora ampiamente utilizzato, il che è sorprendente considerando che è standard da quasi un decennio. Il motivo è che SHA-2 non è rotto. Non esiste alcun motivo di sicurezza urgente per eseguire l'aggiornamento da SHA-2 a SHA-3. La crittografia Web del browser API implementa SHA-1 e SHA-2 ma non SHA-3, motivo per cui il calcolatore di hash ToolAcre SHA non offre SHA-3.

SHA-2 rimane lo strumento predefinito; questo articolo evita un'affermazione di sicurezza universale non supportata

Perché SHA-2 è ancora ovunque è la questione centrale della scelta dell'algoritmo hash. SHA-2 non ha collisioni pratiche conosciute. Le implementazioni hardware sono mature. Ogni linguaggio di programmazione e piattaforma lo supporta. Cambiare l'algoritmo hash di un sistema è distruttivo: ogni hash archiviato deve essere migrato o conservato per la verifica, ogni punto di integrazione deve essere aggiornato e i test devono essere eseguiti per garantire che il nuovo algoritmo funzioni con ogni sistema downstream.

Per i sistemi in cui SHA-2 è ancora sicuro, questa interruzione non è giustificata. Per nuovi sistemi e nuovi protocolli, SHA-2 è l'impostazione predefinita sensata. Il calcolatore hash ToolAcre SHA mostra SHA-256 e SHA-512 in una posizione di rilievo perché sono ciò che le nuove applicazioni dovrebbero utilizzare. SHA-1 è elencato come solo legacy. SHA-384 è mostrato per completezza e per i casi d'uso in cui è specificamente richiesto.

Ciò che questo non copre sono gli interni di Keccak, che meritano un posto a parte

Il futuro degli standard di hash non è chiaro in questo momento. SHA-3 è sicuro e maturo e fornisce un'alternativa nel caso in cui SHA-2 venga danneggiato. L’informatica quantistica rappresenta una minaccia a lungo termine per tutte le attuali funzioni hash, ma la progettazione di funzioni hash resistenti ai quanti è un’area di ricerca aperta. NIST ha in corso un concorso di crittografia post-quantistica, selezionando algoritmi destinati a resistere agli attacchi quantistici, ma le funzioni hash non sono una priorità in quel concorso rispetto ai sistemi a chiave pubblica.

Per le applicazioni pratiche negli anni '20, SHA-256 è la risposta alla domanda "quale hash dovrei usare?" Per la verifica dell'integrità, l'indirizzamento dei contenuti e il rilevamento delle impronte digitali, SHA-256 è lo standard. Per i sistemi che necessitano di un digest più ampio, SHA-512 è solitamente più veloce su hardware 64 bit. SHA-384 è più comune nelle specifiche della suite di crittografia TLS. SHA-1 è solo per la verifica legacy. Il calcolatore di hash ToolAcre SHA fornisce tutti e quattro gli algoritmi Web Crypto in modo che gli sviluppatori possano vedere i loro risultati.

Conclusione: tre generazioni, un solo cognome: il calcolatore di hash ToolAcre SHA copre gli algoritmi SHA-1 e SHA-2 forniti dal browser

Comprendere la storia di SHA chiarisce perché i numeri e i nomi significano quello che fanno e perché le scelte fatte negli anni '90 e 2000 dettano ancora cosa fanno le nuove applicazioni oggi. SHA-0 è stato ritirato in silenzio, SHA-1 è stato rotto da attacchi pratici, SHA-2 è ancora sicuro e SHA-3 è un design alternativo scelto per la robustezza futura. Il nuovo codice dovrebbe utilizzare SHA-256 per l'hashing generico. I sistemi legacy utilizzano ancora SHA-1 e l'interoperabilità con tali sistemi richiede la capacità di calcolare gli hash SHA-1.

Il calcolatore hash ToolAcre SHA incarna questa prospettiva: offre SHA-256 come predefinito, SHA-512 come opzione più ampia, SHA-384 per requisiti specifici e SHA-1 etichettato come legacy. Ciò fornisce agli sviluppatori strumenti accurati ed etichettatura accurata. L'implementazione Web Crypto del browser fornisce questi algoritmi e ToolAcre utilizza tale implementazione direttamente anziché fornire codice personalizzato. La scelta riflette decenni di evoluzione crittografica e lo stato attuale della pratica.