La familia SHA-2 consta de múltiples funciones hash estrechamente relacionadas. Esencialmente es un solo algoritmo en el que algunos parámetros menores son diferentes entre las variantes.
La especificación inicial cubría cuatro variantes con tamaños de salida de 224, 256, 384 y 512 bits.
La diferencia más significativa entre las variantes es que algunas están diseñadas para registros de 32 bits y otras para registros de 64 bits. En términos de rendimiento, esta es la única diferencia que importa.
En una CPU de 32 bits, SHA-224 y SHA-256 serán mucho más rápidos que las otras variantes porque son las únicas variantes de 32 bits de la familia SHA-2. La ejecución de las variantes de 64 bits en una CPU de 32 bits será lenta debido a la complejidad adicional de realizar operaciones de 64 bits en una CPU de 32 bits.
En una CPU de 64 bits, SHA-224 y SHA-256 serán un poco más lentos que las otras variantes. Esto se debe a que, debido a que solo se procesan 32 bits a la vez, tendrán que realizar más operaciones para pasar a través del mismo número de bytes. No se duplica la velocidad de cambiar a una variante de 64 bits porque las variantes de 64 bits tienen un número mayor de rondas que las variantes de 32 bits.
El estado interno tiene 256 bits de tamaño para las dos variantes de 32 bits y 512 bits de tamaño para las cuatro variantes de 64 bits. Por lo tanto, el número de tamaños posibles para el estado interno es menor que el número de tamaños posibles para la salida final. Pasar de un estado interno grande a una salida más pequeña puede ser bueno o malo dependiendo de su punto de vista.
Si mantiene el tamaño de salida fijo, en general se puede esperar que el aumento del tamaño del estado interno mejore la seguridad. Si mantiene fijo el tamaño del estado interno y disminuye el tamaño de la salida, las colisiones son más probables, pero los ataques de extensión de longitud pueden ser más fáciles. Hacer que el tamaño de salida sea mayor que el estado interno no tendría sentido.
Debido a que las variantes de 64 bits son más rápidas (en las CPU de 64 bits) y probablemente más seguras (debido a un estado interno más grande), se introdujeron dos nuevas variantes con palabras de 64 bits pero con salidas más cortas. Esos son los conocidos como 512/224 y 512/256.
Las razones para querer variantes con resultados mucho más cortos que el estado interno generalmente son que para algunos usos no es práctico usar una salida tan larga o que la salida debe usarse como clave para algún algoritmo que toma una entrada de un tamaño determinado.
También es posible truncar la salida final a la longitud deseada. Por ejemplo, una construcción HMAC especifica que se trunca la salida de hash final a la longitud MAC deseada. Debido a que HMAC alimenta la salida de una invocación del hash como entrada a otra invocación, esto significa que el uso de un hash con resultados más cortos da como resultado un HMAC con menos estado interno. Por esta razón, es probable que sea un poco más seguro usar HMAC-SHA-512 y truncar la salida a 384 bits que usar HMAC-SHA-384.
La salida final de SHA-2 es simplemente el estado interno (después de procesar la entrada extendida de longitud) truncado al número deseado de bits de salida. La razón por la cual SHA-384 y SHA-512 en el mismo aspecto de entrada son tan diferentes es que se especifica un IV diferente para cada una de las variantes.