Foros:
Por LlamameX
Como os veo ociosos ahí va mi venganza.
RUBIK2

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.

Ya he vuelto a la carga otra
Ya he vuelto a la carga otra vez con este reto. He tenido un montón de trabajo y, a la vuelta, me he topado en internet con un desafío basado en una de mis debilidades: la máquina de cifrado Hagelin M-209, la maravilla de las maravillas, tan práctica que permitía cifrar en medio del fregado de un combate poniéndola encima de la rodilla, no sé por qué tiene tanta fama ese trasto inútil de Enigma. Sólo he resuelto el 1 el 3 y el 5 si alguien puede poner ahí alguna banderita, sería buena cosa, yo ya lo dejé por imposible.
Bueno, pues perdón por el excurso y ya me vuelvo a poner con Rubik2....
Ya te veo
Ya te veo en el cuadro de honor. Desde luego, tu capacidad para encontrar desafíos es casi tan grande como tu habilidad para resolverlos.
Bienvenido de vuelta
Me miro también esos desafíos, a ver si pillo algo.
Hola de nuevo, y si vas a
Hola de nuevo, y si vas a mirar algo de la Hagelin, te será de utilidad el documento sobre criptoanálisis de esa familia de máquinas que dan como ayuda en el desafío 10
Pero no nos dispersemos, que aquí hay tela que cortar...
Aunque consigo algunos parcos
Aunque consigo algunos parcos resultados (creo que en los primeros 54 caracteres aparece la palabra CIEGO) , nada que me permita resolver el problema, así que en los próximos días voy a hacer caso de la sugerencia de Agustín y voy a soltar EL GRIAL.
Si lo he hecho bien, sin cometer ninguna pifia, creo que será algo prácticamente definitivo, además del más simple de los que he hecho. Son 4 líneas de programa, pero apocalípticas...
...y el cielo será retirado como un libro que se enrolla, y todos los montes y las islas serán removidos de sus asientos y los reyes de la tierra, los magnates, los tribunos, los ricos, los poderosos, y todos, esclavos o libres, se ocultarán en las cuevas y en las peñas de los montes.
Y dirán a los montes y las peñas: Caed sobre nosotros y ocultadnos de la vista del que está detrás del algoritmo porque ha llegado el Gran Día de su cólera y ¿quién podrá sostenerse?
Entre tanto seguiré pegando giros al cubo gñññññ arf....
Se diría
Se diría que aún te dura el efecto del cava de estas pasadas fiestas (aquí en la clínica nos dieron, para nuestro alborozo, gaseosa). Ya puede ser fuerte el Grial, ya, que LlamameX (y sqrmatrix, si aparece) le encontrará un cositón donde tú no puedas imaginártelo. Esa es mi triste experiencia hasta la fecha.
Por otra parte, salvo que se trate de una casualidad, si has encontrado una palabra, es que debes estar en el buen camino para destripar el Rubik. Yo no he podido ni implementarlo.
Páginas
opinar