Reto: Rubik2

Imagen de LlamameX
Enviado por LlamameX en

Foros: 

06/07/13: Resuelto por sqrmatrix. ¡Enhorabuena!

Por LlamameX

 

Bueno, tras el vapuleo del pobre CHE he decidido dejar los cifrados de flujo y pasarme a los de bloque. Con esa idea he rescatado una propuesta antigua y le he afilado los dientes y las garras para que tenga un oportunidad con vosotros. Se trata de RUBIK2, un algoritmo que tiene tres fuentes de cifrado: Un XOR entre grupos de caracteres, una sustitución (fija, en el fondo no soy tan malo) oculta y una transposición variable. La gracia es que para la transposición se usa un cubo de Rubik...


El algoritmo:

Le hacemos a la clave y al alfabeto el mismo pretratamiento que para el CHE, es decir desorden+protección+desorden según (me lo copio)

 

Pretratamiento

 

Desordenar el alfabeto base

El alfabeto base se desordena del mismo modo en que se hacía en MIMIC, es decir, se usa la clave como índice para ir extrayendo letras del alfabeto base, saltando tantas letras como la posición del caracter de la clave que estemos usando. Los saltos son cíclicos y si agotamos la clave volvemos a empezarla. Cuando hayamos extraido todas las letras habremos compuesto el alfabeto desordenado y habremos acabado. Por ejemplo, con la clave SANCHO haremos:

Primer carácter de la clave "S"=19. Avanzamos por el alfabeto base hasta la posición 19 obtenemos "S". Será el primer carácter del desordenado y lo extraemos del base. Ahora toca "A"=0. Avanzamos 0 y obtenemos "T" (hemos eliminado "S") la añadimos y la eliminamos del base. Siguiente carácter "N"=13 avanzamos cíclicamente 13 posiciones y llegamos a la posición 2, es decir "C". Seguimos hasta obtener

STCFN;XYKÑZPOQHL,:IJRWMDV_AGEUB.

 

Proteger la clave

Dado que este desorden es bastante vulnerable, vamos a aplicar otro pero con una clave modificada. Los pasos son
- Invertir la clave SANCHO pasa a OHCNAS
- Convetir la clave a cadena de bits (5 por carácter) pero usando la representación del alfabeto desordenado OHCNAS pasa a 011000111000010001001101000000
- Obtenemos un número de corte de la cadena multiplicando 17 por el valor en el alfabeto desordenado del último carácter de la clave y haciéndolo módulo la longitud de la cadena de bits. En este caso (17*12) mod 30 = 24.
- Cortamos la cadena de bits por ese punto y trasponemos ambos trozos 011000111000010001001101000000 pasa a 000000011000111000010001001101
- Obtenemos la representación de la clave protegida reconvirtiendo bits a carácter por el alfabeto desordenado 000000011000111000010001001101 pasa a SXYTCQ

 

Obtener el nuevo alfabeto desordenado

Usamos la nueva clave obtenida para desordenar una vez más el alfabeto ya desordenado (usamos el mismo sistema). Obtenemos

JOYBTMHQ,Z:KXW.NPREAU_CSLG;ÑVDIF

 

Cuerpo del cifrado

Una vez tenemos alfabeto y clave procedemos a cifrar el texto. Lo dividimos en bloques de 54 caracteres (pastillas del cubo). Si el texto no es lo suficientemente largo para llenar el último bloque lo rellenamos con carácteres "basura" (en mi implementación se toman carácteres del principio sumando 1 con sustitución según el alfabeto modificado (uy!)). Por ejemplo

EN_UN_LUGAR_DE_LA_MANCHA_DE_CUYO_NOMBRE_NO_QUIERO
se completa con clave SANCHO como 
EN_UN_LUGAR_DE_LA_MANCHA_DE_CUYO_NOMBRE_NO_QUIEROSPVUP

