Resuelto -> AESito32: El cifrado definitivo

Imagen de Agustín
Enviado por Agustín en

Foros: 

Brillantemente superado por LlamameX en tiempo record. ¡Enhorabuena!

Por Agustín

Debéis saber que, a la vista de la descomunal potencia de algunos atacantes a los que no quiero nombrar, pero que todos sabéis quiénes son, esta vez la cosa va en serio. Este engendro no está pensado para que os divirtáis, sino para que lloréis lágrimas de sangre, eso en el caso de que tengáis a bien prestarle un poco de atención, a pesar de -o gracias a- mis desafortunadas palabras iniciales.

Bueno, al grano. Es un cifrado diabólico -al menos a mí me lo parece- que reúne las siguientes características:

  • I. La clave mide 32 caracteres, y se completa, si es necesario, por un sencillo procedimiento.
  • II. El alfabeto se modifica a partir de la clave.
  • III. Se cifra el texto por bloques de 32 caracteres, que previamente se desordenan a partir de una clave -distinta cada vez- y del alfabeto modificado.
  • IIII. El cifrado consiste en XOR con cada carácter del bloque desordenado y los de la citada clave variable que se genera, a partir de la anterior, para cada bloque.

1. El alfabeto es el que últimamente está de moda, es decir

ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;

de 32 caracteres, que puede codificarse con 5 bits

2. Hay una clave inicial que debe medir exactamente 32 caracteres. Si mide menos, se completa por un procedimiento simple que consiste en añadirle caracteres mediante la fórmula

K[i +1] = K[i] + 1

que ya se empleó en la Omelette. Es decir: Si el primer carácter es una A, el primero que se añade será una B, si el segundo es una B, el segundo que se añade será una C, etc.

Por ejemplo, si la clave es

LOS_LAMELIBRANQUIOS

(que es un tipo de molusco), la clave completa será:

LOS_LAMELIBRANQUIOSMPT.MBNFMJCSB

3. El alfabeto se modifica a partir de la clave, del siguiente modo:

a) Se obtienen las posiciones de la clave en el alfabeto base, lo que nos dará la lista:

12 16 20 28 12 01 13 05 12 09 02 19 01 14 18 22 09 16 20 13 17 21 29 13 02 14 06 13 10 03 20 02

b) Luego se ordena esta lista para obtener una secuencialización, de forma que podamos tratar con las repeticiones.

Clave ordenada
01 01 02 02 02 03 05 06 09 09 10 12 12 12 13 13 13 13 14 14 16 16 17 18 19 20 20 20 21 22 28 29
Secuencia
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

c)Ahora procedemos a desordenar el alfabeto de la siguiente manera: Tomamos la primera letra, que es, lógicamente, la A. Como el primer valor de la clave es el 12, que aparece por primera vez en la posición 11 (empezando por cero) de la secuencia, la letra A irá a la posición 11 del alfabeto

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
__ __ __ __ __ __ __ __ __ __ __ A_ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __

Hay que marcar de algún modo que la posición 11 ya está ocupada. Yo lo he implementado borrando el valor 11 de la matriz de posiciones de la clave.

A continuación tomamos la B, a la que le corresponde el valor 16 de la clave, cuya primera posición en la secuencia es la 20, luego la B va a la posición 20:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
__ __ __ __ __ __ __ __ __ __ __ A_ __ __ __ __ __ __ __ __ B_ __ __ __ __ __ __ __ __ __ __ __

y así sucesivamente, hasta que nos queda el alfabeto desordenado de esta forma:

FMKX;,HZJP.AEIGSW_NYBQTÑLCR:UODV

4. A partir de aquí ya podemos empezar a cifrar. Tenemos un flujo de entrada que es un fichero normalizado con respecto al alfabeto base. Por ejemplo este texto sobre la revolución palestina del malogrado Rodolfo Walsh, quien fue hecho desaparecer por la dictadura de Videla, :

