Ataque de texto claro escogido contra la clave de protocolo del cifrado de Doble Criptograma Simétrico Manuel J. Lucena López 27 de enero de 2013 Resumen Se presenta un ataque de texto claro escogido para el sistema de cifrado Doble Criptograma Simétrico, descrito en la solicitud internacional de patente WO 2012/152956 A1. En dicho documento se describe un algoritmo de cifrado en dos fases, que cumple supuestamente el criterio de seguridad perfecta de Shannon. La segunda de sus fases consiste en la aplicación de una clave de protocolo que genera una secuencia de valores comprendidos entre 1 y 9. El ataque que se describe permite obtener el valor de la citada clave de protocolo a partir de un número relativamente pequeño de criptogramas correspondientes a un mismo texto en claro. Advertencia Tanto el ataque que se propone en este documento, como la implementación parcial del método de cifrado empleada para ponerlo en práctica, se basan en interpretaciones realizadas sobre la solicitud de patente en la que se describe el mismo. Por lo tanto, no se ha podido comprobar ni la exactitud de la implementación, ni la efectividad del ataque descrito con datos de referencia, obtenidos mediante una implementación oficial del método de cifrado Doble Criptograma Simétrico. 1. Introducción En la solicitud de patente internacional WO 2012/152956 se describe un algoritmo de cifrado, que supuestamente cumple los criterios de seguridad perfecta de Shannon. Dicho algoritmo se compone los siguientes elementos: 1. Una matriz alfanumérica. 2. Una matriz base de residuos numéricos. 3. Una clave de equivalencias. 4. Una tabla de equivalencias. 5. Un criptograma de residuos reducidos o plantilla. 6. Una clave de protocolo. 7. Un algoritmo de codificación. 8. Un criptograma final de residuos. 9. Un algoritmo de decodificación. 1 Los elementos del 1 al 5 permiten convertir cada letra del texto en claro una secuencia de p dı́gitos (d1 , d2 , ...dp ), con di comprendido entre 1 y 9. El valor de p se denomina profundidad. La tabla que asocia cada letra con cada secuencia es estática, y se calcula a partir de la denominada clave de equivalencias. La tabla de equivalencias puede contener más de una entrada asociada a la misma letra, en cuyo caso se escogerá una de ellas, de manera aleatoria, durante el proceso de cifrado. A la concatenación de todas las secuencias generadas a partir del texto en claro se le denomina plantilla (segunda columna de la figura 2). El siguiente paso consiste en transformar la plantilla, empleando la llamada clave de protocolo (Kp ) compuesta por una serie de números enteros (n1 , n2 , ...) mayores o iguales a 1. El proceso se lleva a cabo tomando el primer valor de la clave, y expandiendo el primer dı́gito de la plantilla en una secuencia de dı́gitos de longitud n1 , el segundo en una secuencia de n2 y ası́ sucesivamente. En la descripción del algoritmo se sugiere emplear los valores de Kp de forma cı́clica, hasta acabar con todos los dı́gitos de la plantilla. El proceso de expansión de cada dı́gito pi de la plantilla se hace generando una secuencia de números (de longitud igual al valor correspondiente de la clave de protocolo) comprendidos entre 1 y 9, de forma que el resto de dividir por 9 la suma de éstos sea igual a pi . Puesto que los restos van de 0 a 8, y el valor de pi va de 1 a 9, el resto 0 es sustituido directamente por un 9. El resultado obtenido es un criptograma (tercera columna de la figura 2) asociado al texto claro del que partı́amos inicialmente. Como puede observarse, el número de dı́gitos del mensaje cifrado resulta muy superior al número de caracteres del texto claro. Es fácil comprobar, dado el carácter aleatorio de varios de los pasos involucrados en el proceso de cifrado, que existen múltiples criptogramas diferentes asociados a un mismo texto claro cifrado con los mismos parámetros. 2. El ataque Nos proponemos, a partir de un número relativamente bajo de criptogramas, todos asociados al mismo texto claro, y obtenidos con los mismos parámetros del algoritmo, recuperar tanto la clave de protocolo Kp empleada como las plantillas correspondientes a todos los criptogramas. El proceso se basa en varios hechos: Aunque se empleen diferentes secuencias para expandir un mismo dı́gito de una misma plantilla, todas ellas poseen el mismo residuo. Las plantillas generadas cuando se cifre varias veces el mismo mensaje serán iguales en posiciones asociadas a las letras con una única imagen en la tabla de equivalencias. Si una letra tiene n imágenes diferentes en la tabla de equivalencias, las plantillas asociadas a distintos cifrados de la misma presentarán como máximo n combinaciones de valores diferentes en las posiciones correspondientes. Dado el carácter aleatorio del proceso de cifrado, cualquier subcadena de un conjunto de criptogramas que no se corresponda exactamente con un dı́gito de la plantilla presentará valores distribuidos de forma aleatoria, por lo que todas las combinaciones de residuos serán igualmente probables. Supongamos que queremos generar n criptogramas diferentes, todos asociados an mismo texto en claro. El proceso de cifrado tomará de la tabla de equivalencias una de las secuencias de dı́gitos asociadas a cada letra, de forma aleatoria. Posteriormente, cada uno de esos dı́gitos se expandirá empleando la clave de protocolo, en una secuencia aleatoria de números, con la condición de que su residuo módulo 9 (cambiando el 0 por el 9) coincida con el dı́gito en cuestión. Puesto que esas secuencias se generan de forma aleatoria (salvo por su último número, que se ajusta para que cumpla la condición impuesta), si agrupamos todas las subcadenas en una posición y longitud determinadas en un conjunto suficientemente grande de 2 Figura 1: El segmento S1 del criptograma presentará tantos residuos diferentes como números distintos haya en la tabla de equivalencias para el sı́mbolo del texto claro, mientras que el segmento S2 presentará todos los residuos siempre que haya suficientes criptogramas. El segmento P 1 de la plantilla, al coresponder siempre a la misma letra del texto claro, contendrá pares de valores muy correlacionados, a diferencia de S2. criptogramas, y anotamos la cantidad de residuos diferentes que aparecen, pueden pasar dos cosas: Que la posición y longitud de la subcadena no coincida con la expansión de un dı́gito de la plantilla (segmento S2 de la figura 2): con una alta probabilidad aparecerán todos los posibles residuos (del 1 al 9). Que la posición y longitud coincida con la expansión de un dı́gito de la plantilla (segmento S1 de la figura 2): Solo aparecerán los dı́gitos que estén presentes en las posiciones correspondientes de la tabla de equivalencias para la letra del texto claro en cuestión. Por lo tanto, podremos detectar las posiciones y longitudes de las subcadenas correspondientes a la expansión de cada sı́mbolo de la plantilla, siempre que en ellas no aparezcan todos los residuos posibles. La primera fase de nuestro ataque consistirá en extraer todas las subcadenas que no presenten todos los residuos en los criptogramas. Después de este primer paso, es posible que queden subcadenas sin identificar, que podrı́an corresponder a letras que tienen todos los dı́gitos en una (o varias) posiciones de sus imágenes. Un ejemplo con profundidad 3 serı́a 111, 122, 133, 144, 155, 166, 177, 188, 199. En este caso, no podrı́amos deducir más que la subcadena correspondiente al primer dı́gito, ya que siempre tendrı́a residuo 1. Sin embargo, si combinamos en cada criptograma el residuo del primer dı́gito con el del segundo, podemos ver que solo hay 9 combinaciones diferentes, muchas menos de las que cabrı́a esperar si los valores tuvieran un aspecto aleatorio (si hubiéramos seleccionado mal las subcadenas). Llevaremos entonces a cabo una segunda fase, que consistirá en calcular los residuos de una subcadena detectada en la fase anterior (en la figura, S1), y combinarlos con los residuos de una subcadena contigua no marcada: si el número de pares de residuos resultante resulta claramente inferior al 3 producto de las cantidades de residuos por separado, significará que ambas subcadenas representan valores correctos de la clave de protocolo, y además están asociadas a la misma letra del texto claro. Por lo tanto, habremos detectado otra subcadena (y otro número de la clave de protocolo). Con este método podemos recuperar casi por completo la clave de protocolo, aún con un número modesto de criptogramas (del orden de la centena), y con un número de imágenes para cada letra relativamente elevado (del orden de la treintena). Si finalmente conseguimos la clave de protocolo y, por tanto, las plantillas, solo quedarı́a estimar la profundidad empleada para poder conocer la totalidad de imágenes diferentes que tiene cada letra del texto claro. Esto permite convertir en la práctica la plantilla en un cifrado monoalfabético, fácilmente susceptible de ser analizado mediante un ataque de frecuencias. Un método simple para deducir la profundidad serı́a analizar la correlación entre residuos de subcadenas (o, si se prefiere, valores de la plantilla) de los criptogramas correspondientes a sı́mbolos contiguos en la plantilla. Puesto que solo aquellas subcadenas que pertenezcan a la misma letra del texto claro (segmento P 1 en la figura 2)tendrán una alta correlación, los pares con baja correlación (segmento P 2 de la figura 2) deben aparecer separados a una distancia igual a la profundidad de la plantilla. Para detectar esa correlación, contaremos cuántos pares de valores de plantilla diferentes presentan las dos subcadenas, en relación con el número de residuos que tienen por separado. Si no hay correlación, es de esperar que el primer valor se aproxime al producto de los dos últimos, y que sea mucho más pequeño en el caso contrario. 3. Resultados experimentales Para verificar la validez del ataque descrito en este documento, se ha diseñado un script en Python, que produce, a partir de una tabla de equivalencias generada aleatoriamente, un número arbitrario de criptogramas asociados a un mismo mensaje, con los siguientes parámetros: clave Protocolo: La clave de protocolo que se empleará cı́clicamente para cifrar los criptogramas. num Criptogramas: Número de criptogramas que se van a generar. mensaje, alfabeto, min plantilla y max plantilla, que indican el mensaje, el alfabeto, y el número mı́nimo y máximo de imágenes que tendrá cada sı́mbolo en la tabla de equivalencias. profundidad: Número de dı́gitos de la plantilla que corresponderán a cada letra del texto claro. Posteriormente, el programa trata de deducir la clave de protocolo, las plantillas y la profundidad del cifrado empleando exclusivamente los criptogramas generados. Para esta fase se necesita un único parámetro: max Clave Protocolo: Valor máximo que puede tener cada elemento de la clave de protocolo. El programa sólo buscará valores para esta clave comprendidos entre 1 y el valor de este parámetro. En las pruebas realizadas se han podido recuperar sin problemas las plantillas, la clave de protocolo y la profundidad en pocos segundos a partir de unos 100 criptogramas, con hasta 30 valores distintos asociados a un mismo sı́mbolo del texto claro. Para una cantidad superior de valores distintos la clave de protocolo puede no recuperarse por completo, necesitándose más criptogramas. En cualquier caso, al tratarse de una clave cı́clica resulta muy fácil detectar y corregir los números incorrectos de la clave de protocolo recuperada. 4 4. Conclusiones El ataque descrito en este documento muestra que, únicamente a partir de un número relativamente modesto de criptogramas cifrados por el método de Doble Criptograma Simétrico, es posible deducir gran parte de la información sobre los parámetros de cifrado, en particular la clave de protocolo, las denominadas plantillas y la profundidad (o longitud en la que el algoritmo de cifrado expande cada letra del texto claro para construir las plantillas). Una implementación del ataque, escrita en un lenguaje de programación interpretado (Phython), tarda pocos segundos en proporcionar una respuesta en un ordenador portátil convencional. Ni la profundidad de la tabla de equivalencias, ni la longitud de la clave de protocolo condicionan significativamente el tiempo de ejecución. Es posible que, preparando la tabla de equivalencias de forma adecuada, se generen valores de plantilla difı́ciles de detectar por los medios aquı́ descritos, pero eso probablemente redundarı́a en mensajes cifrados de longitud aún mayor, y dudamos que protegiera de forma eficaz el sistema frente a versiones más optimizadas de este ataque. Independientemente de si, a partir de la información deducida, puede recuperarse o no el texto claro, parece evidente que la segunda fase del algoritmo, guiada por la clave de protocolo, no cumple la propiedad de seguridad perfecta de Shannon, ya que esta propiedad exige que no pueda deducirse ninguna información a partir de una cantidad arbitraria de texto cifrado. Puesto que, con la información deducida a través de este ataque, puede reducirse un conjunto de criptogramas a un simple cifrado monoalfabético, la primera fase del cifrado tampoco parece cumplir la condición de Shannon. 5