Cada bloque, a su vez, lo dividimos en 9 subbloques de 6. Cada subbloque se cifra de la siguiente manera:

Se XORea cada carácter (su valor según el alfabeto desordenado) con los 4 siguientes cíclicamente, de manera que en cada posición del subbloque quedará el resultado del XOR de 5 elementos. Por ejemplo, tomamos el primer subbloque del texto claro anterior

Primer subbloque EN_UN_
valores 18,15,21,20,15,21
 
Operaciones XOR
C[0]=18^15^21^20^15=09
C[1]=15^21^20^15^21=19
C[2]=21^20^15^21^18=18
C[3]=20^15^21^18^15=28
C[4]=15^21^18^15^21=19
C[5]=21^18^15^21^20=20

Con esos valores llenamos 6 pastillas del cubo. Para las siguientes 6 usaremos el segundo subbloque XOReado. Seguimos hasta llenar el cubo. Tendremos llenando las caras por filas:

cara 0 (frente):    09,19,18,09,19,20,22,27,17
cara 1 (derecha):   19,23,26,22,17,28,23,17,25
cara 2 (trasera):   09,21,12,28,09,31,16,31,24
cara 3 (izquierda): 27,25,24,28,08,18,28,24,31
cara 4 (superior):  10,09,14,20,26,24,28,15,05
cara 5 (inferior):  09,10,14,09,14,02,10,14,31

Ahora desordenaremos el cubo. Lo haremos en función de la clave de la siguiente manera:

Definimos los siguientes movimientos (cara,giros) donde cara va de 0 a 8, siendo 0 a 5 las caras anteriores y las 6, 7 y 8 las bandas centrales:

Cara 6: pastillas 01,04,07,48,49,50,25,22,19,41,40,39
Cara 7: pastillas 03,04,05,12,13,14,21,22,23,30,31,32
Cara 8: pastillas 10,13,16,46,49,52,34,31,28,37,40,43

Los giros podrán ir de 1 a 3, cosa que nos da 9x3=27. Para ir bien necesitamos disponer de 32 posibles movimientos, por lo que añadirmos al final 5 nulos. Los movimientos serán pues:

(0,1),(0,2),(0,3)
(1,1),(1,2),(1,3)
(2,1),(2,2),(2,3)
(3,1),(3,2),(3,3)
(4,1),(4,2),(4,3)
(5,1),(5,2),(5,3)
(6,1),(6,2),(6,3)
(7,1),(7,2),(7,3)
(8,1),(8,2),(8,3)
(9,1),(9,2),(9,3),(9,4),(9,5)

La clave la aplicaremos buscando el movimiento correspondiente al valor (según alfabeto desordenado) del primer carácter de la clave, segun corresponda. Por ejemplo a la "S" le corresponde el valor 23, es decir, (7,3) o 3 giros a la derecha de la 3ª banda central (o un giro a la izquierda de la misma). El siguiente movimiento lo calculamos cíclicamente desde el anterior, es decir, 23+"X"=3 => (1,1). Continuamos hasta obtener toda la secuencia de movimientos que aplicamos al cubo. En nuestro caso obtenemos

cara 0 (frente):    14,19,18,09,08,18,10,27,17
cara 1 (derecha):   19,23,14,09,19,02,23,17,22
cara 2 (trasera):   16,22,09,31,17,21,10,14,31
cara 3 (izquierda): 05,28,27,24,09,25,24,31,24
cara 4 (superior):  12,28,26,20,26,20,28,15,25
cara 5 (inferior):  09,10,31,09,14,24,09,28,28

Ya sólo queda recorrer el cubo por caras y filas y recuperar el valor según el alfabeto desordenado. Obtenemos el cifrado

.AEZ,E:ÑRAS.ZAYSRCPCZFR_:.FMVÑLZGLFLXV;U;UVNGZ:FZ.LZVV