LA_REVOLUCION_PALESTINA_POR_RODOLFO_J._WALSH_EN_ESTE_AGOSTO_DE_EN_QUE_RECRUDECE_LA_AGRESION_DE_ISRAEL_EN
_MEDIO_ORIENTE_Y_EN_QUE,_CORRESPONDIENTEMENTE,_SE_MULTIPLICAN_LAS_MENTIRAS_IMPERIALISTAS_PROPAGADAS_POR_LOS
_GRANDES_MONOPOLIOS_DE_LA_COMUNICACION,_RESULTA_IMPRESCINDIBLE_LEER_LO_QUE_ESCRIBIERA_ESTE_INSIGNE_Y_RECONO
CIDO_PERIODISTA_Y,_MAS_QUE_ESO,_ESTE_CONSECUENTE_COMBATIENTE_REVOLUCIONARIO,_INTEGRANTE_DE_MONTONEROS,_QUE
_DESAPARECIERA_EN_MARZO_DE_A_MANOS_DE_LA_DICTADURA_DE_VIDELA._ES_ESTA_LA_VERDADERA_HISTORIA,_DOCUMENTADA_A
UN_CON_FUENTES_QUE,_COMO_LA_ONU,_SI_PUEDEN_SER_SOSPECHADAS_DE_PARCIALIDAD,_NO_ES_PRECISAMENTE_EN_FAVOR_D
E_LA_RESISTENCIA_PALESTINA,_Y_RELATADA_POR_UN_RODOLFO_WALSH_SOBRE_EL_QUE_HOY_YA_ES_UNIVERSAL_SU_CREDIBILIDA
D_Y_HONESTIDAD_INTELECTUAL,_UN_ESCRITOR_ALABADO_MUNDIALMENTE_Y_RECONOCIDO_COMO_UN_CLASICO_DE_LA_LITERATURA
_POLITICA_Y_COMO_UN_EXCELSO,_PENETRANTE_E_INSUPERABLE_INVESTIGADOR._EL_PRESENTE_TRABAJO_DE_RODOLFO_WALSH_F
UE_PUBLICADO_EN_EL_DIARIO_NOTICIAS,_EN_JUNIO_DE_._PUBLICAMOS_ADEMAS_LA_POLEMICA_POSTERIOR_ENTRE_WALSH_Y_EL_E
NTONCES_EMBAJADOR_DEL_ESTADO_DE_ISRAEL_EN_ARGENTINA._EL_CONJUNTO_DE_ESTOS_MATERIALES_ES_REPRODUCIDO_EN_B
ASE_A_LOS_CUADERNOS_DE_LA_REVISTA_JOTAPE_QUE_APARECIA_EN_LOS_Y_A_LA_EDICION_REALIZADA_POR_LA_EDITORIAL_ULTIM
O_RECURSO,_EN_MAYO_DE_._

https://www.dropbox.com/s/aqx7zpjl4y6mhrw/Rodolfo-Walsh-La-revoluci%C3%B...

a) Tomamos el texto en bloques de 32 caracteres

Bloque
LA_REVOLUCION_PALESTINA_POR_RODO

b) Generamos una clave nueva, a partir de la anterior, por el procedimieto ya descrito, de tomar para cada carácter, el que le sigue en el alfabeto base. Aunque esto parece excesivamente trivial, no lo es tanto, porque las posiciones de esas letras van a referirse al alfabeto modificado, y la secuencia ya no será tan simple. Eso también viene de la Omelette.

Nueva clave
MPT.MBNFMJCSBÑRVJPTNQU,NCÑGNKDTC

Cuyas posiciones en el alfabeto modificado son:

Posiciones de la clave
02 10 23 11 02 21 19 01 02 09 26 16 21 24 27 32 09 10 23 19 22 29 06 19 26 24 15 19 03 31 23 26
Posiciones ordenadas
01 02 02 02 03 06 09 09 10 10 11 15 16 19 19 19 19 21 21 22 23 23 23 24 24 26 26 26 27 29 31 32
Secuencia
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

c) Mediante esta clave se desordena el primer bloque de caracteres, por el procedimiento ya descrito.

Bloque desordenado
LLEURACLAERROOT__VNI_SD_OIPOPNOA

d) Se realiza XOR entre cada carácter del bloque desordenado y cada carácter de la clave, usando las posiciones de ambas en el alfabeto modificado
En nuestro caso tenemos los siguientes valores:

Bloque cifrado
C_RT:VAL.;XQP.EGCT;V;Y:X;RZSAEAN

