KyberSlash, una vulnerabilidad que afecta el cifrado cuántico Kyber
A mediados del 2020 compartimos aquí en el blog la noticia de los ganadores del concurso de «criptoalgoritmos resistentes a la selección en una computadora cuántica» y en ella se mencionaba al ganador del concurso, Kyber, el cual fue el mas adecuado para su promoción como estándar.
La razón de hablar de ello, es que hace poco se dio a conocer la noticia de que fue detectada una vulnerabilidad que afecta a Kyber. Esta vulnerabilidad bautizada como KyberSlash permite realizar ataques a través de canales laterales para reconstruir claves secretas, basándose en la medición del tiempo de operaciones durante el descifrado de un texto cifrado proporcionado por el atacante.
Se menciona que el problema afecta tanto a la implementación de referencia del mecanismo de encapsulación de claves CRYSTALS-Kyber KEM, asi como también a muchas bibliotecas de terceros que admiten Kyber, incluida la biblioteca pqcrypto utilizada en Signal (la app de mensajería instantánea).
El problema central de KyberSlash está relacionado con los ataques basados en el tiempo. Estos ataques explotan la forma en que Kyber realiza ciertas operaciones de división en su proceso de descifrado. En particular, los atacantes pueden analizar el tiempo de ejecución de estas operaciones y obtener información secreta que podría comprometer el cifrado. Esta vulnerabilidad surge porque la cantidad de ciclos de CPU necesarios para la división en diferentes entornos varía según las entradas de la división.
La esencia de KyberSlash, radica en el uso de la operación de división «t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;» en el proceso de decodificación de un mensaje. , en el que el dividendo contiene el valor secreto «t» de tipo «doble» y el divisor es el conocido valor público KYBER_Q. El problema es que el tiempo de una operación de división no es constante y, en diferentes entornos, el número de ciclos de CPU realizados para la división depende de los datos de entrada. Así, a partir de los cambios en los tiempos de operación, uno puede hacerse una idea de la naturaleza de los datos utilizados en la división.
Para demostrar la vulnerabilidad, Daniel J. Bernstein, un experto en criptografía, logró preparar una demostración de trabajo que demuestra la posibilidad de llevar a cabo el ataque en la práctica. En dos de los tres experimentos realizados al ejecutar el código en una Raspberry Pi 2, se logró reconstruir completamente la clave secreta Kyber-512 basándose en la medición del tiempo de decodificación de datos.
El método también puede adaptarse para las claves Kyber-768 y Kyber-1024 y para que el ataque sea exitoso, el texto cifrado proporcionado por el atacante debe procesarse utilizando el mismo par de claves y se debe poder medir con precisión el tiempo de ejecución de la operación.
Además de ello, se menciona que se ha identificado otra variante en algunas bibliotecas (KyberSlash2), que también surge del uso de un valor secreto durante la ejecución de una división. Las diferencias con la primera variante se reducen a la llamada en la etapa de cifrado (en las funciones poly_compress y polyvec_compress), en lugar del descifrado. Sin embargo, la segunda variante puede ser útil para el ataque solo en casos de uso de la rutina en operaciones de reencriptación, donde la salida del texto cifrado se considera confidencial.
Actualmente, se están realizando esfuerzos para abordar estas vulnerabilidades, con varios proyectos y bibliotecas completamente parcheados o en proceso de parchearse. Es fundamental que los servicios que implementan Kyber actualicen sus implementaciones a las versiones parcheadas para protegerse contra estas vulnerabilidades, pues estas se consideran importantes porque potencialmente permiten la recuperación de claves secretas, lo que supone un riesgo para la seguridad de los proyectos de cifrado cuántico.
El impacto de KyberSlash depende de la implementación específica de Kyber y sus casos de uso. Por ejemplo, Mullvad VPN explicó que KyberSlash no afecta a su producto porque utiliza pares de claves únicos para cada nueva conexión de túnel, lo que hace imposible lanzar una serie de ataques sincronizados contra el mismo par.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.