Para bloques siguientes y para evitar encolumnados evolucionamos la clave en cada bloque substituyendo cíclicamente cada carácter de la misma por el XOR (según alfabeto desordenado) con el primer carácter del bloque que vamos a cifrar. Asi, tras el primer bloque tendremos

Clave SXYTCQ
Primer carácter bloque 1 "_", valor 23; 
K(1)=S^_=21^23=2=Y
Nueva clave YXYTCQ
 
Primer carácter bloque 2 ";", valor 12; 
K(1)=X^;=29^12=17=R
Nueva clave YRYTCQ
 
...

 

Descifrado

El descifrado es la operación inversa, aunque hemos de tener en cuenta que los movimientos los hemos de aplicar en estricto orden contrario y con el número de giros complementario, es decir (cara,4-giros). Cargamos pues el cubo con bloques de 54 por caras y filas los valores según el alfabeto modificado de los caracteres del cifrado e invertimos los movimientos del cubo.

Recuperamos entonces el cubo original

cara 0 (frente):    09,19,18,09,19,20,22,27,17
cara 1 (derecha):   19,23,26,22,17,28,23,17,25
cara 2 (trasera):   09,21,12,28,09,31,16,31,24
cara 3 (izquierda): 27,25,24,28,08,18,28,24,31
cara 4 (superior):  10,09,14,20,26,24,28,15,05
cara 5 (inferior):  09,10,14,09,14,02,10,14,31

Volvemos a descomponerlo por subbloques y aplicamos los XOR exactamente igual que en el cifrado obteniendo los valores originales para cada uno.

A[0]=09^19^18^09^19=18
A[1]=19^18^09^19^20=15
A[2]=18^09^19^20^09=21
A[3]=09^19^20^09^19=20
A[4]=19^20^09^19^18=15
A[5]=20^09^19^18^09=21
 
subbloque EN_UN_

Ya sólo hemos de concatenar los subbloques para obtener el texto descifrado

EN_UN_LUGAR_DE_LA_MANCHA_DE_CUYO_NOMBRE_NO_QUIEROSPVUP

 

El reto

como siempre el reto consiste en descifrar un texto de longitud importante que podeis encontrar aquí. La clave es relativamente corta y con texto inteligible.

Como es habitual disponeis de una versión online aquí para poder jugar

A ver si éste os entretiene algunos días más. Ah, en previsión tengo aún en mis criaderos:

  • Gravity: Cifrado por partículas en movimiento en un sistema gravitatorio de 4 masas que se desplazan.
  • Railroad: Cifrado en flujo por llenado de buffers.
  • RC4Lite: versión asequible de RC4.

Uf

¿Qué clase de criatura infernal has creado?. Esto parece un monstruo enorme que casi mata con la mirada. Cada pisada suya hace tambalearse los cimientos. ¿Cómo vamos a poder con ella?. Bueno, veremos qué podemos hacer.

Por otro lado, no me he olvidado de explicar lo que tenía pensado para atacar al CHE, aunque se me complicó un poco la cosa y al final parece que voy a obtener bloques a los que atacar, en lugar de un único bloque... eso si no surgen más complicaciones. A ver si el fin de semana que viene lo puedo publicar.

Hasta el finde que me de

Hasta el finde que me de tiempo a implementarlo, no puedo meterme con él, ya veremos a ver que da de sí. Es muy bueno lo de cubo, en vez de ruedecitas como Enigma, hay darle vueltas a las caras del bicho, mezclando y remezclando...

La puntilla

A mí lo que me da la puntilla es lo de los giros del p. cubo de Rubik, que nunca me aclaré con él. No sé si podré terminar la implementación. Pero no te arrepientas, que ya toca poner algo que no se lo coma Tokamak con sus AGs como si fuera una hamburguesa.

Tanto como atreverme...lo que