(El cifrado de este artículo está en: https://www.dropbox.com/s/0rh8jodo4sr1xy0/Cifrado-R-Walsh.txt)

Y así sucesivamente. Si el último bloque tiene menos de 32 caracteres se completa con el mismo procedimiento que se usa para completar la clave, pero con referencia al alfabeto derivado.

Por Agustín

Como véis, hay cierto tejemaneje de bytes, como en AES, pero para cada bloque es distinto, porque la clave va cambiando. Podría parecer que es un OTP porque la clave no se repite, pero tiene la debilidad de que las nuevas claves se derivan de la que introduce el usuario. Ay, que no debía señalar las debilidades. Bueno, da igual, porque ya veo a LlamameX estableciendo ecuaciones diofánticas sobre los índices y los valores, y..., bueno, ya sabéis cómo es.

El descifrado sigue el mismo procedimiento con la salvedad de que primero se realiza el XOR entre la clave y el bloque cifrado, y luego se reordena, La reordenación es muy sencilla, pues, basta con ir a los valores de la clave secuenciados, e ir tomando los caracteres que ocupan en el bloque las posiciones correpondientes.

El reto consiste en descifrar este fichero

Bueno, lo que más me preocupa es que varios de vosotros tenéis retos en marcha, y alguno más, que estábais a punto de alumbrar, como el CHE de LlamameX, Lo siento mucho, pero es época de crisis y hay que hacer méritos ante el Lado Oscuro. Por cierto, que al parecer no hay ninguna oferta de empleo en este momento. Cachis.

Os dejo ya, que oigo el retumbar de la botas de la Mengela, acercándose.

P.S.
Prometo prestar toda mi atención a vuestros monstruos, dentro de mis limitaciones, claro.

PS II
Veo que algunas listas (que se tratan como matrices) se cuentan desde 0, y otras desde 1. Ello es debido a ciertas limtaciones del lenguaje de programación empleado. Si embargo mi implementación funciona al cifrar y descifrar. Vosotros podéis modificar ese aspecto y los que haga falta.

Na, si no metemos presión ni nada

Ya os vale!

Tengo bastantes caminos abiertos pero falta aún mucho por recorrer. Recordad que es un triple cifrado transposición+sustitución+pseudoOTP, lo que se viene llamando un supercifrado, asi que si bien le vamos quitando patas al taburete, aún se tiene en pie.

Ataque por distancias

Tengo ya la estrategia de ataque definida. Se trata ubicar en cada columna, (agrupando las filas en grupos de 32) el caracter espacio "_" (en el cifrado) con máximas repeticiones. Eso debería garantizarnos que estamos en la fila en la que la columna correspondiente es nula para el XOR con la clave. Esto finalmente nos dará una lista de 32 números de fila, las distancias entre las cuales corresponderá a la distancia entre las letras de la clave (puesto que la clave evoluciona sumando 1 al alfabeto normal, no al derivado), teniendo por tanto 32 candidatos (¡a clave original!) fácilmente comprobables.

Cuando tenga acceso a mi entorno de desarrollo (estos días estoy en el VMworld, yupi) lo implemento.

VMWorld en Fira Barcelona del 9 al 11 de Octubre

La conferencia anual VMWorld, que en su rama europea se celebra este año 2012 en Fira Barcelona del 9 al 11 de Octubre, acaba precisamente hoy, jueves. Parece -por tu expresión, yupi- que te está yendo bien, ¡me alegro! No dejes, si lo crees oportuno, de contarnos alguna anécdota del evento... siempre se aprende algo ;-)

Aprovecho para agradecerte todos tus comentarios y felicitarte -bueno; a tí, al equipo criptoanalítico habitual y a los demás participantes- por la reciente y admirable resolución del 'cifrario xor' propuesto por sqrmatrix. No puedo, ni pretendo, entenderlo todo ahora pero con el tiempo nunca se sabe porque en realidad todo está ahí muy bien explicado. De todas formas siempre me resulta muy entretenido, aunque no llegue, seguir vuestra plática o departir matemático, programático y criptoanalítico porque casi siempre aprendo algo que, de otra forma, nunca hubiera llegado siquiera a imaginar. Gracias y saludos.

El ataque funciona pero precisa mas datos

Con el del ejemplo, obtengo la siguiente clave, que comparada con la real ya se ve que acierta bastante

Candi [11] [LOG_:ACELIBIANEUIOJÑPT.MBN_MJCSB]
Real:       LOS_LAMELIBRANQUIOSMPT.MBNFMJCSB

No tengo resultados tan claros con la del reto, pero hay que recordar que tiene 3 veces menos texto

SERIE_ENIGMA_ROMAN

