Strumenti per sviluppatori · SHA calcolatore hash
SHA-256 vs SHA-512: dimensioni delle parole, round e perché 512 può essere più veloce
· Come funziona
sha-256 crittografia prestazione API del browser
SHA-512 produce un digest più lungo ma spesso viene eseguito più velocemente su hardware 64 bit. Questo post spiega le differenze strutturali tra i due e come si inserisce SHA-384, così puoi scegliere in base ai fatti.
Hash più lungo, corsa più veloce? - l'osservazione controintuitiva che avvia il confronto
SHA-512 produce un digest più lungo ma spesso viene eseguito più velocemente di SHA-256 su hardware 64 bit. L'osservazione controintuitiva deriva dalla progettazione di CPU: un processore ottimizzato per l'aritmetica di 64 bit esegue operazioni di 64 bit più velocemente delle operazioni di 32 bit sugli stessi dati. SHA-256 opera su parole a 32 bit, mentre SHA-512 opera su parole a 64 bit. Su un 64-bit CPU, quest'ultimo si adatta all'hardware in modo più naturale e dedica meno tempo alle conversioni e al riempimento delle dimensioni delle parole.
Ciò non rende SHA-512 intrinsecamente migliore per ogni caso d'uso. Un digest più lungo richiede più spazio di archiviazione e larghezza di banda. La scelta tra loro dovrebbe essere fatta sulla base dei requisiti in termini di dimensioni di output e della piattaforma, non sul vago senso di "più nuovo" o "più potente".
Parole da 32-bit rispetto a 64-bit: la differenza strutturale principale e il motivo per cui si adatta alle CPU moderne
SHA-256 opera su parole da 32bit in tutto l'algoritmo. La pianificazione dei messaggi espande parole da 16 32 bit in parole da 64 32 bit. Ogni round aggiorna otto variabili di lavoro 32bit. Il blocco del messaggio è 512 bits (sedici parole da 32 bit). L'output è 256 bits (otto parole da 32 bit). Tutta l'aritmetica viene eseguita su valori 32-bit, con overflow wrap in 2^32.
SHA-512 opera su parole da 64 bit. La pianificazione dei messaggi espande parole da 16 64 bit in parole 80 64 bit (non 64, come in SHA-256). Ogni round aggiorna otto variabili di lavoro 64bit. Il blocco del messaggio è 1024 bits (sedici parole da 64 bit). L'uscita è 512 bits (otto parole da 64 bit). Tutta l'aritmetica viene eseguita su valori 64-bit, con overflow wrap in 2^64.
64 round rispetto a 80, 512-bit rispetto a 1024-bit blocchi: cosa cambia per blocco e per byte
SHA-256 esegue 64 giri per blocco; SHA-512 esegue 80 giri per blocco. Ciò significa che SHA-512 esegue più mixaggi per blocco. A prima vista, sembra più lento. Ma la dimensione della parola e del blocco maggiore significa che SHA-512 elabora più bit per round. Per un file da 1-megabyte, SHA-256 elabora 1048576 / 512 = 2048 blocchi, ciascuno con 64 round, per un totale di 131072 round. SHA-512 elabora 1048576 / 1024 = 1024 blocchi, ciascuno con 80 round, per un totale di 81920 round. SHA-512 esegue meno round in totale, anche se esegue più round per blocco.
La differenza nell'ora dell'orologio dipende dall'ottimizzazione di CPU per la dimensione delle parole. Un CPU con un 64-bit ALU (unità aritmetico-logica) eseguirà operazioni a 64 bit in modo efficiente. Se lo stesso CPU deve suddividere le operazioni 32-bit SHA-256 in più microoperazioni o eseguirle su un'unità di esecuzione più piccola, il costo per operazione è più elevato. I processori moderni ottimizzano per le operazioni 64-bit, rendendo SHA-512 spesso più veloce nonostante i round aggiuntivi per blocco.
La dimensione del blocco e il conteggio dei round spiegano il lavoro per byte; il throughput effettivo richiede un benchmark della piattaforma
L'aritmetica dei blocchi spiega perché un output più lungo non implica necessariamente più lavoro per byte. SHA-256 esegue sessantaquattro round per ogni blocco da 512 bit, mentre SHA-512 esegue ottanta round per ogni blocco da 1,024 bit. Il secondo progetto esegue più cicli su ciascun blocco ma consuma il doppio dell'input ogni volta che ne elabora uno.
Questo confronto strutturale non prevede un particolare benchmark del browser. Web Crypto può utilizzare istruzioni native, librerie del sistema operativo o altro codice ottimizzato e la lunghezza dell'input modifica la quota spesa per la configurazione. Misurare l'effettivo ambiente di destinazione quando la produttività conta; il repository supporta solo l'affermazione qualitativa secondo cui parole più ampie possono adattarsi all'hardware 64-bit.
La durata dell'output influisce sulle proprietà di rappresentazione e sicurezza senza una stima del lavoro di attacco senza fonti
SHA-384 non è un algoritmo separato; è SHA-512 con due modifiche: le costanti hash iniziali sono diverse e l'output viene troncato in 384 bits (48 bytes) anziché in 512 bits completo. Questo troncamento presenta un vantaggio contro gli attacchi con estensione della lunghezza: un utente malintenzionato non può estendere il digest aggiungendo dati al messaggio originale, poiché lo stato completo di 512 bit è sconosciuto (ne sono stati divulgati solo 384 bits).
SHA-256 è vulnerabile agli attacchi di estensione della lunghezza: se conosci il digest di un messaggio e conosci la lunghezza del messaggio, puoi aggiungere dati al messaggio e calcolare il digest del messaggio esteso senza conoscere il contenuto del messaggio originale. Ciò è importante in contesti di sicurezza specifici, come le implementazioni HMAC che utilizzano una costruzione debole. SHA-384, nonostante sia basato su SHA-512, non è vulnerabile perché lo stato completo non è esposto. Ciò rende SHA-384 utile in contesti in cui SHA-256 è considerato rischioso.
Esempio funzionante: hashing di un input con tutti e tre e confronto delle lunghezze del digest fianco a fianco
La dimensione dell'output è la distinzione più semplice. SHA-256 produce 32 bytes (64 caratteri esadecimali); SHA-384 produce 48 bytes (96 caratteri esadecimali); SHA-512 produce 64 bytes (128 caratteri esadecimali). Per l'archiviazione in URL o JSON, i digest più lunghi occupano più spazio. Per la resistenza alle collisioni, un output più lungo rende le collisioni esponenzialmente più difficili da trovare. Gli output più ampi forniscono uno spazio di risultati più ampio, mentre la conseguenza immediata del prodotto è più semplice da misurare: più byte in memoria, URL e campi di protocollo. Questo articolo non allega una stima dell'attività di attacco perché nessuna è derivata da prove archiviate.
Alcuni sistemi e standard specificano esplicitamente SHA-256; altri usano SHA-512 o consentono una scelta. SSH impronte digitali predefinite su SHA-256; i digest delle immagini del contenitore possono essere SHA-256 o SHA-512. I gestori di pacchetti come npm utilizzano SHA-512 per l'integrità delle risorse secondarie. Spesso la scelta viene fatta per te, ma comprendere le differenze ti consente di scegliere saggiamente quando hai voce in capitolo.
Cosa non copre: dati sulla velocità effettiva, che dipendono da CPU, compilatore e dimensione dell'input; il post rimane qualitativo
Il calcolatore hash ToolAcre SHA offre SHA-256, SHA-384 e SHA-512. Esegui l'hashing dello stesso input con tutti e tre e osserva le lunghezze dell'output. I digest saranno tutti completamente diversi l'uno dall'altro, come previsto: gli algoritmi utilizzano diverse costanti di round, diverse pianificazioni dei messaggi e diverse operazioni di miscelazione. Il conteggio dei byte visualizzato accanto al digest riflette solo la dimensione dell'input, non la dimensione dell'output; tutti e tre gli algoritmi elaborano gli stessi byte di input in modo identico attraverso le rispettive sequenze di round.
Il test sul proprio hardware rivela la differenza di prestazioni. Hashing un file di grandi dimensioni (un test case da più megabyte) con ciascun algoritmo e cronometra i risultati. Sui moderni sistemi 64 bit, SHA-512 spesso verrà completato in meno tempo, anche se il conteggio dei byte potrebbe suggerire il contrario. Sui sistemi 32-bit o processori incorporati, SHA-256 potrebbe essere più veloce perché ALU di CPU è ottimizzato per le operazioni a 32 bit.
In conclusione: scegli in base alla dimensione dell'output e alla piattaforma: il calcolatore di hash ToolAcre SHA offre SHA-256, SHA-384 e SHA-512 in modo da poterli vedere tutti e tre sullo stesso input
La forza crittografica è separata dalle prestazioni. Il repository non contrassegna SHA-256 come danneggiato e lo seleziona come predefinito per uso generale. Questa prova del prodotto non giustifica la definizione di qualsiasi primitivo universalmente sicuro; l’idoneità dipende ancora dal modello di costruzione e di minaccia. Il passaggio da SHA-256 a SHA-512 non è un aggiornamento della sicurezza; è un compromesso tra archiviazione e prestazioni. Se il tuo sistema specifica SHA-256 e hai bisogno di quell'algoritmo esatto, usalo. Se hai una scelta e desideri un riepilogo più lungo o sai che la tua piattaforma è 64-bit, SHA-512 è una scelta valida.
L'implementazione Web Crypto del browser calcola tutti e tre tramite crypto.subtle.digest. Il dispositivo, la versione del browser e il caricamento del sistema in background influiscono tutti sulle prestazioni osservate. Ma il punto chiave rimane: SHA-256 e SHA-512 non sono in competizione per il titolo di "migliore funzione hash". Sono strumenti progettati per diversi requisiti di output e la scelta tra loro viene fatta sulla base di ciò di cui il sistema ha bisogno, non su dichiarazioni di prestazioni generalizzate.