Tanto como atreverme...lo que estoy haciendo es implementarlo. Ya lo he conseguido, a falta de ese tejemaneje de "evolucionar la clave",estoy con eso ahora. Me ha venido muy bien para romper el hielo con el Javascript, que nunca me había metido con él. Incluso puse en marcha el IIS para ejecutarlo localmente, me he copiado ahí la página y el script, así que estoy pasando unos buenos ratos con este bicho. Que saque algo ya será otro cantar...

Pero que bestia soy ¡si el javascript funciona del lado del cliente!, estaba obcecado con que era como es asp, que se ejecuta del lado del servidor. No necesito el IIS pa naaaa.

Pues desinstala

Pues desinstala, y luego practícale un par de exorcismos por si acaso, que tiene la mala costumbre de dejar toda clase de restos de la posesión (incluyendo puertos abiertos en el firewall). Y a la chita callando, además, el muy ladino.

--
Yo que sé. No me hagan caso. Lean lo que quieran y analicen. (by Sasha)

Hay un problema en el código Java

Sí, resulta que descifra bien el primer bloque de 54 bytes, pero después depende del contenido del campo TxtClaro para poder descifrar. Campo que puede estar vacío cuando simplemente quieres descifrar un texto. Es la función Evolucionar que me estaba volviendo loco..

function Evolucionar(clave,palfa,i) {
	  var iAi=palfa.indexOf(document.FrmRubik2.TxtClaro.value.substr(i*LB,1));
	  var j=(i-1)%(clave.length);
	  var iKi=palfa.indexOf(clave.substr(j,1));
	  var iCi=iAi^iKi;
       return (clave.substr(0,j)+palfa.substr(iCi,1)+clave.substr(j+1));
    }

Etiqueta java (y otras)

Recordad que podéis utilizar etiquetas como <java>, <c>, etc (en lugar de <code>) para que el código salga coloreado de acuerdo con la sintaxis propia de cada lenguaje.

Hay un recordatorio debajo de los cuadros para enviar comentarios. Es ése que dice:

Puedes resaltar el código fuente mediante las etiquetas siguientes: , <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>, <vb>. Las etiquetas de estilo permitidas son: <foo>, [foo].</blockquote>

Menos mal

Sí: después de intentar hacer funcionar Javascript como ASP, no era capaz de entender el funcionamiento de esa rutina, y una vez cifrado un texto, no era capaz de descifrarlo. Pero visto el astuto comienzo de mi experiencia con Javascript no acababa de reconocer que había un problema con el código, me acabas de quitar un peso de encima. Bien, veamos el nuevo artilugio..

Pues ya lo he implementado, y

Pues ya lo he implementado, y está claro que es un cifrado potente, ya he efectuado un par de intentos con el AG y no he obtenido resultados. La función de coste da resultados caóticos, no hay convergencia, no muestra la bonita curva ascendente que ví en el CHE, iluminado el rostro sólo con la macilenta luz del monitor y entre risotadas maléficas... La clave está bien protegida, así que, si se puede romper, será a partir de un criptoanálisis fino y trabajoso. Quizá Sqrmatrix pueda, yo no me veo capaz, pero ojo, seguiré intentándolo...

Posibilidad

Es posible que haya una vía que puede ser explotada para el ataque mediante un AG o quizá por otras vías: Sí pudiésemos obtener la clave correspondiente a una permutación del alfabeto, tal vez fuese posible atacar este algoritmo igual que se hizo con el CHE, tratándolo como si fuese una simple clave de substitución monoalfabética. Lo primero es comprobar si se puede obtener la clave desde un alfabeto, me pongo a ello.

No acabo de ver viable

No acabo de ver viable obtener la clave a partir del segundo alfabeto modificado. Si por lo menos esto fuera posible habría alguna posibilidad de abrir este cubo, veremos si hay alguna buena idea por ahí, de momento yo estoy seco.

Perdonad mi ausencia. Tenía

Perdonad mi ausencia. Tenía previsto ponerme con este bicho, y con el prometido ataque del CHE, este fin de semana, pero unos imprevistos me lo han impedido.

