Libera tu mente y alcanza tus metas
Cómo tu partición LUKS podría ser descifrada si utilizas PBKDF2
Cómo tu partición LUKS podría ser descifrada si utilizas PBKDF2

Cómo tu partición LUKS podría ser descifrada si utilizas PBKDF2

A principios de esta semana se publicó en Internet una carta del activista francés Ivan Alococo encarcelado en Francia. El anarquista francés describe cómo su portátil (cifrado) fue confiscado después de ser arrestado, y el material de la partición cifrada se ha introducido desde entonces como prueba contra él. Su contraseña tenía supuestamente más de 20 caracteres e incluía una mezcla de mayúsculas, minúsculas, números y signos de puntuación, por lo que, en ausencia de cualquier tipo de fallo, esto implica que incluso las contraseñas relativamente complejas pueden ser forzadas, y que deberíamos pasar a frases de contraseña aún más seguras.

La policía había descifrado la contraseña de su disco duro LUKS. Una hazaña que antes era imposible ahora se puede lograr en unos pocos meses aprovechando hasta 10.000 servidores con GPU modernas. En la raíz de esta brecha hay una función criptográfica que está mostrando su edad, PBKDF2.

¿Qué es una KDF (Key Derivation Function)?

En la informática moderna, cuando las aplicaciones proporcionan un cifrado de archivos sólido, con frecuencia usan contraseñas para proteger los archivos. Para que las contraseñas sean seguras, deben contener mucha entropía y, en general, aparecer lo más aleatorias posible. Obviamente, los humanos tienden a usar caracteres y frases de su idioma nativo combinados con patrones o reglas memorables que les ayudan a recordar estas contraseñas.

Las Funciones de Derivación de Claves (KDF) son herramientas que nos permiten mejorar la entropía derivada de los tipos de claves y contraseñas que suelen utilizar las aplicaciones. Al realizar una serie de hashing y salting, PBKDF2 "sazona" la entrada del usuario con entropía suficiente para usar en claves privadas para algoritmos como AES y NaCl.

Existen muchos tipos de KDF. Los KDF especializados también se utilizan para generar claves a partir de la salida de Diffie-Helman y para crear números aleatorios criptográficos.

En el caso de este prisionero francés, estaban usando la herramienta de cifrado de disco duro más popular de Linux, LUKS, que usa un PBKDF2 para generar claves AES. En Ubuntu 18.04 esta es la configuración predeterminada. PBKDF2 es un KDF basado en contraseña diseñado para ser resistente a los ataques basados en CPU y data del año 2000. Se mencionó por primera vez como estándar de Internet en RFC-2898 en septiembre de 2000.

Desde el momento en que se diseñó PBKDF2, hemos visto que el surgimiento de potentes GPU se ha convertido en un lugar común. Para defenderse de esta avalancha creciente de poder de hash de GPU hay un algoritmo relativamente nuevo, Argon2.

¿Cómo funciona Argon2?

La potencia criptográfica de argon2 es sublime pero brillante. En lugar de centrarse en el tiempo de CPU requiriendo un gran número de iteraciones de hash, argon2 hace la guerra a la capacidad de memoria de tu GPU. Al realizar el hash de una contraseña con argon2, el desarrollador de la aplicación puede aumentar la cantidad de RAM necesaria para completar el cálculo. De este modo, los núcleos de cálculo altamente paralelos de la GPU se quedan sin recursos, lo que reduce la capacidad total de procesamiento de la GPU.

¿Por qué funciona esto? En las GPU modernas, la cantidad exacta de subprocesos que están activos en paralelo varía según el modelo y depende de la cantidad de RAM de GPU requerida por subproceso. Las operaciones pequeñas en las GPU típicas pueden ver hasta 2.000 subprocesos ejecutándose en paralelo. Mientras tanto, incluso las GPU en la nube más grandes alcanzan un máximo de alrededor de 80 GB de memoria integrada. Si Argon2 está configurado para usar 1 GB para calcular hash de contraseñas, incluso un NVIDIA A100 solo podría probar 80 contraseñas en paralelo en lugar de los órdenes de magnitud de núcleos que estarían activos al atacar contraseñas hash PBKDF2.

Si es un desarrollador que crea aplicaciones seguras y es la primera vez que escucha sobre Argon2, probablemente sea un buen momento para revisar su código. En NodeJS verifique los usos de crypto.pbkdf2 que deberían actualizarse.

Si es un usuario de Linux, lo más probable es que sus particiones LUKS ya utilicen argon2id. Puede verificar ejecutando el comando lsblk para encontrar el nombre de una partición activa. Luego ejecutando:

sudo cryptsetup luksDump /dev/<SU_PARTICIÓN_AQUÍ>

Si está utilizando un algoritmo obsoleto, ¡debería actualizarlo! Matthew Garrett, un desarrollador de Linux, ha escrito una excelente guía para actualizar particiones LUKS antiguas.

¿Está roto PBKDF2?

A primera vista, no. PBKDF2 no está fundamentalmente roto. Es seguro siempre y cuando el usuario siempre tenga una contraseña de 13 caracteres. La elección de PBKDF2 frente a Argon2 depende, por supuesto, del dominio y de la aplicación.

Fuentes: