La famiglia SHA-2 è composta da più funzioni hash strettamente correlate. È essenzialmente un singolo algoritmo in cui alcuni parametri minori sono diversi tra le varianti.
Le specifiche iniziali coprivano quattro varianti con dimensioni di uscita di 224, 256, 384 e 512 bit.
La differenza più significativa tra le varianti è che alcuni sono progettati per i registri a 32 bit e alcuni sono progettati per i registri a 64 bit. In termini di prestazioni questa è l'unica differenza che conta.
Su una CPU a 32 bit, SHA-224 e SHA-256 saranno molto più veloci delle altre varianti perché sono le uniche varianti a 32 bit della famiglia SHA-2. L'esecuzione delle varianti a 64 bit su una CPU a 32 bit sarà lenta a causa della maggiore complessità delle operazioni a 64 bit su una CPU a 32 bit.
Su una CPU a 64 bit SHA-224 e SHA-256 saranno un po 'più lenti rispetto alle altre varianti. Questo perché a causa della sola elaborazione di 32 bit alla volta, dovranno eseguire più operazioni per ottenere lo stesso numero di byte. Non si ottiene un raddoppio della velocità passando da una variante a 64 bit perché le varianti a 64 bit hanno un numero maggiore di arrotondamenti rispetto alle varianti a 32 bit.
Lo stato interno ha una dimensione di 256 bit per le due varianti a 32 bit e 512 bit per tutte e quattro le varianti a 64 bit. Quindi il numero di dimensioni possibili per lo stato interno è inferiore al numero di dimensioni possibili per l'output finale. Passare da un grande stato interno a un output più piccolo può essere buono o cattivo a seconda del punto di vista.
Se si mantiene fissa la dimensione dell'output, in generale si può prevedere che l'aumento delle dimensioni dello stato interno migliorerà la sicurezza. Se si mantiene fissa la dimensione dello stato interno e si riduce la dimensione dell'output, le collisioni diventano più probabili, ma gli attacchi di estensione della lunghezza possono diventare più facili. Rendere le dimensioni dell'output più grandi di quelle interne sarebbe inutile.
A causa delle varianti a 64 bit che sono entrambe più veloci (su CPU a 64 bit) e probabilmente più sicure (a causa di uno stato interno più grande), sono state introdotte due nuove varianti usando parole a 64 bit ma uscite più corte. Quelli sono quelli conosciuti come 512/224 e 512/256.
Le ragioni per cui le varianti con output molto più brevi dello stato interno sono solitamente o che per alcuni usi non è pratico utilizzare un output così lungo o che l'output debba essere usato come chiave per qualche algoritmo che prende un input di una certa dimensione.
È anche possibile troncare semplicemente l'output finale alla lunghezza desiderata. Ad esempio, una costruzione HMAC specifica di troncare l'output dell'hash finale alla lunghezza MAC desiderata. A causa di HMAC che alimenta l'output di una chiamata dell'hash come input a un'altra invocazione, significa che l'utilizzo di un hash con risultati di output più brevi in un HMAC con meno stato interno. Per questo motivo è probabile che sia un po 'più sicuro usare HMAC-SHA-512 e troncare l'output a 384 bit rispetto all'utilizzo di HMAC-SHA-384.
L'output finale di SHA-2 è semplicemente lo stato interno (dopo l'elaborazione dell'estensione dell'ingresso esteso) troncato al numero desiderato di bit di uscita. Il motivo per cui SHA-384 e SHA-512 sullo stesso ingresso sono così diversi è che per ciascuna delle varianti è specificata una IV.