No me he puesto a mirar este cifrario, y puede que me equivoque en lo que voy a decir. Si los movimientos emulan a un cubo de Rubik de verdad (que puede que no, porque como he dicho, no lo he mirado), nos encontramos con ciertas agrupaciones de letras, ya que lo que se mueven son pequeñas piezas cúbicas, con letras en sus diferentes caras. Así, las esquinas del cubo tendrán 3 letras que siempre permanecerán unidas, independientemente de los movimientos que hagamos, y las piezas que están entre 2 esquinas tendrán 2 letras que siempre permanecerán unidas, independientemente de los movimientos que hagamos. Por otro lado, las piezas centrales contienen una letra, pero seguirán siendo piezas centrales (aunque la posición que ocupen puede cambiar, claro). Es decir, que se hagan los movimientos que se hagan, cada letra tiene un número limitado de posiciones que puede ocupar, dependiendo del tipo de pieza al que pertenezca, y hay ciertos tipos de letras que, además de tener esta limitación de posiciones, también tendrán una limitación de letras con las que estar asociadas. Todo esto, por supuesto, visualizando cada bloque del criptograma como un cubo de Rubik. Las posiciones que ocupen las letras en cada bloque habrá que traducirlas, pero sabemos que ciertos grupos de 3 letras (los que corresponden a las esquinas) tienen la misma asociación que tenían antes de encriptarse el bloque. El problema es determinar a qué esquina pertenecían, y en qué orden estaban (porque la orientación de las piezas puede cambiar, lo que se traduce en un cambio en el orden de las letras). Lo mismo ocurre con las piezas que asocian dos letras.

Bueno, a ver si saco tiempo para ponerme a ello, y a ver si esta observación, que de momento no ayuda demasiado, puede ayudar a alguien.

Edición: Estaría bien identificar las posiciones del bloque que corresponden a cada esquina, a cada pieza entre esquinas, y a cada pieza central. Yo ahora no puedo hacerlo, pero lo haré cuando pueda, si no lo ha hecho alguien antes

Pues tengo algo que sin duda

Pues tengo algo que sin duda tiene que ver con esos agregados de letras recalcitrantes a los movimientos.

Resulta que cifré con la clave SANCHO el documento que Agustín nos propuso para su cifrado XOR. A continuación analicé con Cryptool el resultado

para buscar n-gramas.

Resulta que los dos 5-gramas más abundantes son CQDPP y GCRVS, que concurren cada uno tres veces en el texto. El primero no es interesante, no codifica el mismo texto, ¡pero el segundo sí! en concreto el texto en claro _DE_L

He encontrado más n-gramas en esta prueba, por ejemplo CRVS codifica siempre DE_L

CQJ, codifica el texto ABE, la mayor parte de las veces:

_A_
OR_
ABE
REO
ARA
ABE
REF
RES
_PE
ABE
ABE

CRV, codifica la mayor parte de las veces el trigrama DE_
IGR
DE_
DE_
E_S
OLU
AGU
DE_
A_D
E_M
DE_
DE_
_ER

Otro muy interesante

GCRVSR siempre codifica _DE_LA

Este cubo parece que empieza a presentar alguna grieta..

Hexagramas del reto

Nº Subcadena Frequencia (en %) Frecuencia
1 .UU.OC 0.0017 2
2 ;:R_KI 0.0017 2
3 CHQURW 0.0017 2
4 FRFS;X 0.0017 2
5 GFS:IL 0.0017 2
6 GKWI:K 0.0017 2
7 PV_M@R 0.0017 2
8 SPE@HG 0.0017 2
9 TWVCMU 0.0017 2

Creo que alguno de los dos primeros codifican la misma cadena, y muy probablemente conteniendo el texto "DE_"

¿Rubik to Lite?

