Reto resuelto: Cifrario XOR con dos claves

Imagen de sqrmatrix
Enviado por sqrmatrix en

Foros: 

Por sqrmatrix

¡Resuelto! Enhorabuena a Agustín, LlamameX y el equipo criptoanalítico habitual

Hola a todos. Lo primero de todo, pedir disculpas por la ausencia tan larga. En mi defensa diré que no fue intencionada, sino consecuencia de ciertas circunstancias personales. En este tiempo no he podido dedicarme a ningún reto.

Bueno, y ahora que ya está aclarado todo, deciros que me he cambiado de bando, y ahora, en lugar de ponerme a atacar algún reto, voy a proponer uno. Como nunca he propuesto retos, no sé si éste estará a la altura. Ya veremos. Antes de plantearlo eché un vistazo por encima a los retos propuestos anteriormente, para no repetirlo, y no me pareció ver ninguno similar a éste, aunque no los miré a fondo (eran muchos). Espero que no se repita.

He ideado un cifrario que se puede definir como un XOR con doble clave. El cifrario es bastante simple.

Siendo este cifrario un XOR, necesita un alfabeto cuyo número de letras sea una potencia de 2. Utilizaremos el alfabeto de 32 letras "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;".

Este cifrario dispone de dos claves. Una la llamaremos clave par, y la otra clave impar. Por cada letra que avancemos en el cifrado, elegiremos una de las claves. Si estamos situados en la letra i-ésima, consultaremos la letra (i-1)-ésima del mensaje original en claro. Si esta letra ocupa una posición par en el alfabeto, elegiremos la clave par, y si ocupa una posición impar en el alfabeto, elegiremos la clave impar. Cuando estemos en la primera letra del mensaje, como no tenemos letra (0-1)-ésima, tomaremos en este caso la clave par.

Para el cifrado, crearemos una copia del mensaje sobre la que trabajaremos. Es decir, inicialmente el criptograma será el mensaje claro.

Empezamos en la primera letra. Como estamos en la primera letra, tomamos la clave par. Enfrentamos las letras de la clave con las letras del criptograma, a partir de la primera letra, y hacemos XOR de las letras de la clave con las del criptograma, dejando el resultado en el criptograma.

Avanzamos a la posición 1 del criptograma. Consultamos la letra de la posición 0 del mensaje claro. Si ocupa una posición par en el alfabeto, tomamos la clave par, y si es impar, la clave impar. Colocamos las letras de la clave elegida encima de las correspondientes letras del criptograma, a partir de la posición 1, y repetimos la operación XOR como se hizo antes.

Pasamos a la siguiente posición y repetimos el proceso. Cuando nos acerquemos al final del criptograma, a la hora de colocar las letras de la clave sobre el criptograma, habrá letras que sobrepasen el final del criptograma. Estas letras se descartan.

Para descifrar, el procedimiento es el mismo. Cuando estemos sobre la primera letra, aplicamos la clave par. Al realizar la operación XOR, obtenemos la primera letra del mensaje, con la cual podemos determinar qué clave se eligió para la segunda letra, y así sucesivamente.

Para verlo mejor, se pondrá un ejemplo:

Mensaje: EN_UN_LUGAR_DE_LA_MANCHA
Clave par: SANCHO
Clave impar: QUIJOTE

Empezamos por la primera letra del criptograma. Elegimos la clave par, "SANCHO", y hacemos XOR de las letras de la clave enfrentadas a las letras del criptograma:

SANCHO
EN_UN_LUGAR_DE_LA_MANCHA
-----------------------------------
WNVWKTLUGAR_DE_LA_MANCHA

Pasamos a la segunda letra del criptograma. Ahora debemos consultar la primera letra del mensaje claro para ver qué posición ocupa en el alfabeto y así elegir la clave. La letra es la "E", y en el alfabeto ocupa la posición 4 (empezamos a contar desde 0), que es par, luego elegimos la clave par, "SANCHO", otra vez:

 SANCHO
WNVWKTLUGAR_DE_LA_MANCHA
-----------------------------------
W:VZISEUGAR_DE_LA_MANCHA

Estamos en la tercera letra del criptograma. Consultamos la segunda letra del mensaje claro, que es la "N", y vemos que ocupa la posición 13, que es impar, luego elegimos la clave impar, "QUIJOTE":

  QUIJOTE
W:VZISEUGAR_DE_LA_MANCHA
-----------------------------------
W:HOAZLBCAR_DE_LA_MANCHA

Seguimos aplicando este procedimiento. Al final, resultará que la clave sobrepasará el final del criptograma. Tenemos el caso:

                  QUIJOTE
W:H:EVÑL.X;SCX_SAMZATUMA
-----------------------------------
W:H:EVÑL.X;SCX_SAMLU..DT

Que, como se ve, se descarta la letra que sobra. En el siguiente caso se hace lo mismo:

                   SANCHO
W:H:EVÑL.X;SCX_SAMLU..DT
-----------------------------------
W:H:EVÑL.X;SCX_SAMLG.QBS

Es decir, se descartan las letras de la clave que sobrepasen el final del criptograma:

                    SANCHO
W:H:EVÑL.X;SCX_SAMLG.QBS
-----------------------------------
W:H:EVÑL.X;SCX_SAMLGOQMQ

Queda al final el criptograma:

W:H:EVÑL.X;SCX_SAMLGOAKI

Para descifrar, los pasos son casi idénticos. Empezamos por la primera letra y, como sabemos, se aplica la clave par:

SANCHO
W:H:EVÑL.X;SCX_SAMLGOAKI
-----------------------------------
E:K.DYÑL.X;SCX_SAMLGOAKI

En esta operación hemos obtenido la primera letra del mensaje, que nos permitirá decidir qué clave hay que elegir a continuación. En este caso, como antes, es la letra "E", que ocupa la posición 4 y, por tanto, debemos coger de nuevo la clave par "SANCHO":

 SANCHO
E:K.DYÑL.X;SCX_SAMLGOAKI
-----------------------------------
ENKQB:BL.X;SCX_SAMLGOAKI

Hemos obtenido la segunda letra, que es la "N", y que ocupa la posición 13 y, por tanto, tenemos que elegir la clave impar "QUIJOTE":

  QUIJOTE
ENKQB:BL.X;SCX_SAMLGOAKI
-----------------------------------
EN_EJWÑ;XX;SCX_SAMLGOAKI

Seguimos así. Los últimos pasos quedan:

                     QUIJOTE
