29 de noviembre de 2010

(Not) Advanced Encryption Standard

Esta mañana me he levantado, aparte de con un frío de perros y la resaca de las filtraciones de Wikileaks, con una de esas noticias de bombo y platillo. El AES de 128 bits ha caído, o esa era la cabecera de un mail que he recibido con el siguiente link.

Arduo y veloz me he puesto a devorar el documento, el cual os resumo por aquí. La IACR o Asociación Internacional de Investigación Criptográfica está formada por un grupo de gente que investiga sobre nuevos algoritmos criptográficos o como reventar los actuales, por ejemplo la semana pasada publicaban una propuesta con nuevos algoritmos para tecnologías móviles y, unas semanas antes, publicaban este paper que mostraba como romper el AES en escasos 3 minutos.

La curiosidad del ataque es que no emplean debilidades de los algoritmos matemáticos utilizados para cifrar, esto es, un algoritmo de sustitución por bloques con 10, 12 o 14 rondas según el tamaño de la clave. En este caso se utiliza el llamado "side channel attack", que son un tipo de ataques distintos basados en las vulnerabilidades de la infraestructura que soporta un criptosistema. Estos ataques se basan en la observación y comparación de como un algoritmo utiliza recursos de un sistema, por ejemplo por los tiempos de consumo de procesador, por como varía la memoria caché o por los cambios en la radiación electromagnética (el ataque TEMPEST del cual hicimos un simulacro hace unos meses ).

El Side Channel Attack en este caso se basa en la observación, se requiere que un proceso "espía" visualice como otro proceso realiza hasta 100 operaciones de cifrado, esto se consigue con apenas 2 KB de datos. No es necesario conocer el texto cifrado ni la clave (obviamente), en ese proceso de cifrado lo que hace el programa espía es ir visualizando el trozo de memoria utilizado por la librería de OpenSSL y el planificador de tareas de Linux, el "Completely Fair Linux Scheduler", a partir de ahí con una red neuronal especialmente enseñada para la ocasión lanza un pequeño proceso en background que calcula la clave (y 1 millón de cosas más) en no más de 3 minutos.

Cierto es que el ejemplo en Laboratorio es con un kernel de Linux y específico para OpenSSL, pero ello no quita que a partir de este estudio se pueda migrar a otros sistemas operativos (sobretodo de tipo Linux / Unix) con relativo esfuerzo. En el paper también se comenta que la implementación de este ataque para 192 o 256 bits es posible pero no se ha demostrado.

¿Qué supone este ataque? AES se había consolidado este último año como el algoritmo de cifrado simétrico de facto, organizaciones como el NIST o la NSA le aseguraban una robustez con 128 bits más allá del año 2015 (2030 para 256 bits ¬¬), muchos procesadores del mercado incorporan un juego de instrucciones dedicado para agilizar estas operaciones y a día de hoy no existe un algoritmo de cifrado que pueda ser considerado igual de robusto (¿3DES?). ¿Qué contramedidas implementar?, bueno en el paper se habla de no utilizar la memorica cache en los procesos de cifrado / descifrado(¿?), aunque delegar los cálculos a la RAM solo implicaría ajustar el timing de CPU, no permitir a un proceso saber el tiempo de CPU que consume otro (lo que puede complicar la planificación de tareas para el CFS u otros). Mi apuesta personal es que un sistema operativo basado en Sandboxies como Qubes podría proporcionar el aislado suficiente entre procesos para evitar este tipo de ataques "de entorno" del criptosistema. Por supuesto un buen antivirus, etc. para evitar el troyano de turno que ataque AES también ayuda.

Y eso es todo por hoy, ¡buena semana a todos!

Salu2