Con la cantidad suficiente de texto ha caído sin problemas. Apenas fallaban un par de caracteres que se han podido obtener de la cola, que actúa como redundancia (o una especie de CRC) del principio de la clave.

El último texto largo:

"EN_EL_VERANO_DE_,_UNA_PEQUEÑA_LOCALIDAD_DEL_CONDADO_DE_BUCKINGHAM_VIO_PERTURBADA_SU_TRANQUILIDAD_POR_LA_LLEGADA_DE_UNOS_ESTRAFALARIOS_VISITANTES._SE_T..."

que corresponde al artículo del genial Roman Ceano "Enigma 00" http://www.kriptopolis.com/engima-00

El texto corto

ENIGMA_POR_ROMAN_CEANO_AUNQUE_EL_CLIMA_DEL_SUR_DE_INGLATERRA_NO_SE_PUEDE_COMPARAR_AL_DEL_ATLANTICO_NORTE,_KENWORTHY_Y_SUS_AYUDANTES

Que corresponde a "Enigma 90" de la misma serie http://www.kriptopolis.com/enigma-90

Luego detallo el ataque. De momento he conseguido cumplir el plazo de Sqrmatrix XDD

Lo que lamento es que te he defraudado. Dijiste que no era para divertirnos y me lo he pasado pipa. XD

Gracias!

Mi mas sincera enhorabuena a

Mi mas sincera enhorabuena a LlamameX, alias el rayo, por su fulgurante victoria.

Acabo de entrar, a ver si terminaba de entender la propuesta de ataque de LlamameX, entre remiendo y remiendo a mi algoritmo genético para ver si mañana cazaba algo...y ya, ya esta!!!!!!!! ya se ha zampado el reto!!!!!

Digo yo si, al hilo de algunas propuestas europeas sobre el euro, no convendría también hacer dos áreas de retos. Una para Llamamex y Sqrmatrix y otra para el resto. (Y si acaso una tercera para mogdedoges de megenges, ya pelín desdentados con la edad, como un servidor.)

No creo que haya ninguna web española, y dudo que tampoco ninguna asignatura de criptografía, que muestre en vivo y en directo tantos y tan variados ejemplos de complejos criptoanálisis. Es histórico lo que están haciendo estos dos.

Y tanto

... aunque yo te incluiría a ti en el dream team!

Acabo de mandar varios tweets informando de la ruptura, a ver si los del lado oscuro os hacen una oferta que no podáis rechazar ;)

Ataque a AESito32

Bueno os cuento como ha sido el ataque. La verdad es que me ha sorprendido hasta a mi, ya que por el enunciado parecía una bestia parda: Teníamos 3 fuentes de cifrado: una sustitución contra el alfabeto derivado, una transposición variable por bloque y una pseudoOTP. A bote pronto muy duro. Como aderezo, además y a diferencia de Omelette, la generación del alfabeto derivado hacía muy difícil obtener la clave que lo generaba.

Sin embargo, analizando el algoritmo rápidamente aparecen algunas vulnerabilidades muy importantes para el ataque:

  • La transposición deriva sólo de la clave en cada grupo de 32.
  • La clave se bucla con una cadencia evidente. Cada 32 grupos de 32 caracteres se vuelve a usar la misma clave, cosa que junto con la anterior permite ecolumnar, es decir apilar por grupos de 1024 donde en cada columna el tratamiento es exactamente el mismo.
  • El alfabeto derivado no se altera nunca, siempre es el mismo.
  • La clave evoluciona con operaciones realizadas a partir del alfabeto normal, no del derivado, cosa que abre la puerta a la aritmética entre carácteres.
  • Además, puesto que la clave original usa el mismo mecanismo de evolución también aparecerá en el cifrado y justo para aplicarse en el grupo 31 y posteriormente cada 32.

Vamos a trabajar pues imaginando el texto dividido en grupos de 32x32 carácteres formando una secuencia de matrices que llenaremos por filas. Así el carácter en la posición 1126 (empezando en 0) irá a parar al grupo 2, fila 3, columna 6 (filas y columnas también empiezan por 0).

La primera cosa que encontre fue que es posible encontrar caracteres en claro en el cifrado. Sabemos que una vez hecha la transposición se realiza la siguiente operación para calcular un Ci

C(i)=f'(f(A(j)^f(K(p,k)))

