Ataques de canal lateral en la comparación de llaves criptográficas

Hay un ataque de canal lateral que afecta la comparación de llaves criptográficas; este ataque puede llevar a la captura de estas llaves y por consecuencia a su utilizo por parte de los atacantes. Antes de empezar la explicación, ¿Qué es un ataque de canal lateral? Es un tipo de ataque que no se basa en algoritmos o ingeniería social sino en el propio funcionamiento de los sistemas como la sincronización de la información, el consumo de energía, las fugas electromagnéticas, los sonidos y, el que nos interesa, el ataque basado en la medición del tiempo que se tarda la maquina para ejecutar una determinada operación normalmente relacionada con algoritmos de criptografía. Tomamos este ejemplo:

// Genera un error si inputKey no es correcta

// inputKey y correctKey son ambas cadenas

function checkApiKey(inputKey, correctKey) {

if (inputKey !== correctKey) {

throw new Error("wrong key");

  }

}

El operador !== es vulnerable a una ataque de canal lateral basado en la medición del tiempo; esto porque las dos claves se comparan byte por byte hasta que no se encuentre un byte que no empareje y se termine el procesamiento. Esto significa que si los primeros bytes son exactos la comparación continuará hasta encontrar un byte diferente y esto alargará temporalmente la ejecución del proceso de comparación. Midiendo ese tiempo será posible, byte a byte lograr conocer la clave, es decir tener éxito con el ataque de canal lateral. Un ejemplo: el atacante envía su primera clave y el primer byte no empareja; el proceso termina en seguida en un tiempo, por ejemplo, de 2 segundos. El atacante envía una segunda clave y el primer byte empareja pero el segundo no pues el proceso termina en un tiempo de 2,1 segundos. Comparando los distintos tiempos el atacante podrá, realizando muchas pruebas, conocer el valor de la clave.

Una solución definitiva a este problema es que la CPU de los procesadores tomen SIEMPRE el mismo tiempo para comparar las claves y de esta forma no dar pistas a los atacantes. Esto se ha llamado constant-time y por mucho tiempo los productores de procesadores han hecho caso omiso a esta importantísima temática afirmando que no se trataba de un problema de seguridad o una falla en su CPUs.

En una entrada en la lista de distribución Linux kernel del 25 de Agosto se comenta que Intel y ARM, cada uno a su manera, han dado una media solución al tema:

  • INTEL creando una bandera llamada MSR que se puede activar a nivel de Kernel del sistema y que implementaría el procesamiento de esta operaciones siempre utilizando un tiempo constante

  • ARM utiliza otro tipo de solución basada en un registro llamado DIT (Data Independent Time) que se puede también configurar a nivel de Kernel

Ahora el tema de discusión en distintos foros es si esta configuración tiene que ser la predefinida o dejar que cada usuario decida si activarla o no; esto porque parece que puede afectar un poco las prestaciones de la CPU.

Si hay más novedades, les comentaré

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Ataques de canal lateral en la comparación de llaves criptográficas" Suscribirse a VozToVoice - Todos los comentarios