LEX (LEX-128, LEX-192, LEX-256) es un cifrado de flujo desarrollado por Alex Biryukov . El cifrado participó en la competencia eSTREAM y alcanzó la etapa 3, pero, sin embargo, no fue seleccionado para la cartera final [1] .
El nombre del cifrador LEX proviene del término inglés . Extracción de fugas . Se toma como base algún cifrado de bloque y la idea es generar partes del estado interno del cifrado de bloque en ciertas rondas a la gamma de salida para el cifrado de flujo (posiblemente después de aplicar alguna función de filtrado). Dicho método se puede aplicar a cualquier cifrado de bloque, pero en cada caso se necesita una cuidadosa consideración sobre qué partes del estado interno recuperar y con qué frecuencia. Depende principalmente de la función de ronda del cifrado de bloque y del algoritmo de generación de clave de ronda que utiliza.
El cifrado LEX original usa AES en modo de retroalimentación de salida (OFB) : en cada ronda, se extraen 4 bytes específicos de la matriz de estado. Las versiones LEX-128, LEX-192 y LEX-256 difieren en la longitud de la clave utilizada en el cifrado : 128, 192 y 256 bits, respectivamente. La diferencia con AES es que el criptoanalista nunca ve el texto cifrado de 128 bits completo , sino solo partes del estado intermedio.
Primero, algún vector de inicialización (IV) se cifra con AES con la clave K para obtener S = AES k (IV). A continuación, S se cifra repetidamente en el modo OFB y, en este momento, se extraen 32 bits de la matriz de estado en cada ronda (ver Fig. 1). Después de 500 cifrados, se elige otra clave K y el trabajo continúa.
Una parte clave del cifrado es decidir qué bytes extraer del estado intermedio y con qué frecuencia. El autor del cifrado propone extraer bytes en cada ronda impar y bytes en cada par (ver Fig. 2). El orden de los bytes no es importante para la seguridad, pero sí lo es para la velocidad de cifrado. El orden de bytes anterior le permite extraerlos del estado actual en solo 4 pasos usando la fórmula:
donde t 0 y t 2 son las filas cero y segunda en la matriz de estado intermedio, respectivamente.
La elección de estas posiciones de byte está motivada por lo siguiente: ambos conjuntos y son invariantes bajo la operación ShiftRows utilizada en AES (la primera fila no se desplaza, la tercera se desplaza dos posiciones). El uso de conjuntos diferentes en rondas pares e impares garantiza que los bytes de entrada y salida en dos rondas adyacentes no estén conectados únicamente por las operaciones SubBytes y MixColumns . Por lo tanto, el atacante se verá obligado a analizar dos rondas consecutivas de cifrado. Dos rondas proporcionan una dispersión completa en las estadísticas del cifrado, lo que limita la capacidad del atacante para usar divide y vencerás .
El último paso es la adición de módulo 2 de la gamma de salida de texto sin formato.
Para los cifrados de flujo, la pregunta más interesante es el período de la secuencia resultante en gamma . Dado que LEX usa AES, la secuencia de salida (gamma) se repetirá cuando la secuencia de textos cifrados generados por AES se repita. Si AES generó una secuencia indistinguible de aleatoria para una clave, entonces la longitud de la secuencia sería .
Si el flujo de salida es una permutación aleatoria de un bloque de 128 bits, se puede reconocer como no aleatorio después de detectar la ausencia de colisiones de 128 bits en un flujo de 264 bloques de salida. En el caso de LEX, dado que solo se utilizan partes del estado interno del AES en cada ronda, la asignación del estado interno a la salida no es uno a uno y, por lo tanto, se producirán tales colisiones.
Para que un cifrado de flujo sea resistente a los ataques de intercambio de memoria de tiempo , se deben cumplir las siguientes condiciones . Esto asegura que la complejidad del ataque sea comparable a la de la fuerza bruta. El vector de inicialización puede estar abierto, pero luego debe ser completamente aleatorio para evitar un ataque de resincronización de compensación [2] . En el caso de los bits LEX , donde Block es el estado del bloque de texto sin formato en el momento del cifrado. El estado interno corresponde al par al principio y durante el cifrado. Por lo tanto, un poco es suficiente para negar la posibilidad de un ataque.
Este tipo de ataque aún no se comprende completamente y puede ser muy poderoso. La posibilidad de su aplicación a LEX debe estudiarse cuidadosamente. Se espera que cambiar la clave después de 500 cifrados evite este tipo de ataques. Dirigiéndose a una clave en particular, el criptoanalista solo puede obtener 500 bloques de la gamma de salida; y después de reemplazar la llave, el sistema de ecuaciones compilado por él quedará obsoleto.
Para un ciclo de trabajo, AES produce 128 bits de texto cifrado para todas las opciones de clave (128, 192, 256 bits), mientras que LEX basado en AES dará 32 * N r (donde N r es el número de rondas para una longitud de clave dada ) bits de texto cifrado. Por lo tanto, se espera que LEX supere a AES en aproximadamente 2,5x, 3x y 3,5x, respectivamente, para claves de 128, 192 y 256 bits. Además, la ventaja del cifrado es que se pueden usar implementaciones listas para usar del cifrado de bloques usado, lo que reduce el tiempo y los costos de desarrollo.