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.

Enhorabuena por encontrar la solución al Reto.

La verdad es que ustedes juegan en otra liga, jeje... he estao atento a casi todos los comentarios y cuando se ha publicado la solución, me sorprende la facilidad con la que exponen los resultados y es muy divertido observar que una vez descubren las debilidades entre todos aportan sus ideas y pareciese que la solución aparece por si sola... aunque es evidente que hay un esfuerzo y una labor ardua para finalmente paso a paso vencer el algoritmo o reto propuesto.

Lo dicho, enhorabuena por encontrar la solución al reto!!

PD: A los que somos nuevos aquí en kriptopolis, está claro que no es suficiente con unos conocimientos básicos y lo que para algunos con experiencia es trivial, para otros nos cuesta incluso entender. Por ejemplo, me resultó increíble que el usuario 'Agustín' pudo dar una solución con el aporte que ofreció 'LlamameX' en sus últimas ecuaciones. Para un lector no avezado, a veces da la sensación de que cada uno de los usuarios aportan comentarios que no tienen relación y cuando empiezan a aprovechar las vulnerabilidades, todo empieza a cuadrar como por arte de magia y de forma metódica se fragua una cooperación mutua. Bueno finalmente, animar a los que domináis las técnicas y métodos que se explican y aplican en los retos, para que en la medida de lo posible utilicéis un lenguaje no excesivamente técnico y que sepáis que algunos agradecemos toda la información extra que publicáis y que nos ayuda a, por lo menos, disfrutar y entender los retos que se publican. Salu2 y a seguir bien!!

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

Muchas gracias

Muchas gracias por tu estimulante comentario.

También en el grupo de los que jugamos a estas cosas hay varias ligas, porque algunos como LlamemeX, sqrmatrix y otros, juegan en la Premier, mientras que otros como yo, somos simples aficionados que, eso sí, vamos aprendiendo de nuestros "mayores". De hecho, si siguieras la trayectoria de los retos que se han ido planteando -y a veces resolviendo- desde unos años hacia acá, verías un gratificante aumento de nivel.

Es cierto que los atacantes, aunque tienen enfoques muy personales y diferentes, parecen funcionar como un equipo, y esto ocurre básicamente porque toda la información se comparte. Nadie se guarda hallazgos parciales para conseguir una victoria personal, sino que nos lo contamos todo, todo el rato. Y, desde luego, nos lo pasamos muy bien agitando las neuronas en un magnífico ambiente de camaradería.

No te extrañes si a veces no entiendes lo que se dice, porque cuando los de la Premier League se lanzan, tampoco todos les entendemos.
Pero todo es ponerse. Cuando LlamameX publicó la tabla de los XOR entre las dos claves, pude aprovecharlo porque yo había encontrado unos candidatos para las cuatro primeras letras de la clave par y los dos primeros de la clave impar, y fue como si alguien hubiera encendido la luz dentro de un túnel, porque podía probar cuáles de esos candidatos cumplían con esas ecuaciones "milagrosamente" obtenidas por él, y además, podía hallar algunas de las letras que faltaban. Si no estás metido en la brega puede parecer un milagro, pero en realidad son pasos lógicos.

Un cordial saludo.

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.