# SHA-3

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. El código fuente de la implementación de referencia se dedicó al dominio público mediante la exención de CC0. 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 .
SHA-3 es un subconjunto de la familia primitiva criptográfica más amplio Keccak ( / k ɛ tʃ æ k , - ɑː k / ), 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.
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.

## Historia

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. 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.
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. 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 $12+\ell$ a $12+2\ell$. En octubre de 2012 fue seleccionado como el ganador de la competición. En el año 2014 la NIST publicó la documentación técnica del algoritmo y fue aprobado en agosto de 2015, para así convertirse en el nuevo estándar SHA-3.

## Diseño

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 $c$ 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.

### Permutación de bloque

La transformación de bloque $f$ 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 $12+2\ell$ rondas de cinco pasos, nombrados como: paso $\theta$, paso $\rho$, paso $\pi$, paso $\chi$ y paso ι.

### Velocidad

La velocidad de SHA-3 para crear un hash de mensajes largos se determina con $f=Keccak-f[1600]$ y aplicando un XOR a la función $S$. 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. Destaca que SHA-3 es más rápido que cualquiera de los estándares anteriores si es implementado en hardware.

## Seguridad contra ataques cuánticos

De acuerdo al algoritmo de Grover las computadoras cuánticas pueden realizar ataques de preimagen en ${\sqrt {2d=2d/2}}$, cuando en un ataque de fuerza bruta común se necesita $2d$. Para realizar un ataque de preimagen se necesita un segundo ataque que termina en una colisión. Una computadora cuántica puede realizar un ataque de cumpleaños y romper la resistencia a la colisión del algoritmo en ${\sqrt[{3}]{2d=2d/3}}$.

## Controversias

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. 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 $c$ y provee $c/2-bit$ de resistencia tanto para ataques de colisión como de preimagen.
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. Estos cambios harían que SHA3-224 y SHA3-256 tuvieran la misma resistencia contra ataques que SHA-2. En respuesta a la controversia, el NIST propuso regresar a la versión original de $c=2d$, los cambios fueron confirmados en el borrador del algoritmo propuesto en abril de 2014. Las implementaciones con capacidad reducida fueron publicadas como SHAKE128 y SHAKE256, donde el número indica el nivel de seguridad.

## Ejemplos

Algunos ejemplos con las diferentes implementaciones:
El cambio de un solo bit causa un efecto avalancha: