SHA-3 (Secure Hash Algorithm 3) es el último miembro de la familia de estándares Secure Hash Algorithm, publicado por NIST el 5 de agosto de 2015.[1] El código fuente de la implementación de referencia se dedicó al dominio público mediante la exención de CC0.[2] Aunque es parte de la misma serie de estándares, SHA-3 es internamente bastante diferente de la estructura similar a MD5 de SHA-1 y SHA-2 .[3]
SHA-3 es un subconjunto de la familia primitiva criptográfica más amplio Keccak ( / k ɛ tʃ æ k , - ɑː k / ),[4] diseñado por Guido Bertoni, Joan Daemen , Michaël Peeters, y Gilles Van Assche , construyendo sobre RadioGatún . Los autores del Keccak han propuesto usos adicionales para la función, (todavía) no estandarizada por el NIST, incluyendo un cifrado de flujo , un cifrado autenticado sistema, un "árbol" hash esquema de hash más rápido en ciertas arquitecturas, yAEAD cifra Keyak y Ketje.[5]
Keccak se basa en un enfoque novedoso llamado construcción de esponjas. La construcción de esponja se basa en una amplia función aleatoria o permutación aleatoria , y permite ingresar ("absorber" en la terminología de esponja) cualquier cantidad de datos, y generar (exprimir) cualquier cantidad de datos, mientras actúa como una función pseudoaleatoria con respecto a todas las entradas anteriores. Esto conduce a una gran flexibilidad. El propósito de SHA-3 es que puede ser sustituido directamente por SHA-2 en aplicaciones actuales si es necesario, y para mejorar significativamente la solidez del conjunto de herramientas de algoritmo hash general de NIST.
El algoritmo Keccak es el trabajo de Guido Bertoni, Joan Daemen, Michael Peeters y Gilles Van Assche. Está basado en los diseños de hash PANAMA y RadioGatún.[6] En el año 2006 la NIST organizó una nueva edición de la competición para la creación de una nueva función para los estándares de Secure Hash Algorithm (SHA), el SHA-3. Al no existir un ataque significativo demostrado en SHA-2, el nuevo estándar SHA-3 no lo reemplazará. La NIST ha mencionado que debido a exitosos ataques a los estándares MD5, SHA-0 y SHA-1, es necesario una alternativa llamada SHA-3.[7]
Las admisiones de proyectos comenzaron en el año 2008. Keccak fue aceptado como uno de los 51 candidatos. En julio de 2009 14 algoritmos pasaron a la segunda ronda y Keccak avanzó a la ronda final en diciembre de 2010.[8] Durante el periodo de la competición, se les permitió a los participantes corregir problemas descubiertos en sus algoritmos. Keccak hizo algunos cambios como el número de rondas, se amplió de a .[9] En octubre de 2012 fue seleccionado como el ganador de la competición.[10] En el año 2014 la NIST publicó la documentación técnica del algoritmo[11] y fue aprobado en agosto de 2015,[12] para así convertirse en el nuevo estándar SHA-3.[13]
SHA-3 usa una construcción de esponja, donde los datos son absorbidos (metafóricamente) y éstos son procesados para mostrar una salida de longitud deseada. En la fase de absorción, los bloques de datos pasan por una operación XOR y después son transformados usando una función de permutación, denominada f. SHA-3 además permite que contenga bits adicionales de información, esto protege al algoritmo contra ataques de extensión, a los que son susceptibles los estándares SHA-1, SHA-2 y MD5. Además la flexibilidad en sus parámetros lo hace útil para probar ataques criptoanalíticos y usarlo en aplicaciones ligeras.[14]
La transformación de bloque es una permutación que usa las operaciones XOR, AND y NOT, está diseñada para su fácil implementación en software y hardware. La función de permutación de bloques consiste en rondas de cinco pasos, nombrados como: paso , paso , paso , paso y paso ι.
La velocidad de SHA-3 para crear un hash de mensajes largos se determina con y aplicando un XOR a la función . Los autores del algoritmo obtuvieron algunos resultados al aplicar una implementación en software, por ejemplo se registraron 57.4 ciclos por byte en un Intel Pentim 4. El algoritmo ha sido criticado por su lentitud en software, en comparación, SHA2-512 es el doble de rápido que SHA3-512.[15] Destaca que SHA-3 es más rápido que cualquiera de los estándares anteriores si es implementado en hardware.[16]
De acuerdo al algoritmo de Grover las computadoras cuánticas pueden realizar ataques de preimagen en , cuando en un ataque de fuerza bruta común se necesita . Para realizar un ataque de preimagen se necesita un segundo ataque que termina en una colisión.[17] Una computadora cuántica puede realizar un ataque de cumpleaños y romper la resistencia a la colisión del algoritmo en .[18]
En febrero de 2013 en la Conferencia RSA, la NIST anunció que cambiaría el valor de la capacidad y otros parámetros de seguridad del algoritmo SHA-3.[19] Durante la competición, se pidió a los participantes que SHA-3 fuera al menos igual de seguro que SHA-2. El algoritmo Keccak permite un ajuste en los niveles de seguridad basados en la capacidad, llamada y provee de resistencia tanto para ataques de colisión como de preimagen.[17]
En septiembre de 2013, el experto en criptografía, Daniel J. Bernstein, sugirió al NIST aumentar la seguridad del algoritmo, que inicialmente fue propuesto con mucha más capacidad de resistencia.[20] Estos cambios harían que SHA3-224 y SHA3-256 tuvieran la misma resistencia contra ataques que SHA-2.[21] En respuesta a la controversia, el NIST propuso regresar a la versión original de , los cambios fueron confirmados en el borrador del algoritmo propuesto en abril de 2014.[22] Las implementaciones con capacidad reducida fueron publicadas como SHAKE128 y SHAKE256, donde el número indica el nivel de seguridad.[23]
Algunos ejemplos con las diferentes implementaciones:
SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
El cambio de un solo bit causa un efecto avalancha:
SHAKE128("The quick brown fox jumps over the lazy dog", 256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128("The quick brown fox jumps over the lazy dof", 256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c