Hashing SHA-1, SHA-2, SHA-3, Keccak... ¿Cuál elegir?

En 2005 y 2006, se publicaron una serie de resultados significativos contra SHA-1 [1][2][3]. Estas rupturas repetidas causaron algo así como una crisis de fe, y los criptógrafos se comenzaron a preguntar si realmente sabrían cómo construir funciones de hash en el futuro. Después de todo, muchas funciones hash de la década de los '90 no la están pasando bien.
A raíz de esto, el NIST anunció [PDF] un concurso para desarrollar SHA-3 con el fin de cubrir el riesgo de la caída de SHA-2. En 2012, Keccak (pronunciado "ket-chak",) ganó [PDF] y se convirtió en estándar SHA-3.

Sin embargo, la misma competencia demostró que los criptógrafos sí saben construir funciones de hash: los resultados obtenidos en 2005/2006 no se pudieron extender a SHA-2, la cual es segura, hasta donde se sabe. Por lo tanto, en este momento, ya no queda claro si SHA-3 es siquiera necesaria. A pesar de esto, hay una tendencia natural a asumir que SHA-3 debería ser mejor que SHA-2, simplemente porque el número de versión es mayor.

La diversidad de primitivas criptográficas es costosa; contribuye al número exponencial de combinaciones que necesitan ser probadas y fortalecidas; se basa en recursos limitados; muchas plataformas normalmente necesitan código separado y optimizado y; contribuye a agrandar el código fuente, que es una gran preocupación en esta época de las aplicaciones móvil. Además, SHA-3 es más lento que SHA-2, que ya era reconocido por ser lento. Entonces, no necesitamos otra función de hash lenta y segura, ya tenemos SHA-2.

Sin embargo, SHA-3 sí introdujo algo útil: las funciones de salida extensibles (XOFs), en forma de los algoritmos SHAKE [PDF]. En un XOF, la entrada es hasheada y entonces se produce una cantidad (efectivamente) ilimitada de salidas a partir de ella. Esto es conveniente, aunque se puede producir el mismo efecto usando HKDF, o hasheando una clave y ejecutando ChaCha20 o AES-CTR.

Por lo tanto, probablemente SHA-3 no debería ser utilizado. No ofrece ninguna ventaja convincente por sobre SHA-2 y tiene muchos costos asociados. El único argumento a favor sería que es bueno tener una función de hash como backup pero SHA-256 y SHA-512 ya son comúnmente soportados y tienen diferentes núcleos y formas de funcionamiento, por lo que ya tenemos dos funciones seguras y conocidas.

En respuesta a las quejas sobre la velocidad, el equipo de Keccak ahora tiene KangarooTwelve y MarsupilamiFourteen, que tienen un diseño basado en vectores y un mejor rendimiento; aunque también se puede usar un diseño basado en vectores para acelerar SHA-2.

Un inconveniente de SHA-2 es que simplemente es un hashing pero no tiene una forma de generar MACs, para eso existe HMAC. SHA-3 no tiene este problema y esta es una ventaja porque significa que las personas no que tendrían que usar HMAC sobre SHA-2 y alcanzaría con un solo protocolo.

Pero, SHA-512/256, BLAKE2, K12, M14 y todos los otros candidatos SHA-3 tienen esta propiedad de integridad MAC y probablemente cualquier función de hash futura también la tenga.

BLAKE2 es otra función nueva de hash, y ofrece mucha mejor velocidad que SHA-2, lo cual significa menor tiempo de CPU "gastado" en criptografía y que la misma se puede desplegar económicamente en lugares donde antes no se podía. Sin embargo, BLAKE2 tiene demasiadas versiones (actualmente ocho).

En general, la longitud/extensión del hash no una preocupación suficientemente apremiante por la que debamos invertir en SHA-3 ahora mismo, y se podría esperar una función que tenga mayor cantidad de ventajas. Si es una preocupación importante para usted en este momento, pruebe con SHA-512/256, miembros de la familia SHA-2.

Otro punto es que SHA-3 fue sólo el primer paso hacia un futuro basado en la permutación: SHA-3 tiene una base elegante (la esponja) que es adecuada para implementar una gama completa de algoritmos simétricos. En el futuro, una única función de permutación optimizada podría ser la base de hashes, MACs y AEADs, ahorrando así tamaño de código y complejidad. Por ejemplo, el protocolo STROBE.

Finalmente, es bueno recordar que ahora mismo SHA-3 es el estándar aunque incluso el equipo de Keccak parece estar empujando K12 en vez de SHA-3.

Así que, hay algunas perspectivas interesantes para reemplazar SHA-2 en el futuro, pero SHA-3 no parecer ser uno de ellas.

Fuente: Imperial Violet (Adam Langley)

Via: blog.segu-info.com.ar
Hashing SHA-1, SHA-2, SHA-3, Keccak... ¿Cuál elegir? Hashing SHA-1, SHA-2, SHA-3, Keccak... ¿Cuál elegir? Reviewed by Lydecker Black on 15:48 Rating: 5