EN_UN_LUGAR_DE_LA_MANSBY
-----------------------------------
EN_UN_LUGAR_DE_LA_MANCTQ
                      SANCHO
EN_UN_LUGAR_DE_LA_MANCTQ
-----------------------------------
EN_UN_LUGAR_DE_LA_MANCHQ
                       QUIJOTE
EN_UN_LUGAR_DE_LA_MANCHQ
-----------------------------------
EN_UN_LUGAR_DE_LA_MANCHA

Aquí está el enlace del reto: https://sites.google.com/site/sqrmatrix/criptograma.txt?attredirects=0&d=1. Son 79956 caracteres. No sé si será suficiente. Si alguien necesita más, sólo tiene que pedirlo.

No sé si este reto será demasiado fácil o demasiado difícil. Ya veremos según avancen las cosas.

Un saludo a todos.

Aaaarg!

A rehacer cálculos :(((

El espacio por detrás no lo contemplo ya que es muy factible que haya un signo de puntuación ("," o ".")

Respecto a los falsos positivos, la combinación que había encontrado parece independiente de la clave, en esas posiciones las combinaciones par/impar se anulaban entre si y sólo quedaba el cifrado (me ha extrañado mucho y lo he tenido que verificar varias veces, pero parece correcto). Ahora con el nuevo texto se generarán nuevas ecuaciones y no se si volverá a sonar la flauta.

No es raro que el resultado

No es raro que el resultado sea independiente de la clave, ya que has planteado un sistema de n ecuaciones con n incógnitas, que tiene solución. Para el nuevo texto el resultado me da igual, si no me confundí, pero algo no va bien, no me funciona...

Ojo que no sea

DEL_MUNDO_CIVILIZADO, que incluye EL_MUNDO_CIVILIZADO. De todos modos reviso los cálculos. A bote pronto "E" es par mientras que "U" era impar, cosa que va a afectar a las 2 primeras ecuaciones y a algunas de las simplificaciones

Cáspita!

Pues si, al final me da lo mismo.

0....:....1....:....2....:....3.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
0....:....1....:....
_EL_MUNDO_CIVILIZADO
.IIIIIIIIII            _=17   
..PPPPPPPPPP           E=04
...IIIIIIIIII          L=11
....IIIIIIIIII         _=17
.....PPPPPPPPPP        M=12
......IIIIIIIIII       U=21
.......IIIIIIIIII      N=13
........IIIIIIIIII     D=03
.........IIIIIIIIII    O=15
..........IIIIIIIIII   _=17
...........PPPPPPPPP   C=02
............PPPPPPPP   I=08
.............PPPPPPP   V=22
..............PPPPPP   I=08
...............IIIII   L=11
................PPPP   I=08
.................PPP   Z=26
..................PP   A=00
...................I   D=03

Que genera las ecuaciones

C(i+0)^02 = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C(i+1)^08 = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C(i+2)^22 = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C(i+3)^08 = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C(i+4)^11 = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C(i+5)^08 = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C(i+6)^26 = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C(i+7)^00 = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C(i+8)^03 = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C(i+9)^15 = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0

O con la nueva simbología

C0^02 = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C1^08 = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C2^22 = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C3^08 = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C4^11 = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C5^08 = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C6^26 = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C7^00 = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C8^03 = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C9^15 = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0

xoreando por parejas tenemos que se simplifican muchos terminos. En este punto recordamos que las Ci serán conocidas con lo que las expresiones del tipo C0^02^C1^08 serán constantes. Para simplificar las expresiones llamo Hi a esas constantes.

H0=C1^08^C2^22=KI9^KP9^KI7^KP7^KI6^KP6^KI1^KP1 (1679) 1
H1=C2^22^C3^08=KI8^KP8^KI7^KP7^KI2^KP2         (278)  1
H2=C3^08^C4^11=KI9^KP9^KI8^KP8^KI3^KP3         (389)  1
H3=C4^11^C5^08=KI9^KP9^KI4^KP4^KI0^KP0         (049)  
H4=C5^08^C6^26=KI5^KP5^KI1^KP1^KI0^KP0         (015)
H5=C6^26^C7^00=KI6^KP6^KI2^KP2^KI1^KP1         (126)  1
H6=C7^00^C8^03=KI7^KP7^KI3^KP3^KI2^KP2         (237)  1
H7=C8^03^C9^15=KI8^KP8^KI4^KP4^KI3^KP3^KI0^KP0 (0348)

Escogiendo algunos pares de las nuevas expresiones y haciendo XOR entre ellas obtenemos.

 
H1^H6=KI8^KP8^KI3^KP3
H2=H1^H6^KI9^KP9
H0^H5=KI2^KP2^KI7^KP7^KI9^KP9
H0^H5^H2^H1^H6=KI2^KP2^KI7^KP7
H3^H2^H1^H6=KI4^KP4^KI0^KP0
H7^H3^H2^H1^H6=KI8^KP8^KI3^KP3
H7^H3^H2=0 =>C8^03^C9^15^C4^11^C5^08^C3^08^C4^11=0 => C8^03^C9^15^C5^C3^=0 => C3^C5^C8^C9=03^15=12

Hay 2.485 posiciones candidatas

Si realmente el texto contiene _EL_MUNDO_CIVILIZADO, y si la clave no es mayor que 10 caracteres, existirían 2.485 posiciones candidatas a contener el texto CIVILIZADO, lo que supone una importantísima reducción del espacio de búsqueda, gracias a la genialidad de Llamamex.

Están en este sitio. Yo cuento desde la posición i=1, sino tenéis que restar 1.

En vilo estoy

Esperando a ver en qué queda esto. Pero no comprendo del todo las ecuaciones. ¿Qué se hace con las colas de las claves que se han ido aplicando anteriormente, y que alcanzan nuestra cadena-objetivo?

Si yo pudiera

Si yo pudiera encontrar una vulnerabilidad, ya la habrías encontrado tú. Según mis cuentas, al primer carácer de la cadena-objetivo se le aplica, en primer lugar una clave (par o impar) empezando por la última posición L, siendo L la longitud de la clave. A patir de ahí siguen llegando colas de claves (pares o impares), con la la posición L - 1 para el primer caracter del objetivo. El proceso sigue, de forma que al final el primer carácter del objetivo ha sido xoreado L veces, con las posiciones de 1 a L de sucesivas claves pares o impares precedentes.

El segundo carácter del objetivo habrá sido xoreado L - 1 veces con los caracteres de 1 a L -1 de claves pares o impares, una vez con el primer carácter de la clave impar. Parece un lío, pero la recursividad está clara.

TTTTTTTTTTTTTTTT_EL_MUNDO_CIVILIZADOTTTTTTTTTTTTTT
KKKKKKKKKK------|------------------|
-KKKKKKKKKK-----|------------------| 
--KKKKKKKKKK----|------------------|
---KKKKKKKKKK---|------------------|
----KKKKKKKKKK--|------------------|
-----KKKKKKKKKK-|------------------|
------KKKKKKKKKK|------------------|
-------KKKKKKKKKK------------------|
--------KKKKKKKKKK-----------------|
---------KKKKKKKKKK----------------|
----------KKKKKKKKKK---------------|
-----------KKKKKKKKKK--------------|
------------KKKKKKKKKK-------------|
-------------KKKKKKKKKK------------|
--------------KKKKKKKKKK-----------|
---------------KKKKKKKKKK----------|
----------------KKKKKKKKKK---------|
-----------------IIIIIIIIII--------|
------------------PPPPPPPPPP-------|
-------------------IIIIIIIIII------|
--------------------IIIIIIIIII-----|
---------------------PPPPPPPPPP----|
----------------------IIIIIIIIII---|
-----------------------IIIIIIIIII--|
------------------------IIIIIIIIII-|
-------------------------IIIIIIIIII
--------------------------IIIIIIIIII
---------------------------PPPPPPPPP
----------------------------PPPPPPPP
-----------------------------PPPPPPP
------------------------------PPPPPP
-------------------------------IIIII
--------------------------------PPPP
---------------------------------PPP
----------------------------------PP
-----------------------------------I

Ya entiendo. A los 10 (O - L) últimos caracteres de la cadena-objetivo sólo les afectan las claves cuya secuencia par-impar viene condicionada por los propios caracteres de la cadena. Eso nos daría, en el caso supuesto, diez ecuaciones con diez incógnitas. Ajá, ahora lo pillo. No hay como preguntar para enterarse. Para evitar esa vulnerabilidad, las claves deberían ser largas, más que las longitudes de las posibles cadenas-objetivo

Esasto

Sólo que no tenemos 10 incógnitas, tenemos 20. Las 10 caracteres de cada una de las claves. Nos haría falta mucho mas texto para plantear las 20 ecuaciones que nos harían falta.

Así puestos lo máximo que estoy consiguiendo son o ubicar el texto claro y dejarlo vulnerable a un ataque por un AG o establecer las relaciones entre ambas claves de cara a reducir el ataque a una única clave o, mejor aún, establecer un criterio de validación en base a las tabalas de trigramas o lemarios, puesto que tanto la clave atacada como la derivada de esa relación como el texto plano habrán de cumplirlo.

Lo que he obtenido hasta ahora son las siguientes relaciones.

Si llamamos Ki=KPi^KIi (para simplificar las expresiones, que si no ya se me nubla la vista) tenemos

H0=C0^02^C1^08=K9^K8^K6^K5^K0  (05689)
H1=C1^08^C2^22=K9^K7^K6^K1     (1679)  
H2=C2^22^C3^08=K8^K7^K2        (278)   
H3=C3^08^C4^11=K9^K8^K3        (389)   
H4=C4^11^C5^08=K9^K4^K0        (049)   
H5=C5^08^C6^26=K5^K1^K0        (015)
H6=C6^26^C7^00=K6^K2^K1        (126)
H7=C7^00^C8^03=K7^K3^K2        (237)   
H8=C8^03^C9^15=K8^K4^K3^K0     (0348)  
 
H2^H7=K8^K7^K2^K7^K3^K2=K8^K3  (38)
H3^H2^H7=K9^K8^K3^K8^K3=K9     (9)
 
H1^H3^H2^H7=K7^K6^K1           (167)
H8^H2^H7=K4^K0                 (40)
H4^H8^H2^H7=K9                 (9)
 
H0^H5=K9^K8^K6^K1              (1689)
H0^H5^H1^H3^H2^H7=K9^K8^K7     (987)
H0^H5^H1^H3^H7=K9^K2           (29)
H2^H0^H5^H1=K2                 (2)
 
H6^H2^H0^H5^H1=K6^K1           (61)
H6^H2^H0^H5=K9^K7              (97)
H6^H0^H5^H3^H7=K7              (7)
 
H0^H1^H6^H0^H3^H7=K8           (8)
 
H2^H1^H6^H3^H7=K3              (3)

Es decir tenemos expresiones constantes para K2, K3, K7, K8 y K9 y por tanto relaciones entre estos componentes de ambas claves. Estas relaciones sólo se cumplirán en la ubicación del texto "_El_MUNDO_CIVILIZADO" siempre que las claves tengan como máximo 10 caracteres.

Las ecuaciones (reeditado)

Según mis cuentas, las ecuaciones serían:

C01^I10^P09^I08^I07^P06^I05^I04^I03^I02^I01 = "C"
C02^P10^I09^I08^P07^I06^I05^I04^I03^I02^P01 = "I"
C03^I10^I09^P08^I07^I06^I05^I04^I03^P02^P01 = "V"
C04^P10^I09^I08^I07^I06^I05^P04^P03^P02^P01 = "I"
C05^i10^I09^I08^I07^I06^P05^P04^P03^P02^I01 = "L"
C06^I10^I09^I08^I07^I06^P05^P04^P03^P02^I01 = "I"
C07^I10^I09^I08^I07^P06^P05^P04^P03^I02^P01 = "Z"
C08^I10^I09^I08^P07^P06^P05^P04^I03^IP2^P01 = "A"
C09^I10^I09^P08^P07^P06^P05^I04^P03^IP2^P01 = "D"
C10^I10^P09^P08^P07^P06^I05^P04^P03^IP2^I01 = "O"

Que se pueden simplificar -supongo- xoreando entre ellas.

Reedición:
Pido perdón, no había leído el comentario de LlamameX recordándome que tenemos 20 incógnitas.

Creo que tienes algún error

Aparte de nomenclatura (yo empiezo a contar por 0) estas líneas deberían ser

C04^I10^P09^I08^I07^I06^I05^i04^P03^P02^P01 = "I"
C05^P10^I09^I08^I07^I06^I05^P04^P03^P02^P01 = "L"
C08^I10^I09^I08^P07^P06^P05^P04^I03^P02^P01 = "A"
C09^I10^I09^P08^P07^P06^P05^I04^P03^P02^P01 = "D"
C10^I10^P09^P08^P07^P06^I05^P04^P03^P02^I01 = "O"

En lo de la simplificación entre ellas es en lo que ando y de donde obtengo mis relaciones.

Bueno, si es que he entendido

Bueno, si es que he entendido bien ya sabemos si se aplica par o impar por la cadena-objetivo. Como ves Llamamex genera las ecuaciones con la última parte del cifrado aplicando KI (impar) o KP (par). Los Ki obtenidos serán los fragmentos de la clave asociados a esa parte del texto.

Ahora hay que escanear el cifrado de todas esas posiciones y calcular las claves con las que trataremos de descifrar el resto de la cadena-objetivo. Si lo conseguimos habremos vislumbrado un pedacito de las claves y sabremos donde está la posición de ese texto conocido. Pero, por lo menos yo, despacito, que viene curva.

Y si no lo conseguimos es que o la cadena no empieza por "_" o las claves son mayores que 10...

Mi granito de arena.

Bueno, pues al final me he animao a escribir un comentario en este reto porque he pasado algunas horas tratando de comprender y analizando el algoritmo de cifrado para lograr algún método que arroje un camino válido para encontrar el texto claro. Soy nuevo aquí en kriptopolis y espero sepáis entender que aun me falta mucho para asimilar la terminología y los tecnicismos que usualmente he visto escrito por otros usuarios. Por otra parte, anotaré las correcciones que se puedan hacer a mi opinión ya que será difícil que no cometa algún error en el uso del lenguaje técnico, que es necesario usar para expresarse con exactitud.

Mi primera impresión al leer el reto fue que necesariamente hay que aprovecharse de la circunstancia que nos ofrece el texto cifrado en sus primeros caracteres y que aprovecho para citar;

"G;ULSC;RW:_DF:JN;ÑEV;UMRW:_DF:JNKÑ;CF"

Lo cierto es que no podía evadirme de la simplicidad inherente en la construcción del algoritmo de cifrado, ¡la primera letra sólo ha experimentado un cambio del operador XOR!, y eso, como digo es una relación importante con el primer carácter de la clave par. Aunque es verdad que el segundo carácter del texto cifrado no sabemos, a priori, si ha sufrido un cambio motivado por la clave impar, lo que si podemos tener presente es que en una decisión coherente de elección de clave par, ya si obtenemos la información necesaria para usar la clave que corresponda.

Imaginemos que por hipótesis, la clave par empieza por la letra E y que por tanto; E (XOR) G nos da C, y al ocupar la posición 2 del alfabeto nos indica que el siguiente carácter del texto cifrado, el ';' es resultado del doble XOR de la segunda y primera letra de la clave par.

En definitiva, en los primeros días de mi análisis sobre el texto cifrado, sólo me esforzaba por encontrar las claves par e impar a base de construcción coherente y paulatina del texto en claro. Abandoné esa primera linea, ya que no creía que aportara suficiente información y fuera útil al publicarla en mi comentario.

Tengo que reconocer, que aunque carezco de la pericia suficiente para construir programas de cierta complejidad en un lenguaje de programación, si que he tenido experiencias con entornos de programación como c, java y Modula-2 y también he estudiao LEA (Lenguaje de Especificación de Algoritmos). Es precisamente esta circunstancia, de mi formación en informática, la que me ha animado a comentar en el reto, ya que considero que si explico con claridad mi linea básica para obtener el texto claro, quizás algún otro usuario si pueda implementar algún programa concreto.

Pasaré finalmente a exponer mi estrategia, la que dicho sea de paso, he elaborado a base del denominado uso del 'lapiz y papel', en otras palabras, he tratado de profundizar en la siguiente cuestión;

.- Si soy el receptor del texto cifrado, y por tanto poseo las 2 claves. ¿Podría obtener sólo una parte intermedia del texto en claro?

Imaginemos que sólo nos interesan los últimos 10.000 caracteres del texto en claro, si he comprendido correctamente el funcionamiento del algoritmo de cifrado, sólo vamos a obtener esa información que nos interesa si previamente hemos ido aplicando secuencialmente las claves desde el inicio. Necesitamos ir obteniendo texto en claro para avanzar en el descifrado y usar la clave correcta.

Sin embargo, yo pienso que si podemos tratar de idear una forma para obtener cierta cadena de texto. Voy a explicarlo utilizando el mismo ejemplo con el que el autor ha ilustrado el reto:

Clave par: SANCHO y Clave impar: QUIJOTE
Criptograma: W:H:EVÑL.X;SCX_SAMLGOAKI

Como digo, no podemos empezar al revés y tratar de obtener el texto en claro utilizando las claves de derecha a izquierda, ya que no podemos saber cuál tenemos que usar.

¿Pero que ocurre, si de lo que se trata es de buscar una cadena de texto concreta?, por ejemplo la siguiente: "_DE_LA_", en este caso si sabemos el orden de claves, ya que lo imponemos para encontrar la cadena de texto objetivo. Con independencia de donde se encuentra la cadena de texto objetivo, aplicando la secuencia inversa a cada carácter del texto cifrado, al final localizamos la cadena de texto si esta existe. En este ejemplo, la secuencia de claves es; (_)impar (D)impar (E)par (_)impar (L)impar (A)par (_)impar

Por lo tanto al criptograma; W:H:EVÑL.X;SCX_SAMLGOAKI, le aplicamos la secuencia anterior de claves, poniendo como hipótesis que la ristra "MLGOAKI" corresponde en claro a "_DE_LA_", sino obtenemos el texto objetivo, desechamos la 'I' y tomamos el siguiente carácter de la izquierda, en este caso pasaríamos a la hipótesis de que la ristra "AMLGOAK" corresponde en claro a "_DE_LA_". Es evidente que efectuando 5 veces esta secuencia de claves, al final la ristra "CX_SAML" si corresponde con el texto en claro objetivo.

Resumiendo, en el texto cifrado que se ofrece en el reto, tratemos de encontrar cadenas de texto objetivo y probables en trozos de ristras de caracteres, pero descifrando de derecha a izquierda. En fin, no se si ayudará este comentario, si será útil o no, es más no conozco en profundidad las características o propiedades de la función XOR. Es posible que al imponer la búsqueda de claves que se ajusten a obtener una cadena de texto objetivo, siempre tengamos éxito, en cuyo caso, habría que ir probando cada éxito de claves con el inició del texto cifrado y comprobar que son coherentes.

By ERR MMXII
www.plisplasplus.info
www.plisplasplus.net
¡No hay razón de ser sin estar!

Bienvenido al reto

Hola,

Si nos estás siguiendo verás que estamos en un aproximación parecida a la que planteas. Tenemos un texto probable "_EL_MUNDO_CIVILIZADO" pero ignoramos la longitud de las claves, que asumimos como 10 (si son más cortas las imaginamos completadas por detrás con "A"s, que no afectarán. Si son más largas... pues malo). También podríamos haber cogido 8 o 9, tendríamos más datos pero con 10 ya me parece que nos quedamos cortos.

Con ese texto en claro conocido, como dices, podemos plantear la secuencia PAR/IMPAR que se aplica, cosa que nos genera las ecuaciones XOR que verás que estamos analizando. Una longitud de 10 en la clave nos genera 20 incógnitas, con lo que precisaríamos 20 ecuaciones que no tenemos. Aún así hemos establecido algunas dependencias y relaciones que esperamos poder usar como criterio de filtro a la hora de probar hipótesis.

Lo de probar de derecha a izquierda no veo que aporte nada diferente a hacerlo en el orden correcto. Necesitaremos en cualquier caso de un cierto "colchón" de texto de longitud igual a la de la clave para garantizar que todas la combinaciones par/impar usadas son conocidas. Podemos especular con alguna (en ello estoy ahora) de cara a ganar más datos, pero eso implica más incógnitas. En el caso que planteas como ejemplo para el último carácter del texto probable "_" si tienes todas las combinaciones par/impar, pero para el siguiente "A" ya te faltará una y para "L" dos.

Pues lo dicho bienvenido al reto y encantado de tener más puntos de vista que generen frentes de ataque.

Especulando con los anteriores

Viendo que con lo que tenemos no puedo prefijar más valores (relaciones entre las claves par e impar) estoy probando con los dos anteriores, es decir con el texto "O_CIVILIZADO". Dado que no se si el valor para esos dos primeros valores son par o impar estoy estudiando las 4 combinaciones posibles. Por ejemplo, si ambas fueran pares añadiríamos las siguientes ecuaciones:

C(-2)^15 = KP9^KP8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KP9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0

y si la primera fuera impar y la segunda par tendríamos

C(-2)^15 = KI9^KP8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KP9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0

En el primer caso puedo obtener ya relaciones para las 10 parejas Ki

H6^H2^H0^H1^H(-2)^H(-1)=K0 (0)
H6^H0^H(-1)^H8^H3=K1 (1)
H2^H0^H5^H1=K2 (2)
H2^H1^H6^H3^H7=K3 (3)
H6^H0^H1^H(-2)^H(-1)^H8^H7=K4 (4)
H(-2)^H8^H5^H6^H3^H2=K5 (5)
H2^H(-1)^H8^H5^H1^H3=K6 (6)
H6^H0^H5^H3^H7=K7 (7)
H0^H1^H6^H0^H3^H7=K8 (8)
H3^H2^H7=K9 (9)

Y creo que podré obtenerlas para los 4 casos. Aunque obligará a hacer 4 veces más comprobaciones al menos nos permite seguir avanzando.

Todas las dependencias entre claves

Como ya indiqué, necesitábamos más ecuaciones para establecer la relación completa entre ambas claves, con lo que he tenido que añadir 2 más. Dado que para estas no sabemos la paridad de los dos caracteres anteriores al primer "_", hemos de contemplar los 4 casos posibles, es decir par-par, par-impar, impar-par e impar-impar. Así pues he obtenido las ecuaciones para todos ellos y establecido las siguientes dependencias.

Recordemos que Ki representa el XOR KPi^KIi y que las Hi serán conocidas para una posición determinada del cifrado puesto que sólo dependen de la Ci

Caso C(-1) Par, C(-2) Par
 
0....:....1....:....2....:....3.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
0....:....1....:....
??_EL_MUNDO_CIVILIZADO
.PPPPPPPPPP              ?=P
..PPPPPPPPPP             ?=P
...IIIIIIIIII            _=27   
....PPPPPPPPPP           E=04
.....IIIIIIIIII          L=11
......IIIIIIIIII         _=27
.......PPPPPPPPPP        M=12
........IIIIIIIIII       U=21
.........IIIIIIIIII      N=13
..........IIIIIIIIII     D=03
...........IIIIIIIIII    O=15
............IIIIIIIIII   _=27
 
C(-2)^15 = KP9^KP8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KP9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0
C0^02    = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C1^08    = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C2^22    = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C3^08    = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C4^11    = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C5^08    = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C6^26    = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C7^00    = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C8^03    = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C9^15    = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0
 
H(-2)=C(-2)^15^C(-1)^27=K8^K7^K6^K4^K3  (34678) > (46)
H(-1)=C(-1)^27^C0^02   =K9^K8^K7^K5^K4  (45789) > (45)
H0   =C0^02^C1^08      =K9^K8^K6^K5^K0  (05689) > (056)
H1   =C1^08^C2^22      =K9^K7^K6^K1     (1679)  > (16)
H2   =C2^22^C3^08      =K8^K7^K2        (278)   > --
H3   =C3^08^C4^11      =K9^K8^K3        (389)   > --
H4   =C4^11^C5^08      =K9^K4^K0        (049)   > (04)
H5   =C5^08^C6^26      =K5^K1^K0        (015)   > (015)
H6   =C6^26^C7^00      =K6^K2^K1        (126)   > (16)
H7   =C7^00^C8^03      =K7^K3^K2        (237)   > --  
H8   =C8^03^C9^15      =K8^K4^K3^K0     (0348)  > (04)
 
H(-2)^H(-1)^H7^H0^H2=K0                 (0)
H0^H1^H(-1)^H4=K1                       (1)
H0^H5^H1^H2=K2                          (2)
H1^H6^H3^H2=K3                          (3)
H4^H(-2)^H(-1)^H0^H3=K4                 (4)
H5^H7^H1^H2^H4^H(-2)=K5                 (5)
H(-1)^H6^H5^H2^H4=K6                    (6)
H6^H0^H5^H7^H3=K7                       (7)
H1^H6^H7^H3=K8                          (8)
H2^H7^H3=K9                             (9)
 
-----------------------------
 
Caso C(-1) Par, C(-2) Impar
 
0....:....1....:....2....:....3.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
0....:....1....:....
??_EL_MUNDO_CIVILIZADO
.IIIIIIIIII              ?=I
..PPPPPPPPPP             ?=P
...IIIIIIIIII            _=27   
....PPPPPPPPPP           E=04
.....IIIIIIIIII          L=11
......IIIIIIIIII         _=27
.......PPPPPPPPPP        M=12
........IIIIIIIIII       U=21
.........IIIIIIIIII      N=13
..........IIIIIIIIII     D=03
...........IIIIIIIIII    O=15
............IIIIIIIIII   _=27
 
C(-2)^15 = KI9^KP8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KP9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0
C0^02    = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C1^08    = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C2^22    = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C3^08    = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C4^11    = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C5^08    = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C6^26    = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C7^00    = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C8^03    = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C9^15    = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0
 
H(-2)=C(-2)^15^C(-1)^27=K9^K8^K7^K6^K4^K3  (346789) > (46)
H(-1)=C(-1)^27^C0^02   =K9^K8^K7^K5^K4     (45789)  > (45)
H0   =C0^02^C1^08      =K9^K8^K6^K5^K0     (05689)  > (056)
H1   =C1^08^C2^22      =K9^K7^K6^K1        (1679)   > (16)
H2   =C2^22^C3^08      =K8^K7^K2           (278)    > --
H3   =C3^08^C4^11      =K9^K8^K3           (389)    > --
H4   =C4^11^C5^08      =K9^K4^K0           (049)    > (04)
H5   =C5^08^C6^26      =K5^K1^K0           (015)    > (015)
H6   =C6^26^C7^00      =K6^K2^K1           (126)    > (16)
H7   =C7^00^C8^03      =K7^K3^K2           (237)    > --  
H8   =C8^03^C9^15      =K8^K4^K3^K0        (0348)   > (04)
 
H(-2)^H(-1)^H3^H0=K0                    (0)
H(-1)^H0^H1^H4=K1                       (1)
H0^H5^H1^H2=K2                          (2)
H1^H6^H3^H2=K3                          (3)
H4^H(-2)^H(-1)^H0^H2^H7=K4              (4)
H5^H3^H1^H4^H(-2)=K5                    (5)
H(-1)^H6^H2^H5^H4=K6                    (6)
H6^H0^H5^H7^H3=K7                       (7)
H1^H6^H7^H3=K8                          (8)
H2^H7^H3=K9                             (9)
 
-----------------------------
 
Caso C(-1) Impar, C(-2) Par
 
0....:....1....:....2....:....3.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
0....:....1....:....
??_EL_MUNDO_CIVILIZADO
.PPPPPPPPPP              ?=I
..IIIIIIIIII             ?=P
...IIIIIIIIII            _=27   
....PPPPPPPPPP           E=04
.....IIIIIIIIII          L=11
......IIIIIIIIII         _=27
.......PPPPPPPPPP        M=12
........IIIIIIIIII       U=21
.........IIIIIIIIII      N=13
..........IIIIIIIIII     D=03
...........IIIIIIIIII    O=15
............IIIIIIIIII   _=27
 
C(-2)^15 = KP9^KI8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KI9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0
C0^02    = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C1^08    = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C2^22    = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C3^08    = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C4^11    = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C5^08    = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C6^26    = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C7^00    = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C8^03    = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C9^15    = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0
 
H(-2)=C(-2)^15^C(-1)^27=K9^K7^K6^K4^K3     (34679)  > (46)
H(-1)=C(-1)^27^C0^02   =K8^K7^K5^K4        (4578)   > (45)
H0   =C0^02^C1^08      =K9^K8^K6^K5^K0     (05689)  > (056)
H1   =C1^08^C2^22      =K9^K7^K6^K1        (1679)   > (16)
H2   =C2^22^C3^08      =K8^K7^K2           (278)    > --
H3   =C3^08^C4^11      =K9^K8^K3           (389)    > --
H4   =C4^11^C5^08      =K9^K4^K0           (049)    > (04)
H5   =C5^08^C6^26      =K5^K1^K0           (015)    > (015)
H6   =C6^26^C7^00      =K6^K2^K1           (126)    > (16)
H7   =C7^00^C8^03      =K7^K3^K2           (237)    > --  
H8   =C8^03^C9^15      =K8^K4^K3^K0        (0348)   > (04)
 
 
H0^H1^H6^H2^H(-2)^H(-1)^H3=K0           (0)
H0^H1^H2^H(-1)^H3^H4^H7=K1              (1)
H0^H5^H1^H2=K2                          (2)
H1^H6^H3^H2=K3                          (3)
H4^H7^H0^H1^H6^H(-2)^H(-1)=K4           (4)
H4^H7^H(-2)^H6^H5=K5                    (5)
H(-1)^H3^H4^H7^H6^H5=K6                 (6)
H6^H0^H5^H7^H3=K7                       (7)
H1^H6^H7^H3=K8                          (8)
H2^H7^H3=K9                             (9)
 
-----------------------------
 
Caso C(-1) Impar, C(-2) Impar
 
0....:....1....:....2....:....3.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
0....:....1....:....
??_EL_MUNDO_CIVILIZADO
.IIIIIIIIII              ?=I
..IIIIIIIIII             ?=I
...IIIIIIIIII            _=27   
....PPPPPPPPPP           E=04
.....IIIIIIIIII          L=11
......IIIIIIIIII         _=27
.......PPPPPPPPPP        M=12
........IIIIIIIIII       U=21
.........IIIIIIIIII      N=13
..........IIIIIIIIII     D=03
...........IIIIIIIIII    O=15
............IIIIIIIIII   _=27
 
C(-2)^15 = KI9^KI8^KI7^KP6^KI5^KI4^KP3^KI2^KI1^KI0
C(-1)^27 = KI9^KI8^KP7^KI6^KI5^KP4^KI3^KI2^KI1^KI0
C0^02    = KI9^KP8^KI7^KI6^KP5^KI4^KI3^KI2^KI1^KI0
C1^08    = KP9^KI8^KI7^KP6^KI5^KI4^KI3^KI2^KI1^KP0
C2^22    = KI9^KI8^KP7^KI6^KI5^KI4^KI3^KI2^KP1^KP0
C3^08    = KI9^KP8^KI7^KI6^KI5^KI4^KI3^KP2^KP1^KP0
C4^11    = KP9^KI8^KI7^KI6^KI5^KI4^KP3^KP2^KP1^KP0
C5^08    = KI9^KI8^KI7^KI6^KI5^KP4^KP3^KP2^KP1^KI0
C6^26    = KI9^KI8^KI7^KI6^KP5^KP4^KP3^KP2^KI1^KP0
C7^00    = KI9^KI8^KI7^KP6^KP5^KP4^KP3^KI2^KP1^KP0
C8^03    = KI9^KI8^KP7^KP6^KP5^KP4^KI3^KP2^KP1^KP0
C9^15    = KI9^KP8^KP7^KP6^KP5^KI4^KP3^KP2^KP1^KI0
 
H(-2)=C(-2)^15^C(-1)^27=K7^K6^K4^K3        (3467)   > (46)
H(-1)=C(-1)^27^C0^02   =K8^K7^K5^K4        (4578)   > (45)
H0   =C0^02^C1^08      =K9^K8^K6^K5^K0     (05689)  > (056)
H1   =C1^08^C2^22      =K9^K7^K6^K1        (1679)   > (16)
H2   =C2^22^C3^08      =K8^K7^K2           (278)    > --
H3   =C3^08^C4^11      =K9^K8^K3           (389)    > --
H4   =C4^11^C5^08      =K9^K4^K0           (049)    > (04)
H5   =C5^08^C6^26      =K5^K1^K0           (015)    > (015)
H6   =C6^26^C7^00      =K6^K2^K1           (126)    > (16)
H7   =C7^00^C8^03      =K7^K3^K2           (237)    > --  
H8   =C8^03^C9^15      =K8^K4^K3^K0        (0348)   > (04)
 
H0^H1^H6^H(-2)^H7^H(-1)=K0              (0)
H0^H1^H2^H7^H(-1)^H4^H3=K1              (1)
H0^H5^H1^H2=K2                          (2)
H1^H6^H3^H2=K3                          (3)
H4^H2^H3^H0^H1^H6^H(-2)^H(-1)=K4        (4)
H5^H4^H2^H3^H6^H(-2)=K5                 (5)
H7^H(-1)^H5^H4^H3^H6=K6                 (6)
H6^H0^H5^H7^H3=K7                       (7)
H1^H6^H7^H3=K8                          (8)
H2^H7^H3=K9                             (9)

Admin

Admin ¿tú has visto lo que está pasando aquí?
No sé a qué dedica LlamameX el tiempo libreeeeeee; pero como lo vean quienes yo sé, lo fichan fijo. Qué bárbaro.

Digo esto para que de alguna manera se recopilen estos ataques, y se conserven bien accesibles para la posteridad,

La facilidad que tienen

La facilidad que tienen LlamameX y también Sqrmatrix para formalizar elegantes ataques a todo tipo de cifrados hace tiempo que me tiene asombrado. No es normal. Quizá esten, realmente, en el "otro lado", en grandes despachos forrados de caoba con terminales eclipsables en la fina maquetería. En la planta 80 de algún rascacielos de Madrid tomado por el CESID, riéndose de los pobres mortales que se agitan docenas de metros más abajo...

Y si no lo están, estarán...al tiempo.

¡El CESID!

No seas antiguo, ahora se llama CNI. Pero que conste que yo no he sugerido que nuestros brillantes analistas trabajen para los Oscuros. Estoy convencido, además, de que los que están en nómina no pueden jugar a estos juegos en la Red.

Por cierto, nunca hemos vuelto a saber nada de mellon, je, je.

Psé

Lo del sueldo puede que sí, pero creo que en la calidad del trabajo te llevarías una decepción: Burocracia y trabajo de hormigas a partes iguales. Me apuesto una birra a que se parece a los antiguos Centros de Cálculo, con los santones en bata blanca defendiendo sus privilegios contra los nuevos, con uñas y dientes. Y no estoy pensando en el Lado Oscuro propio, sino en general, en el milieu

Impresionado

Vaya, cambiasteis de pagina y todo... hace mucho tiempo que no entraba por aqui (creo que ni siquiera use un usuario), pero al ver este reto y lo que estais haciendo... madre! Sois unos genios! Realmente este cifrado es muy bueno y a pesar de tener esa "posible" debilidad en la primera letra sigue siendo muy duro, estoy realmente impresionado, seguid asi!

Aclaración, porfa

Mientras espero ver entrar a LlamameX por la puerta de la clínica do moro, he pensado en atacar los cuatro primeros caracteres, con la absurda esperanza de aparezcan menos candidatos que con el trigrama inicial.

Pero resulta que en el anterior ataque apliqué una restricción que me parecía aceptada por el autor. Me refiero a la hipótesis que desarrollé en http://www.kriptopolis.com/comment/2221#comment-2221 según la cual, ni el primer carácter del texto ni de la clave par, pertenecían al conjunto de caracteres [K Ñ W X _ . , : ; ], lo que conllevaba que sólo quedaban disponibles para esa primera posición los 18 caracteres del conjunto [A B C D E F G H J L N O P R S T U V] Me pareció que el autor aprobaba este planteamiento en http://www.kriptopolis.com/comment/2261#comment-2261.

Pero tras presentar los resultados del ataque al trigrama inicial, el autor contesta en http://www.kriptopolis.com/comment/2338#comment-2338

una de tus condiciones para cribar candidatos no se cumple para el reto, y creo que has descartado un candidato válido.

y ya no sé qué pensar. Como el principal problema va a ser ahora la explosión combinatoria, me gustaría que sqrmatrix aclarara este punto, si le parece pertinente, para reducir un poco el volumen de ensayos.

Chas gracias.

No no, que voy a atacar por ahi

La idea es atacar el inicio del texto con las restricciones sobre las relaciones de ambas claves, es decir, no es necesario atacar al tuntun la clave par y la impar ya que están relacionadas. La idea es para cada trigrama válido ver si alguno de los 4 (por la ampliación que tuve que hacer) relacionados también lo es y si además descifra por otro trigrama válido al principio del texto. Si eso se cumple se pasa al segundo trigrama manteniendo como sus primeros caracteres los dos ultimos del que acabamos de probar (vamos encadenando letras). Nótese también que tendremos que probarlo para cada una de las posibles ubicaciones del texto probable que ya localizamos.

Hola. lo que sí estaría bien,

Hola. Lo que sí estaría bien, dado el trabajo que ha desarrollado LlamameX es que confirmases si la clave no es mayor de 10 caracteres y si el texto a buscar es correcto tal y como lo emplea, con el espacio inicial: _EL_MUNDO_CIVILIZADO

Es que me sabe mal que un trabajo tan impecable y exhaustivo sea en en balde...

No hay ningún secreto

No vayáis a pensar. Sqrmatrix me ha confirmado lo que ya en su día dijo. Lo que pasa es que yo debo haber hecho algo mal en el ataque al trigrama inicial. Pero de momento voy a esperar a ver lo de LlamameX, que es más interesante.

Nueva vía de ataque

¿No es cierto que en el texto plano, la cadena de 20 caracteres a partir de la 220 (contando desde 1) se repite en la 47732 (cifrado WH.FKS:CJDFFZCWVAUXA)?

y la 381 en la 22999, cifrado VSFPMP;NJY:X_ZJCFYER

y todas estas:

1175,23176,"TJFÑ;NÑRVDTJM;LHII_L"
1392,11636,"X;J;VDODJJKHPZ,MXLNZ"
1446,20814,"RVKBVEJ:JD_WGI.Z;U_."
1519,14136,"MWACI:ÑRVSFPMP;NJY:X"
1858,14392,"XMAÑVCVXYQ_SC_EAFBIZ"
1906,16835,";;PHEZD_S,EABPIHHMP:"

hay muchísimas más, pero como muestra vale.

he realizado pruebas con textos, cifrándolos con claves de longitud 10, y los ngramas del texto tienen su trasunto en el texto cifrado. Es una debilidad del copón. No sé si en público o en privado me podías confirmar lo de los 20-gramas, aunque estoy seguuuuuuuuuuuuuro.

Lo que si queda claro

es que para tener un ngrama repetido, salvo coincidencias (posible en cadenas cortas), hay que tener un texto claro igual y la misma combinación de pares/impares durante una longitud previa igual a la longitud de clave más larga. Es decir, si tenemos una longitud de clave 10, para tener un ngrama de longitud 20 repetido necesitamos que antes de esos 20 carácteres haber tenido 10 coincidencias par/impar, cosa que óbviamente ocurriría en el caso de un 30-grama repetido.

Asumiendo eso puede ser más que interesante analizar los carácteres anteriores a esos 20-gramas. Me pongo también a darle alguna vuelta al tema:

El carácter en claro inmediatamente anterior al 20-grama podemos suponer que estará, pues, también repetido y que será distinto en el cifrado sólo por el cambio de paridad del carácter que le toca. Si los xoreamos entre ellos eliminamos el texto claro y todas las funciones de cifrado salvo el xor de una única KPi y KIi. Dado que esto tiene que ocurrir en todos los 20-gramas que has encontrado deberíamos encontrar un único valor XOR en todos ellos que nos lo confirme. Una vez establecido éste, además, podemos seguir tirando hacia atrás obteniendo nuevos valores. Los resultados deberían ser congruentes con los de los sistemas de ecuaciones, cosa que con suerte nos permitiría determinar los que tuve que añadir para completar el sistema.

Muy, pero que muy interesante.

No del todo pero algo

Por ejemplo, en una búsqueda rápida encuentro las siguientes coincidencias

MW,;,OSKFUUIAH_LMCR_EACI:?RVSFPMP;NJY:X_ZJCFYERQC
:SVLEBWRRHQWCJ;?BH:MWACI:?RVSFPMP;NJY:X_X:;SREP.W
D_WLWI.EXT;NDZRGFT:MWACI:?RVSFPMP;NJY:X,FKQ:VS:CJ
;?:OBJLMCCKWD_AYRH:MWACI:?RVSFPMP;NJY:X_ZIRMVOS_J
_SJ__:HRVVRIUZ;?BH:MWACI:?RVSFPMP;NJY:X,FXLVKS
OUTNDNVNHWDIKESTZDNMWACI:?RVSFPMP;NJY:X_ZJCFYER
NWIQATOQDIJI?;:QVT:MWACI:?RVSFPMP;NJY:X_ZJCFYERQF;
ZVKQ;;H;;TJBYBVUFT:MWACI:?RVSFPMP;NJY:X_X:;SREP.W
SW,RNDSSNZDIUZ;?BH:MWACI:?RVSFPMP;NJY:X_X:;SREP,W

Si miramos en algunos casos el carácter anterior

D_WLWI.EXT;NDZRGFT:MWACI:?RVSFPMP;NJY:X,FKQ:VS:CJ
ZVKQ;;H;;TJBYBVUFT:MWACI:?RVSFPMP;NJY:X_X:;SREP.W
...............^
G^U=6^21=19
 
ZVKQ;;H;;TJBYBVUFT:MWACI:?RVSFPMP;NJY:X_X:;SREP.W
SW,RNDSSNZDIUZ;?BH:MWACI:?RVSFPMP;NJY:X_X:;SREP,W
.................^
H^T=7^20=19
 
;?:OBJLMCCKWD_AYRH:MWACI:?RVSFPMP;NJY:X_ZIRMVOS_J
_SJ__:HRVVRIUZ;?BH:MWACI:?RVSFPMP;NJY:X,FXLVKS
................^
 
R^B=1^18=19

En algún caso no se cumple, tengo que acabar de verificarlo (puede que en esas excepciones no estemos realmente ante el último carácter), pero de momento se adapta bastante bien a la teoría

Nota: cambio Ñ por ? para usar cryptool.

kasiski

En las pruebas que hice (con bloques de 20) me coincidió siempre exactamente la repetición de fragmento cifrado y de de texto en claro, de ahí mi seguridad.
Lo de la periodicidad ya lo había sugerido aquí pero no lo pude extender a n-gramas de orden superior a 4, porque utilizaba el cryptool. He tenido que hacerme un programita para ello. Por cierto que los n-gramas repetidos de orden igual a 4, en su mayor parte también se refeljan en el texto en claro.

Cryptool te da hasta 15-gramas

Y hay muchísimas repeticiones de los mismos. Tiene que haber bloques idénticos en el texto claro. La verdad es que tenía al pobre cryptool criando polvo injustamente y no lo veía aplicable. Craso error y además de libro: olvidar las técnicas clásicas.

N-Gramas de orden 30

También los hay. Y muchos, esto es una mina!

1871,14395,"ÑVCVXYQ_SC_EAFBIZQJJARUFUCCPI,"
7232,8126,"_C;ROGTB,VU_BKASEIGBA_HJOBISPZ"
10932,19306,"IAYR_EWMYRGC,;GFJÑWJ;WPZBZIG_Q"
11519,19569,"Y:X_ZJCFYERQFCNX;SJH,R;R.RRQVM"
11850,19728,"TFIZ,;JCNIVN;NIO,;:SEUVFSFNEBÑ"
11883,19761,"ZZNQVMAYNVBDT,:RÑBKIBORSYTAY.;"
14452,16818,"I,:;:V.O.BGBZNBZ:;;PHEZD_S,EAB"
15796,33602,".AW,V,BZPZR:FVXE.STWÑWKN;QKNMB"

la tira...

Páginas

opinar

Texto puro

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
By submitting this form, you accept the Mollom privacy policy.