Argon2
# Argon2

Argón2 es una función de derivación de clave que fue seleccionada como ganadora del concurso de descifrado de contraseñas en julio de 2015. Fue diseñada por Alex Biryukov, Daniel Dinu, y Dmitry Khovratovich de la Universidad de Luxemburgo. La implementación de referencia de Argon2 se publica bajo una licencia Creative Commons CC0 licencia (es decir, de dominio público) o la licencia apache 2.0, y proporciona tres versiones relacionadas:

* Argon2d maximiza la resistencia a los ataques de cracking de la GPU. Accede al arreglo en memoria en un orden dependiente de la contraseña, lo que reduce la posibilidad de situación de compromiso espacio-tiempo (TMTO), pero introduce posibles ataques de canal lateral.
* Argon2i está optimizado para resistir los ataques de canal lateral. Accede al arreglo en memoria en un orden dependiente de la contraseña.
* Argon2id es una versión híbrida. Sigue el enfoque de Argon2i para la primera mitad del paso sobre la memoria y el enfoque de Argon2d para los pasos siguientes. The internet draft recomienda el uso de Argon2id excepto cuando hay razones para preferir uno de los otros dos modos.

Los tres modos permiten la especificación por tres parámetros que controlan:

* Tiempo de ejecución
* Memoria requirida
* Grado de paralelismo

## Criptoanálisis

Aunque no hay ningún criptoanálisis público aplicable a Argon2d, hay ataques publicados sobre la función de Argon2i. El primer ataque es aplicable únicamente a la versión antigua de Argon2i, mientras que el segundo se ha ampliado a la última versión (1.3)

El primer ataque muestra que es posible calcular una función de paso simple de Argon2i usando entre un cuarto y un quinto espacio deseado sin penalizacion de tiempo, y calcular una función de paso múltiple2 de Argon2i usando únicamente N/e < N/2.71 de espacio sin penalización de tiempo. Según los autores de Argon2, este vector de ataque fue solucionado en la versión 1.3.

El segundo ataque muestra que Argon2i puede ser computado por un algoritmo qué tiene complejidad $O(n^{7/4}$ log(n)) para todas las opciones de parámetros σ (costo de espacio), τ (costo de tiempo), y cuenta hilos de tal manera que n=σ∗τ. Los autores de Argon2 autores afirman que este ataque no es eficaz si se utiliza Argon2i con tres o más pasadas. Sin embargo, Joël Alwen y Jeremiah Blocki mejoraron el ataque y demostraron que el ataque fallara, Argon2i 1.3 necesita más de 10 pasadas sobre la memoria.

## Algoritmo

### Función hash de longitud-variable

Argón2 hace uso de una función hash capaz de producir digests de hasta 232 bytes de largo. Esta función hash esta construida internamente construida sobre Blake2.