Yo aquí si que ya no llego; nunca resolví entero el famoso cubo del Sr. Rubik sin copiar... pero el reto es en sí muy interesante. Recuerdo que ya -Principiante-, anteriormente, había propuesto algo similar aunque mucho más informal:

La canción del pirata
==================
-Principiante- (no verificado) 15 Noviembre 2010 - 1:36pm
________________________________________________
Uso sustitución para empezar(letras principales corresponden al codigo ascii), después de ahí, tomo bloques de 48, cifro de haciendo transformaciones análogas a las del cubo de Rubik, basicamente. Me pueden ayudar...

Y que tú mismo, LlamameX, nos presentaste el 04 de marzo, viernes, del pasado año 2011el Cifrado Koch (Fractal2):

Dada la estrepitosa (y previsible) caida de Fractal1, os presento a Koch (o Fractal2). Un algoritmo que espero sea bastante más terrible que el anterior y que creo mucho más elegante [...] dando vueltas a un algoritmo fractal basado en el cubo de rubik a partir del interesante trabajo de principante (es su nick) aquí [...] me gusta la de Rubik ya que hace depender a cada carácter de sus vecinos...

A ver que dicen los demás; yo creo acertado mantener este reto abierto aunque se abra otro más sencillo por ser una idea más versátil de cara a que, en un futuro, lo podáis continuar con menor fatiga.

Saludos cordiales,

Pedro Fernández
--

Pues antes que bajar el grado

Pues antes que bajar el grado del reto, a lo mejor es preferible dar más pistas. Por ejemplo una de las condiciones que ha de tener un buen cifrado es ser resistente al ataque por texto conocido, una de las debilidades del cifrado matricial Hill, por ejemplo. Por eso proporcionar algún fragmento en claro que contenga el texto cifrado, como hizo sqrmatrix, no debe ser considerado como una devaluación del reto.

Se pueden proporcionar otras pistas, como esa a la que aludías, que algunos somos tan zoquetes que no nos enteramos de la fiesta.

No sé que os parece....

Una pregunta sobre el Rubik2 Lite

Por curiosidad y si puede ser sin entrar en mucha matemática que, mísero de mí, no llegaría a entender; ¿qué pasaría si al cubo le diéramos una numeración diferente? Como, por ejemplo:

           38 39 40
           37 36 41
           44 43 42
 
06 07 08   17 16 15   24 25 26   35 34 33
05 00 01   10 09 14   23 18 19   28 27 32
04 03 02   11 12 13   22 21 20   29 30 31  
 
           47 48 49
           46 45 50
           53 52 51

En lugar de la que tú -junto a las debidas explicaciones de que la numeración podría ser cualquiera aunque habías elegido la que habías elegido por compatibilidad, he creído entender, con el genuíno cubo del Sr. Rubik- tan amablemente nos proporcionaste y vuelvo a poner aquí por comodidad; ¿LlamameX?

Gracias por este interesante reto y cordiales saludos,

Pedro Fernández
--

Imágenes: 

cubo_orig.png

¡Ahá! Rubik2Lite asequible

Gracias LlamameX, cuando tenga un poco más de tiempo intentaré jugar con la implementación que tú mismo has hecho para ver si puedo ir comprendiendo, poco a poco, las matemáticas en que todo se sostiene.

Esta otra numeración acaracolada, por ejemplo:

           44 43 42
           32 31 30
           20 19 18
 
33 21 09   08 07 06   17 29 41  51 52 53
34 22 10   01 00 05   16 28 40  50 45 46
35 23 11   02 03 04   15 27 39  49 48 47  
 
           12 13 14
           24 25 26
           36 37 38

no valdría... ¡claro! porque habría que implementarla, a nivel software, de otra forma.

Aunque no aspiro a llegar ni por asomo a vuestro nivel, ¡entretenido sí que es!

Un saludo y gracias otra vez,

Pedro Fernández
--

Preguntas y dudas