Donde f(x) es la función de sustitución y f'(x) su inversa; A(j) es el carácter en claro que queda en la posición i después de la transposición y K(p,k) el caracter de la clave evolucionada p pasos en la posición k (k=i mod 32). Se da la circunstancia de que K(p,k)=K(0,k)+p, cosa que posibilitará el ataque.

Dado que para algún valor de p se cumplirá que K(p,k)=0, supongamos que es en la posición i. Tendremos C(i)=f'(f(A(j)))=A(j), es decir, un carácter en claro. Es cierto que no sabemos relacionar que C(i) va con que A(j), pero podemos ver algunas cosas:

Sabemos que la función de transposición parte del los carácteres de la clave ordenados de menor a mayor según alfabeto derivado y en igualdad por orden de aparición. Así puestos, el carácter que represente al valor K(p,k)=0 (justamente el que nos anula el XOR) será el primero en la transposición. Lo tendremos ubicado. Si conseguimos desde determinar una posición K(p,0), f(K(p+1,0)) estará a +-1 de la misma. Siguiendo la secuencia podríamos determinar el alfabeto derivado (con un arbol binario de posibilidades). A partir de éste, sabiendo que K(31,k) es la clave original sólo habría que obtener la evolución desde K(p,k) hasta ella. Este ataque se desestima por demasiado costoso.

Tenemos otra vía de ataque. Podemos obviar el alfabeto derivado y atacar la clave directamente. Sabemos que en determinadas condiciones se coloca texto en claro en el cifrado. Localizaremos pues los casos en que se coloquen espacios "_" (el carácter mas abundante) agrupando bloques de 32x32. La estadística nos dice que los espacios que correspondan a texto en claro en una posición de nuestra matriz tienen que ser mucho más abundantes que los que correspondan a un carácter cifrado como tal.

Así pues, obtenemos una matriz de frecuencias de aparición de "_". Hemos visto que para que en una posición un carácter esté en claro K(p,k) ha de ser 0. Para cada columna eso sólo ocurrirá en una fila, ya que el resto contendrán los demás valores entre 1 y 32. Por lo que hemos dicho esa fila deberá tener el valor más alto con lo que podremos identificarla fácilmente. Así obtenemos un lista de 32 filas (el número de fila será nuestra p en K(p,k) y la k la columna a la que corresponde).

Habíamos visto que K(p,k)=K(0,k)+p. Vamos a imaginar 2 columnas k1 y k2 cuyas K(p,k1) y K(p,k2) estén separadas una distancia d. Podemos visualizarlas como dos secuencias iguales ("ruedas" de caracteres) que están desplazadas d posiciones una respecto a la otra, es decir K(p,k1)=K(p-d,k2)=K(p,k2)-d Tenemos también para cada k la posición p en que K(p,k)=0. Es decir, podemos encontrar d restando esas posiciones (recordemos que podemos hacer esto puesto que todas las operaciones de evolución se hacen con el alfabeto normal). De esta manera encontraremos la relación entre todas las columnas, es decir cuanto estan desplazadas las "ruedas" unas respecto a otras.

Ya lo único que nos falta es encontrar una posición inicial con la que encontrar el resto. Dado que tenemos sólo 32 posibles valores, lo más fácil es generar como claves los 32 candidatos empezando en cada uno de los posibles carácteres y ver cual de ellas es más coherente. Haciéndolo tenemos:

