Ir al contenido principal

Criptografía (CXC): Solución Reto 38

Solución al último reto de criptografía que he puesto en este blog y que hacía referencia al método de cifrado OTP, y, en la medida que éste se implemente correctamente, al secreto perfecto.

El enunciado del reto decía lo siguiente: El otro día un amigo mío me dijo que había estado leyendo sobre el cifrado OTP (del inglés ‘one-time pad’) o libreta de un solo uso y me comentó que, por lo que había entendido, este método proporciona lo que se llama el secreto perfecto, es decir, el criptograma es indescifrable si no se conoce la clave de cifrado. Yo le contesté: Depende…; lo que pareció no sentarle muy bien y no continuó hablando sobre el tema. Algunos días después recibí un correo electrónico de mi amigo en el que me decía lo siguiente: “como eres 'muy listo', te envío los dos siguientes criptogramas cifrados con OTP a ver si eres capaz de: descifrarlos, obtener la clave y decirme cuál es la solución a este reto, y como estoy seguro de que no vas a poder resolver este desafío, te doy una pista: SECRETO PERFECTO".

Y como recurso asociado al reto se proporcionaba el siguiente: criptogramas.txt.

Solución: Antes de poner la solución al reto conviene recordar en qué consiste el método de cifrado OTP y qué condiciones deben reunirse para que se pueda decir que éste presenta las características propias de lo que Claude Shannon llamó secreto perfecto.

En el cifrado OTP la clave (K) debe tener una longitud igual o superior al texto en claro a cifrar (M) y el criptograma (C) se obtiene realizando la siguiente operación ⊕ (XOR):
C = M ⊕ K

Para descifrar el criptograma (C) el receptor utilizaría la misma clave (K) para obtener el texto en claro (M), de la siguiente forma:
M = C ⊕ K

Por otra parte, para que se pueda hablar de secreto perfecto el criptograma no debe proporcionar absolutamente ninguna información acerca del texto en claro, es decir, dado un  texto cifrado todos los textos en claro posibles tienen que ser equiprobables, y para ello no hay que perder de vista que su implementación debe considerar necesariamente los siguientes tres requisitos esenciales con respecto a la clave de cifrado (K):

- Tal y como ya he indicado: debe tener, al menos, la misma longitud que el mensaje a cifrar.

- Debe ser perfectamente aleatoria.

- Nunca debe reutilizarse, ni total ni parcialmente, y, evidentemente, debe permanecer en el más estricto secreto (intercambio seguro y eliminación confidencial tras su uso).
  
Volviendo al reto, por el correo que me envió mi amigo parece ser que, primero, efectivamente no le sentó muy bien mi comentario - ya que me dice: “como eres ‘muy listo’, …” :) - y, segundo, que no tiene muy claro por qué este método de cifrado se llama OTP (‘one-time pad’), porque si, como parece, ha utilizado la misma clave para cifrar ambos mensajes (“a ver si eres capaz de: descifrarlos, obtener la clave y …”) ha dejado abierta la puerta al criptoanálisis y, por tanto, de secreto perfecto nada de nada.

Es decir, en el caso de que se cometa el error de reutilizar la clave, un criptoanalista que se haga con dos criptogramas cifrados con la misma clave puede obtener los textos en claro correspondientes sin demasiados problemas utilizando la técnica ‘crib dragging’.

Pero, ¿cómo?. Si se utiliza la misma clave (K) para cifrar dos textos en claro (M1 y M2) resulta que:
- C1 = M1 ⊕ K
- C2 = M2 ⊕ K

Si hago XOR de ambos criptogramas (C1 y C2):
C1 ⊕ C2 = M1 ⊕ K ⊕ M2 ⊕ K = M1 ⊕ M2

Con lo que, con independencia de la clave utilizada (K), si voy deduciendo o infiriendo partes de uno u otro de los textos en claro (‘cribs’) iré obteniendo las partes correspondientes del otro mensaje en claro.

En resumen, como creo que mi amigo ha reutilizado la clave, para atacar este cifrado y descubrir los mensajes en claro correspondientes a ambos criptogramas se puede actuar de la siguiente manera:

1.- Realizar la operación ⊕ de los dos criptogramas.

2.- Intentar deducir parte de un palabra, una palabra completa o varias palabras que probablemente aparezca/n en uno de los dos textos en claro y codificar la parte inferida (‘crib’) como una cadena hexadecimal (los criptogramas dados están codificados en hexadecimal).

3.- Realizar la operación ⊕ de la ‘crib’ en hexadecimal a partir de la primera posición del resultado de la operación ⊕ realizada a los dos criptogramas.

3.1.- Si el resultado obtenido es un texto legible puedo pensar que, efectivamente, la ‘crib’ empleada aparece en uno de los textos en claro y que he obtenido la parte del texto en claro correspondiente a ésta en el otro texto en claro, e intento adivinar otra ‘crib’ repitiendo el punto 3.

3.2.- Si el resultado no es un texto legible, realizo una operación ⊕ de la ‘crib’ en hexadecimal a partir de la siguiente posición del resultado de la operación ⊕ realizada a los dos criptogramas.
Para llevar a cabo todo lo anterior recomiendo utilizar la siguiente herramienta de ‘crib dragging’ interactiva:

C1 ⊕ C2:
Deducir una 'crib', es decir, parte de un palabra, una palabra completa o varias palabras que probablemente aparezca/n en uno de los dos textos en claro, con la que se obtenga un texto legible en las mismas posiciones del otro texto en claro, y repetir este proceso con las 'cribs' que sean necesarias hasta obtener los textos en claro correspondientes a los dos criptogramas.

Crib = "SECRETO PERFECTO":
Crib = "EL SECRETO PERFECTO":
Crib = "CIFRAR":
Crib = "CRIPTOGRAMA":
Crib = "EL SECRETO PERFECTO SE PRODUCE CUANDO EL TEXTO":
Y así sucesivamente; ir adivinando más partes de palabras, palabras completas y/o varias palabras que probablemente aparezca/n en uno de los dos textos en claro hasta conseguir descifrar ambos criptogramas, ejercicio que dejo a quien esté interesado en resolver completamente este reto y/o en el manejo de la herramienta utilizada.

Y, finalmente, a medida que se vayan descifrando los dos criptogramas o una vez descifrados completamente ambos se puede ir obteniendo la clave de cifrado parcial o totalmente, respectivamente, sin más que realizar la operación ⊕ entre la parte hallada de uno de los dos textos en claro y la misma parte del criptograma correspondiente. Ejemplo:
Con lo que la solución a este reto, que está en la clave, es: CLAUDE_SHANNON.

******** PRÓXIMO RETO
Reto 39:   "Geheim!".

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im