1. ¿Alguien me podría explicar la forma de realizar las operaciones XOR?
A mi 18^15^21^20^15=09 siempre me sale 19

    Primer subbloque EN_UN_
    valores 18,15,21,20,15,21
 
    Operaciones XOR
    C[0]=18^15^21^20^15=09
    C[1]=15^21^20^15^21=19
    C[2]=21^20^15^21^18=18
    C[3]=20^15^21^18^15=28
    C[4]=15^21^18^15^21=19
    C[5]=21^18^15^21^20=20

2.Si vamos llenando la caras por filas, el valor (1,4) = C[3] ¿no debería ser 28?

Con esos valores llenamos 6 pastillas del cubo. Para las siguientes 6 usaremos el segundo subbloque XOReado. Seguimos hasta llenar el cubo. Tendremos llenando las caras por filas:

    cara 0 (frente): 09,19,18,09,19,20,22,27,17
    cara 1 (derecha): 19,23,26,22,17,28,23,17,25
    cara 2 (trasera): 09,21,12,28,09,31,16,31,24
    cara 3 (izquierda): 27,25,24,28,08,18,28,24,31
    cara 4 (superior): 10,09,14,20,26,24,28,15,05
    cara 5 (inferior): 09,10,14,09,14,02,10,14,31

Un saludo para todos

Vale. Antes de nada ..

Vale. Antes de nada voy a probar con una implementración de mi mata-mata (casi) todo, pero para no tirarme analizando claves de diferente longitud muchos años, quiero verificar que es capaz de resolver un rubik-lite con clave de longitud 8 ¿puedes ponerme un texto cifrado así?

Fíjate lo que he obtenido,

Fíjate lo que he obtenido, aunque ha sido difícil:

.GHTOPOLUCIO.BBLZUVATYYOC,RJA,RUZÑ:KAVQ,DBSH_EN_ÑY:EQKL..HNIDE_EN_:TLU,LCMZ,L.JVLNVNJSL,HA_WOIBESRAEL_IBWMIOUKKK:NENTE_YBNWILOOÑKQUBERSGY_YB::Ñ:E.UMTF_SE_MUSMPPSP

Por los trozos que se vislumbran:
OLUCIO
IBESRAEL

Supongo que es el texto de Rodolfo Walsh que nos puso Agustín para su cifrado, de otra manera hubiera sido imposible sacar nada con eso. ¿Estoy en lo cierto?

Estás en lo cierto

Creo que estás en lo cierto, porque las posiciones de esos dos fragmentos coinciden exactamente con las que tienen en el texto de Walsh. Sólo tú, con tus diabólicos AGs podías enfrentarte a ese monstruo.

Por cierto ¿Hbéis leído el artículo de Walsh? Es un estudio magnífico y veraz sobre el auténtico problema de Oriente Medio, causa de los terrorismos y conflictos que se nos tragarán a todos.

Hola, pues la función de

Hola, pues la función de convergencia es la que utilizo siempre: con cada clave que prueba, el AG utiliza una implementación de Rubik-Lite para descifrar con ella los dos primeros bloques del cifrado. A continuación calcula las frecuencias de monogramas, bigramas y trigramas de ese texto en claro y las compara con las frecuencias de monogramas, bigramas y trigramas de un texto de referencia, y saca el error cuadrático entre ellas, eso es lo que hay que minimizar, con lo que hacemos converger (muy poco en este caso, como en FOTP, lo que me da esperanzas) la población de claves (eso son los cromosomas, un montón de claves inicialmente aleatorias) hacia la solución.

El texto era irreconocible. Frecuentemente se atisban posibles combinaciones de palabras, que en 99% de los casos son pura casualidad. Porque conocía el texto, si no seguramente hubiese pasado por alto esas pistas.

Si la clave es mucho más larga, me parece que mi mata-mata será como un insecticida contra un elefante...

Páginas

opinar

Texto puro

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
By submitting this form, you accept the Mollom privacy policy.