Candi [00] [AQ;UQIQZGSYNC;.YNZBRAVRJR_VTZÑJA]
Candi [01] [BRAVRJR_HTZÑDA,ZÑ_CSBWSKS.WU_OKB]
Candi [02] [CSBWSKS.IU_OEB:_O.DTCXTLT,XV.PLC]
Candi [03] [DTCXTLT,JV.PFC;.P,EUDYUMU:YW,QMD]
Candi [04] [EUDYUMU:KW,QGDA,Q:FVEZVNV;ZX:RNE]
Candi [05] [FVEZVNV;LX:RHEB:R;GWF_WÑWA_Y;SÑF]
Candi [06] [GWF_WÑWAMY;SIFC;SAHXG.XOXB.ZATOG]
Candi [07] [HXG.XOXBNZATJGDATBIYH,YPYC,_BUPH]
Candi [08] [IYH,YPYCÑ_BUKHEBUCJZI:ZQZD:.CVQI]
Candi [09] [JZI:ZQZDO.CVLIFCVDK_J;_R_E;,DWRJ]
Candi [10] [K_J;_R_EP,DWMJGDWEL.KA.S.FA:EXSK]
Candi [11] [L.KA.S.FQ:EXNKHEXFM,LB,T,GB;FYTL]
Candi [12] [M,LB,T,GR;FYÑLIFYGN:MC:U:HCAGZUM]
Candi [13] [N:MC:U:HSAGZOMJGZHÑ;ND;V;IDBH_VN]
Candi [14] [Ñ;ND;V;ITBH_PNKH_IOAÑEAWAJECI.WÑ]
Candi [15] [OAÑEAWAJUCI.QÑLI.JPBOFBXBKFDJ,XO]
Candi [16] [PBOFBXBKVDJ,ROMJ,KQCPGCYCLGEK:YP]
Candi [17] [QCPGCYCLWEK:SPNK:LRDQHDZDMHFL;ZQ]
Candi [18] [RDQHDZDMXFL;TQÑL;MSERIE_ENIGMA_R]
Candi [19] [SERIE_ENYGMAUROMANTFSJF.FÑJHNB.S] <==
Candi [20] [TFSJF.FÑZHNBVSPNBÑUGTKG,GOKIÑC,T]
Candi [21] [UGTKG,GO_IÑCWTQÑCOVHULH:HPLJOD:U]
Candi [22] [VHULH:HP.JODXURODPWIVMI;IQMKPE;V]
Candi [23] [WIVMI;IQ,KPEYVSPEQXJWNJAJRNLQFAW]
Candi [24] [XJWNJAJR:LQFZWTQFRYKXÑKBKSÑMRGBX]
Candi [25] [YKXÑKBKS;MRG_XURGSZLYOLCLTONSHCY]
Candi [26] [ZLYOLCLTANSH.YVSHT_MZPMDMUPÑTIDZ]
Candi [27] [_MZPMDMUBÑTI,ZWTIU.N_QNENVQOUJE_]
Candi [28] [.N_QNENVCOUJ:_XUJV,Ñ.RÑFÑWRPVKF.]
Candi [29] [,Ñ.RÑFÑWDPVK;.YVKW:O,SOGOXSQWLG,]
Candi [30] [:O,SOGOXEQWLA,ZWLX;P:TPHPYTRXMH:]
Candi [31] [;P:TPHPYFRXMB:_XMYAQ;UQIQZUSYNI;]

Vemos que en la posición 19 tenemos un resultado muy positivo. No es perfecto pero sin duda es nuestro candidato. Vamos a determinar la clave desde él.

Sabemos que la clave está construida rellenando hasta 32 con los carácteres iniciales sumando 1. Eso nos permite usar la cola (últimos caracteres) para determinar aquellas posiciones que nos han quedado con poco sentido. Veamos donde empieza a usarse la cola: dado que la clave empieza por "SER..." la cola ha de empezar por "TFS..." que localizamos rápidamente. Asi tenemos

SERIE_ENYGMAUROMAN + TFSJF.FÑJHNB.S

Restando uno a la cola obtenemos

SERIE_ENYGMAUROMAN + SERIE_ENIGMA_R

Combinando ambos resultados obtenemos la clave SERIE_ENIGMA_ROMAN y desciframos

El último texto largo:

"EN_EL_VERANO_DE_,_UNA_PEQUEÑA_LOCALIDAD_DEL_CONDADO_DE_BUCKINGHAM_VIO_PERTURBADA_SU_TRANQUILIDAD_POR_LA_LLEGADA_DE_UNOS_ESTRAFALARIOS_VISITANTES._SE_T..."

que corresponde al artículo del genial Roman Ceano "Enigma 00" http://www.kriptopolis.com/engima-00

El texto corto

ENIGMA_POR_ROMAN_CEANO_AUNQUE_EL_CLIMA_DEL_SUR_DE_INGLATERRA_NO_SE_PUEDE_COMPARAR_AL_DEL_ATLANTICO_NORTE,_KENWORTHY_Y_SUS_AYUDANTES

Que corresponde a "Enigma 90" de la misma serie http://www.kriptopolis.com/enigma-90

Nota: Puede verse que en este caso la cola la tendremos en claro en el candidato anterior. Esto es así por que en esta construcción se han calculado las diferencias con el primer caracter y el +1 del relleno se compensa con el -1 de la clave que empieza por ese carácter.

Como conclusiones: El cifrado AESito32 puede ser tremendamente difícil de atacar compensando alguna de sus debilidades, especialmente evitando bucles previsibles en la evolución de la clave. Aún así, este ataque ha requerido una cantidad importante de texto. Quizás otros caminos requirieran menos, pero sería a costa de grandes tiempos de cálculo, cosa que pone de manifiesto la fortaleza del concepto.

Enhorabuena

Si ya decía yo que te lo ibas a cargar en un suspiro cuando ví tus últimos avances.

Resulta que esta mañana me puse con él, y me dije: "voy a ver cómo va la cosa", y me encuentro con el cifrario roto :).

Bueno, yo me encontré con algo curioso que no sé si hubiera permitido romper el cifrario, pero lo expongo porque me parece interesante.

Tenemos dos criptogramas del mismo texto, pero encriptados con la misma clave. Sabemos que cada uno se puede dividir en líneas de 1024 caracteres que podemos colocar una debajo de otra, de forma que cada columna está xoreada con la misma letra. Sabemos también que estas líneas de 1024 caracteres se pueden dividir en bloques de 32 caracteres, cada uno de ellos encriptado con una clave distinta. Bloques en la misma posición en uno de los criptogramas encriptan el mismo texto que en el otro criptograma, pero el orden de las columnas puede variar. Tenemos que una columna del primer criptograma está encriptada en el segundo criptograma, aunque seguramente en otra columna distinta (dentro del correspondiente bloque de 32 caracteres) y seguramente con otra letra, por lo que no veremos que coincidan las letras de las columnas.

Sin embargo, puesto que la operación realizada en ambas columnas es la operación XOR con una única letra, resulta que sus patrones coincidirán. Por tanto, lo que tenemos que hacer para saber en qué columna del bloque de 32 caracteres del segundo criptograma está la columna i-ésima del correspondiente bloque del primer criptograma, es obtener el patrón de la columna i-ésima del primer criptograma, y obtener todos los patrones de todas las columnas del correspondiente bloque de 32 caracteres del segundo criptograma. A continuación, basta buscar el patrón del primer criptograma en los patrones obtenidos del segundo. Si sólo encontramos un patrón coincidente, hemos determinado la columna j-ésima en el segundo criptograma del mismo texto encriptado en la columna i-ésima del primer criptograma. Si encontramos más de un patrón coincidente, entonces la columna j-ésima será una de las columnas cuyo patrón coincide, aunque no sabemos cuál. Y si no encontramos ningún patrón coincidente, tenemos la seguridad de que ambos textos no son idénticos.

Para el primer bloque de 32 caracteres, entre el primer y segundo retos, me encontré con las siguientes correspondencias:

0 ---> 31
1 ---> 28
2 ---> 1
3 ---> 13
4 ---> 14
5 ---> 12
6 ---> 2
7 ---> 23
8 ---> 21
9 ---> 7
10 ---> 8
11 ---> 18
12 ---> 3
13 ---> 0
14 ---> 10
15 ---> 11
16 ---> 16
17 ---> 15
18 ---> 5
19 ---> 29
20 ---> 24
21 ---> 27
22 ---> 6
23 ---> 26
24 ---> 4
25 ---> 20
26 ---> 19
27 ---> 25
28 ---> 30
29 ---> 17
30 ---> 9
31 ---> 22

Y aquí me quedé, porque fué cuando entré en Kritópolis y ví que se había resuelto.

De nuevo, doy mi enhorabuena a LlamameX.

Si, tiene muy buena pinta

Sin duda hay mucho que obtener de ahí. Si no hubiera sido tan asequible la clave por estadísticas hubiera sido la puerta para entrar a por él. Como ya le comenté a Agustín un recifrado del mismo texto original con otra clave es una pista gordísima.

¡Báiss-báiss!

¡Sit dáun!. La criatura ha sido destripada y yace mansa y dócil a nuestros pies.

LlamameX está destacando dentro del grupo de Vengadores, no solamente por sus mallas ajustadas, de esas de las que no escapa ni un pedo, sino por su habilidad disparando con el arma de programa-repetición. Ya van dos, y esta última casi sin sacarla. Menudo fenómeno.
Felicidades al resto del equipo también porque sóis unos auténticos cracks.

¿A que no sabéis a donde ha ido a parar Agustín?. Pues aquí http://pampasur.files.wordpress.com/2007/12/preso.jpg

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.