sábado, 16 de diciembre de 2017

Criptografía (LXXVI): Reto 8

En este post un reto de dificultad media, en esta ocasión sobre esteganografía.

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. Pasado un tiempo iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 8: "Aficiones que reúnen".

Hay aficiones que reúnen a la gente en el sentido que promueven que ésta se junte físicamente para realizar actividades propias de las mismas. En mi caso, yo comparto con un amigo la afición por el ajedrez y solemos enviarnos vía e-mail problemas para que el otro los resuelva. No obstante, aunque lo hacemos a distancia, en nuestro caso también nos sirve para juntarnos, ya que solemos aprovechar para mandarnos un mensaje oculto en el correo electrónico que indica la fecha, hora y lugar donde quedaremos para vernos la próxima vez. Supón que interceptas o tienes acceso al e-mail asociado al reto, ¿me puedes decir cuándo y dónde hemos quedado mi amigo y yo?. 

Dificultad:
Tipo:          Esteganografía.

Recursos:  - El siguiente texto del correo electrónico enviado a mi amigo con fecha 16/12/2017 a las 20:56.

Hola:

Blancas juegan y dan mate en dos movimientos:
Como siempre, tienes una semana para resolverlo :).

Un abrazo,


Mikel


******** 18/12/2017
Pista 1:     Suelo procurar que el título del reto, además de tener la lógica relación con el mismo, proporcione también alguna pista para su resolución. En este caso podría haber hecho esto último más evidente si hubiera escrito el título así: "Aficiones Que Reúnen". ¿Ves algo raro en el código QR que figura en la firma del correo electrónico?.

******** __/__/____
Pista 2:     Por publicar.

******** __/__/____
Pista 3:     Por publicar.

******** __/__/____
Solución:  Por publicar.

******** PRÓXIMO RETO
Reto 9:     Por publicar.

lunes, 11 de diciembre de 2017

Criptografía (LXXV): Reto 7

En esta ocasión un reto difícil sobre criptografía en el que se ve involucrada la máquina de cifrado más famosa del siglo XX; la máquina Enigma utilizada por el ejército alemán en la II Guerra Mundial.

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. Pasado un tiempo iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 7: "Descifrando Enigma".

Amanece en Bletchley Park, sede de la Escuela Gubernamental de Códigos y Cifras de Gran Bretaña ("Government Code and Cypher School, GC&CS"), pero la actividad es ya frenética. La red de interceptación para capturar el tráfico de mensajes cifrados de los alemanes está a pleno rendimiento y los británicos sólo disponen de un día para obtener la clave con la que descifrar los mensajes del ejército alemán y poder así anticiparse a sus movimientos, ya que ésta cambia diariamente. El método de criptoanálisis ideado por Alan Turing, basado en que una letra no puede cifrarse como sí misma y en la previsión (suposición) de parte de los contenidos de los mensajes transmitidos por los alemanes, y su implementación  mediante la bomba de Turing están demostrando una alta eficacia para obtener la clave de cada día y, en consecuencia, para poder descifrar todos los mensajes alemanes de ese mismo día, pero hay que darse prisa, muchas vidas corren un grave riesgo, y el éxito o fracaso depende en gran medida de que todo el mecanismo de interceptación y descifrado opere de forma sincronizada y eficiente. Supón que durante la II Guerra Mundial trabajas en Bletchley Park y te llega un parte metereológico cifrado en el que encajas la "crib" ("WETTER VORHER SAGE", texto en claro que significa algo así como "PRONÓSTICO DEL TIEMPO" en alemán) en el criptograma (ver recursos asociados al reto), ¿Puedes decirme cuál es la clave que el ejercito alemán está utilizando para cifrar todos los mensajes de hoy (rotores empleados y su orden, el ajuste de los anillos y las conexiones de letras en el tablero de clavijas)?. 

Dificultad:
Tipo:          Criptografía.

Recursos:  - Criptograma: ...QQVWHKXFVWKBOKKA...

                  - "Crib":           ...WETTERVORHERSAGE...

                  - Simulador Bomba de Turing.


******** 13/12/2017
Pista 1:     Configura los paneles frontal y posterior del simulador de la bomba de la forma que se indica en los siguiente gráficos, respectivamente. Puedes utilizar las tres baterías de codificadores disponibles para probar un orden de los rotores diferente en cada una de ellas, pero para simplificarlo un poco utiliza sólo la batería superior (ya te adelanto que el orden correcto de los rotores en nuestro reto es I-II-III), activa el interruptor de la letra "A" correspondiente a la batería superior que se encuentra en el lateral derecho y pon en marcha la bomba.
******** 18/12/2017
Pista 2:     Si has configurado correctamente la bomba, tras un breve tiempo en marcha, el simulador se parará mostrando un posible ajuste de los anillos e indicará la letra del tablero de clavijas que estaría conectada con la letra central que hemos elegido ("E"). Ya adelanto que esta parada es correcta y, por tanto, tenemos ya parte de la clave con la que los alemanes están cifrado todos los mensajes de hoy (rotores empleados y su orden, el ajuste de los anillos y una de las conexiones establecidas en el tablero de clavijas). El siguiente paso es obtener el resto o mayor número posible de las conexiones en el tablero de clavijas y comprobar que la clave hallada hasta el momento puede ser correcta, que como ya he dicho lo es. Para ello utiliza la máquina de comprobación ("checking machine") del simulador.

******** __/__/____
Pista 3:     Por publicar.

******** __/__/____
Solución:  Por publicar.

******** PRÓXIMO RETO
Reto 8:     "Aficiones que reúnen".

viernes, 8 de diciembre de 2017

Criptografía (LXXIV): El algoritmo MD5

En este post comparto lo que voy aprendiendo sobre el algoritmo MD5 (Message Digest 5), una función resumen que produce un valor hash de 128 bits.

Este Algoritmo fue diseñado por Ronald Rivest en 1991 para reemplazar a su función hash predecesora, MD4.

MD5 procesa un mensaje de longitud variable dando como resultado un hash o resumen con una longitud fija de 128 bits.

Veamos como funciona este algoritmo, si lo he entendido bien, poniendo un ejemplo:

Mensaje de entrada "Mikel":

01001101 01101001 01101011 01100101
01101100
Longitud = 40 bits.

1.-  El mensaje de entrada se extiende de la siguiente manera:

1.1.- Se añade un bit "1" al final del mensaje.

01001101 01101001 01101011 01100101
01101100 1
Longitud = 41 bits.

1.2.- Se añaden bits "0" hasta que la longitud del mensaje sea de 64 bits menos que un múltiplo de 512 (en nuestro caso hasta 448).

01001101 01101001 01101011 01100101
01101100 10000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
Longitud = 448 bits.

Según lo que he entendido, hay que tener en cuenta que en cada byte los bits se sitúan, de izquierda a derecha, del más significativo al menos significativo, mientras en cada palabra de 32 bits los bytes se sitúan, de izquierda a derecha, del menos significativo al más significativo, es decir:

01100101 01101011 01101001 01001101
00000000 00000000 10000000 01101100
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
Longitud = 448 bits.

2.- Los 64 bits restantes hasta completar una longitud de un múltiplo de 512 (en nuestro caso hasta 512) se rellenan con la longitud del mensaje de entrada original módulo 264 (en nuestro caso tiene una longitud de 40 bits = 00101000). Es decir, la longitud se añade en dos palabras de 32 bits cada una de ellas, primero la palabra menos significativa:

01100101 01101011 01101001 01001101
00000000 00000000 10000000 01101100
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00101000
00000000 00000000 00000000 00000000
Longitud = 512 bits.

3.- Se utilizan cuatro palabras (A, B, C y D) de 32 bits cada una de ellas para calcular el hash o resumen del mensaje y que se inicializan con las siguientes constates fijas (en cada palabra, de izquierda a derecha, del byte menos significativo al más significativo):

A = 01 23 45 67 = 00000001 00100011 01000101 01100111
B = 89 ab cd ef  = 10001001 10101011 11001101  11101111
C = fe dc ba 98  = 11111110  11011100  10111010 10011000
D = 76 54 32 10 = 01110110 01010100 00110010 00010000

4.- A continuación, el algoritmo emplea cada uno de los bloques de 512 bits del mensaje, después de que el mensaje de entrada original haya sido extendido y se haya completado con la longitud del mismo, para modificar esas cuatro palabras y obtener el hash o resumen.

El procesamiento de cada bloque del mensaje (en nuestro caso sólo 1) se realiza en cuatro rondas o vueltas compuestas de 16 operaciones cada una de ellas. En la figura siguiente se representa de forma gráfica una de las 64 operaciones de las que consta el procesamiento de cada bloque:
Donde:

F: función no lineal. Se utiliza una diferente para cada ronda o vuelta:

1ª ronda o vuelta (0 ≤ i  15):    F(B, C, D) = (B and C) or ((not B) and D).
2ª ronda o vuelta (16 ≤ i ≤ 31):  G(B, C, D) = (B and D) or (C and (not D)).
3ª ronda o vuelta (32 ≤ i ≤ 47):  H(B, C, D) = (B xor C xor D).
4ª ronda o vuelta (48 ≤ i ≤ 63):   I(B, C, D) = C xor (B or (not D)).

Mg: una palabra de 32 bits del bloque de 512 bits que se está procesando:

1ª ronda o vuelta (0 ≤ i  15):    g = i.
2ª ronda o vuelta (16 ≤ i ≤ 31):  g = (5 x i + 1) mod 16.
3ª ronda o vuelta (32 ≤ i ≤ 47):  g = (3 x i + 5) mod 16.
4ª ronda o vuelta (48 ≤ i ≤ 63):  g = (7 x i) mod 16.

Ki: constante de 32 bits . Se utiliza una diferente para cada una de las 64 operaciones:

K [0 .. 3]:   = {d76aa478, e8c7b756, 242070db, c1bdceee}
K [4 .. 7]:   = {f57c0faf, 4787c62a, a8304613, fd469501}
K [8..11]:   = {698098d8, 8b44f7af, ffff5bb1, 895cd7be}
K [12..15]: = {6b901122, fd987193, a679438e, 49b40821}
K [16..19]: = {f61e2562, c040b340, 265e5a51, e9b6c7aa}
K [20..23]: = {d62f105d, 02441453, d8a1e681, e7d3fbc8}
K [24..27]: = {21e1cde6, c33707d6, f4d50d87, 455a14ed}
K [28..31]: = {a9e3e905, fcefa3f8, 676f02d9, 8d2a4c8a}
K [32..35]: = {fffa3942, 8771f681, 6d9d6122, fde5380c}
K [36..39]: = {a4beea44, 4bdecfa9, f6bb4b60, bebfbc70}
K [40..43]: = {289b7ec6, eaa127fa, d4ef3085, 04881d05}
K [44..47]: = {d9d4d039, e6db99e5, 1fa27cf8, c4ac5665}
K [48..51]: = {f4292244, 432aff97, ab9423a7, fc93a039}
K [52..55]: = {655b59c3, 8f0ccc92, ffeff47d, 85845dd1}
K [56..59]: = {6fa87e4f, fe2ce6e0, a3014314, 4e0811a1}
K [60..63]: = {f7537e82, bd3af235, 2ad7d2bb, eb86d391}

Si: número de bits a rotar circularmente a la izquierda:

S [0..15]:   = {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
S [16..31]: = {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
S [32..47]: = {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
S [48..63]: = {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}


Finalmente, espero no equivocarme mucho, completo algunas de las operaciones por ronda o vuelta hasta obtener el hash o resumen de nuestro ejemplo (mensaje de entrada "Mikel"):

- Valores iniciales de A, B, C y D (de izquierda a derecha, del byte más significativo al menos significativo):

A = 67452301 = 01100111  01000101 00100011 00000001
B = efcdab89  =  11101111  11001101 10101011 10001001
C = 98badcfe  = 10011000 10111010 11011100  11111110
D = 10325476 = 00010000 00110010 01010100 01110110

- Procesamiento del primer y único bloque de 512 bits del mensaje:

Palabra 0 (M0):    01100101 01101011 01101001 01001101
Palabra 1 (M1):    00000000 00000000 10000000 01101100
Palabra 2 (M2):    00000000 00000000 00000000 00000000
Palabra 3 (M3):    00000000 00000000 00000000 00000000
Palabra 4 (M4):    00000000 00000000 00000000 00000000
Palabra 5 (M5):    00000000 00000000 00000000 00000000
Palabra 6 (M6):    00000000 00000000 00000000 00000000
Palabra 7 (M7):    00000000 00000000 00000000 00000000
Palabra 8 (M8):    00000000 00000000 00000000 00000000
Palabra 9 (M9):    00000000 00000000 00000000 00000000
Palabra 10 (M10): 00000000 00000000 00000000 00000000
Palabra 11 (M11): 00000000 00000000 00000000 00000000
Palabra 12 (M12): 00000000 00000000 00000000 00000000
Palabra 13 (M13): 00000000 00000000 00000000 00000000
Palabra 14 (M14): 00000000 00000000 00000000 00101000
Palabra 15 (M15): 00000000 00000000 00000000 00000000

Primera ronda o vuelta:

i = 0

       11101111110011011010101110001001      (B)
and 10011000101110101101110011111110      (C)
------------------------------------------------------
       10001000100010001000100010001000    (B and C)                                     
or    00010000001100100101010001110110    ((not B) and D)
------------------------------------------------------
        10011000101110101101110011111110     F(B, C, D) = (B and C) or ((not B) and D)
        01100111010001010010001100000001    (A)
        01100101011010110110100101001101    (g = i = 0: M0).
+      11010111011010101010010001111000    (K0 = d76aa478)
------------------------------------------------------
        00111100110101100000110111000100
------------------------------------------------------
        01101011000001101110001000011110     (S0 = 7: Rotación circular 7 bits a izq.)
+      11101111110011011010101110001001     (B)
------------------------------------------------------
        01011010110101001000110110100111     (B')
------------------------------------------------------
        00010000001100100101010001110110     (A = D: La palabra D pasa a ser la A)
        10011000101110101101110011111110      (D = C: La palabra C pasa a ser la D)
        11101111110011011010101110001001      (C = B: La palabra B pasa a ser la C)
        01011010110101001000110110100111     (B = B': B' pasa a ser la palabra B)

i = 1

       01011010110101001000110110100111     (B)
and  11101111110011011010101110001001     (C)
------------------------------------------------------
       01001010110001001000100110000001    (B and C)                                   
or    10000000001010100101000001011000    ((not B) and D)
------------------------------------------------------
        11001010111011101101100111011001     F(B, C, D) = (B and C) or ((not B) and D)
        00010000001100100101010001110110    (A)
        00000000000000001000000001101100    (g = i = 1: M1)
+      11101000110001111011011101010110     (K1 = e8c7b756)
------------------------------------------------------
        11000011111010010110011000010001
------------------------------------------------------
        10010110011000010001110000111110     (S1 = 12: Rotación circular 12 bits a izq.)
+      01011010110101001000110110100111     (B)
------------------------------------------------------
        11110001001101011010100111100101      (B')
------------------------------------------------------
        10011000101110101101110011111110      (A = D: La palabra D pasa a ser la A)
        11101111110011011010101110001001      (D = C: La palabra C pasa a ser la D)
        01011010110101001000110110100111     (C = B: La palabra B pasa a ser la C)
        11110001001101011010100111100101     (B = B': B' pasa a ser la palabra B)

i = ...

         ...

i = 15

       00000001100000000000110001010100    (B)
and  01100010110000001011100101011110    (C)
------------------------------------------------------
       00000000100000000000100001010100    (B and C)                                   
or    00001100011000010001001000101001    ((not B) and D)
------------------------------------------------------
        00001100111000010001101001111101     F(B, C, D) = (B and C) or ((not B) and D)
        00000011110100100100111010101101     (A)
        00000000000000000000000000000000    (g = i = 15: M15)
+      01001001101101000000100000100001    (K15 = 49b40821)
------------------------------------------------------
        01011010011001110111000101001011
------------------------------------------------------
        01010010110101101001100111011100     (S15 = 22: Rotación circular 22 bits a izq.)
+     00000001100000000000110001010100     (B)
------------------------------------------------------
        01010100010101101010011000110000    (B')
------------------------------------------------------
        00001101011000010001011001101001    (A = D: La palabra D pasa a ser la A)
        01100010110000001011100101011110     (D = C: La palabra C pasa a ser la D)
        00000001100000000000110001010100    (C = B: La palabra B pasa a ser la C)
        01010100010101101010011000110000    (B = B': B' pasa a ser la palabra B)

Segunda ronda o vuelta:

i = 16

         ...

i = ...

         ...

i = 31

Tercera ronda o vuelta:

i = 32

         ...

i = ...

         ...

i = 47

Cuarta ronda o vuelta:

i = 48

         ...

i = ...

         ...

i = 63

        11100100110101100010001010001101   (C)
xor   00110111111011101111111111001101     (B or (not D))
------------------------------------------------------
        11010011001110001101110101000000    I(B, C, D) = C xor (B or (not D)
        11010111111000010001000001110110    (A)
        00000000000000000000000000000000   (g = (7 x i) mod 16 = 9: M9)
+      11101011100001101101001110010001    (K63 = eb86d391)
------------------------------------------------------
        10010110101000001100000101000111
------------------------------------------------------
        00101000111100101101010000011000    (S63 = 21: Rotación circular 21 bits a izq.)
+      00000111111010100110011110000100    (B)
------------------------------------------------------
        00110000110111010011101110011100     (B')
------------------------------------------------------
        11001000000100010110010100110010    (A = D: La palabra D pasa a ser la A)
        11100100110101100010001010001101    (D = C: La palabra C pasa a ser la D)
        00000111111010100110011110000100     (C = B: La palabra B pasa a ser la C)
        00110000110111010011101110011100     (B = B': B' pasa a ser la palabra B)

Actualización final A, B, C y D del bloque de 512 bits procesado
------------------------------------------------------------------------------------------------------------------
     67452301 efcdab89  98badcfe 10325476      Valores iniciales A, B, C y D
+   c8116532 30dd3b9c 07ea6784 e4d6228d     Valores finales (i= 63) A, B, C y D
------------------------------------------------------
     2f568833 20aae725  a0a54482 f5087703

Valor hash o resumen del bloque de 512 bits procesado

En cada palabra de 32 bits, de izquierda a derecha, del byte menos significativo al más significativo:

      3388562f 25e7aa20 8244a5a0 037708f5

Como en nuestro ejemplo tenemos un único bloque de 512 bits, éste será el valor hash o resumen del mensaje de entrada: 3388562f25e7aa208244a5a0037708f5.

viernes, 1 de diciembre de 2017

Jornada: El RGPD en los centros públicos de Formación Profesional

El pasado miércoles, 29 de noviembre de 2017, tuve nuevamente la oportunidad de participar, como asociado de PRIBATUA (Asociación Vasca de Privacidad y Seguridad de la Información / Pribatutasun eta Informazio Segurtasuneko Euskal Elkartea), en otra Jornada sobre protección de datos: "EL RGPD en los centros públicos de Formación Profesional", organizada por Ikaslan Bizkaia y que tuvo lugar en el CIFP Bidebieta LHII de Basauri.

En esta ocasión contamos también con la participación de la Agencia Vasca de protección de datos (AVPD) para tratar de transmitir las novedades que traerá el nuevo reglamento europeo de protección de datos a partir del 25 de mayo de 2018, fecha a partir de la cual será de aplicación en todos los estados miembros de la Unión Europea.
Fue un verdadero placer compartir un rato para hablar sobre este tema con Directores y Docentes de Centros Públicos de FP de Bizkaia.

viernes, 24 de noviembre de 2017

Criptografía (LXXIII): Solución Reto 6

El  enunciado del sexto reto que puse en este post era el siguiente: "Allá por el siglo IX, Al-Kindi, un filósofo árabe, fue el primero que se dio cuenta, o al menos que lo documentó, de que se podía atacar un texto cifrado mediante la estadística del lenguaje en el que estuviera escrito el texto en claro, ya que ciertas características del mismo se trasladaban al criptograma. Por ello, entiendo que podría ser considerado como el padre del criptoanálisis e incluso como el primer "hacker" de la historia. El análisis de frecuencias consiste, básicamente, en estudiar la frecuencia de aparición en el criptograma de caracteres o símbolos y de grupos de ellos (de ahí el título de este reto) con relación a la frecuencia de las letras y grupos de éstas en el lenguaje en el que esté escrito el texto en claro. ¿Puedes descifrar el criptograma asociado al reto utilizando el análisis de frecuencias?".

Este reto es de criptografía y su solución es:

1.- La frecuencia de aparición (número y porcentaje) de los símbolos que se observa en el criptograma y, por otra parte, la frecuencia de aparición de las letras (porcentaje) en el idioma español son las siguientes:
Esto nos da una pista muy importante sobre qué símbolos del criptograma pueden corresponderse con las letras del texto en claro:

1.1.- Los candidatos a ser las dos letras más frecuentes en español ("E" y "A") son fácilmente reconocibles con un análisis de frecuencias de los símbolos, ya que son las que presentan una significativa mayor frecuencia de aparición en dicho idioma, por lo que vamos a establecer la hipótesis inicial de que los dos primeros símbolos con mayor frecuencia de aparición en el criptograma son los candidatos a ser la "E" y la "A", respectivamente, en el texto en claro.

1.2.- A partir de ahí, la tabla de frecuencias anterior nos puede indicar qué símbolos del criptograma son candidatos a ser el resto de letras en el texto en claro, pero en criptogramas no muy largos (el del reto tiene una longitud de 132 símbolos), aunque constituye una muy buena base de partida, esto no es fácil de determinar únicamente con el análisis de frecuencias de los caracteres o símbolos (monogramas), por lo que tendremos que acudir al análisis de bigramas, trigramas, etc. (grupos de dos caracteres o símbolos, de tres, etc.) e incluso de aquellos grupos que podrían formar palabras, por lo que ahora le toca el turno a eso que da título a este reto: "Dime con quién andas y te diré quién eres".

2.- Una vez que hemos establecido los candidatos más probables a ser la "E" y la "A" en el texto en claro y antes de realizar un análisis de frecuencias de los bigramas y trigramas, nos fijamos en que el criptograma comienza con el candidato a ser la "E", por lo que el segundo símbolo (frecuencia de aparición del 8,33%) es muy probable que se corresponda con una de las consonantes de mayor frecuencia ("S", "R" o "N", más probable por su frecuencia de aparición que sea la "S"), y muy poco probable que se corresponda con la "O" (la otra vocal con mayor frecuencia de aparición en español). Por tanto, completamos nuestra hipótesis inicial de la siguiente manera:
Con esta hipótesis una primera aproximación al texto en claro sería:
A la vista del resultado obtenido hasta ahora, podríamos pensar que el tercer símbolo del criptograma se corresponde con la letra "T" (el criptograma empezaría por "ESTE") y que los dos símbolos que se repiten consecutivamente en la undécima fila se corresponden con la "L" (podría leerse "ELLOS").

El tercer símbolo presenta una frecuencia de aparición del 5,30%, mientras que los dos símbolos que se repiten consecutivamente también aparecen con una frecuencia del 5,30%. En ambos casos esta frecuencia podría ser coherente con las de la letra "T" (4,63%) y "L"(4,97%) en español, respectivamente.

Incluyendo estos dos símbolos en nuestra hipótesis, una segunda aproximación al texto en claro sería:
3.- Y ahora realizamos el análisis de frecuencias de bigramas y trigramas:

Hay doce bigramas que se repiten 3 o más veces cada uno de ellos en el criptograma, los siguientes:

- "OS" (según nuestra hipótesis) en 5 ocasiones. Bigrama muy frecuente en español.

"LO" (según nuestra hipótesis) en 4 ocasiones. Bigrama frecuente en español.

"TE" (según nuestra hipótesis) en 4 ocasiones. Bigrama frecuente en español.

"ES" (según nuestra hipótesis) en 3 ocasiones. Quizás el bigrama más frecuente en español. 

"EL" (según nuestra hipótesis) en 3 ocasiones. Bigrama muy frecuente en español.

- Tres que terminarían según nuestra hipótesis con la letra "E", los siguientes: 
El símbolo que precede a la "E" en el bigrama enmarcado en color rojo en la figura anterior y que aparece en 4 ocasiones bien podría corresponderse con la letra "D", ya que: el bigrama "DE" es posiblemente el más frecuente en español que termina en "E", en la fila undécima podría leerse "DE ELLOS", la frecuencia de aparición de dicho símbolo en el criptograma es del 4,55% (lo que no estaría muy alejado de la frecuencia de aparición de la "D" en el idioma español: 5,86%) y el trigrama "ADO" que formaría en la fila cuarta es muy común en español.

El símbolo que precede a la "E" en el bigrama enmarcado en color verde en la figura anterior y que aparece en 3 ocasiones podría ser la "U", pero me surgen dudas porque, aunque el bigrama "UE" es frecuente en español (detrás de "DE" posiblemente el segundo más frecuente terminado en "E"), su frecuencia de aparición en el criptograma es muy superior (6,06%) a la que se espera encontrar para la "U" en un texto escrito en español (3,93%).

El símbolo que precede a la "E" en el bigrama enmarcado en color azul en la figura anterior y que aparece en 3 ocasiones no me dice gran cosa considerado individualmente, sólo que por su frecuencia de aparición (6,06%) podría ser "R", "N" o "I". No obstante, como este bigrama aparece de forma consecutiva en la duodécima fila yo diría que hay que descartar la "I" y, por tanto, ese símbolo es candidato a ser "R" o "N".

- Un bigrama que involucra a los dos últimos de los símbolos analizados, que aparece en 3 ocasiones (enmarcado en color naranja en la figura siguiente), y que parece indicar que estos se corresponderían con "U" y "N", respectivamente, leyéndose "UN" en el texto en claro.
- Los otros tres bigramas que se repiten en tres ocasiones, de momento, no me dicen gran cosa, pero creo que con lo obtenido hasta el momento estamos ya en disposición de intentar descifrar casi completamente el criptograma.

Recapitulamos:
Por tanto, una tercera aproximación al texto en claro sería la siguiente;
Podríamos seguir con el análisis de frecuencias de bigramas y trigramas, ya que hay algunos que serían muy fáciles de obtener (por ejemplo, el trigrama "QUE" es el más frecuente en español y hay un símbolo que lo formaría dos veces), pero es que a simple vista se pueden leer ya palabras: "ATAQUE", "TEXTO", "ANALISIS",..., y estableciendo el candidato a ser la "I" el único símbolo que queda con frecuencia de aparición de  6,06% es más que probable que sea la "R". Además, considerando todo lo anterior y la frecuencia de aparición de los símbolos que quedan creo que es fácil establecer otros candidatos, por ejemplo el que se correspondería con la "C", y con todo ello proceder ya a descifrar completamente el criptograma:
Por tanto, la solución al reto 6 es:

"ESTE ES UN EJEMPLO DE ATAQUE A UN TEXTO CIFRADO MEDIANTE UN ANALISIS DE FRECUENCIAS DE LOS CARACTERES O SIMBOLOS Y GRUPOS DE ELLOS QUE FIGURAN EN EL CRIPTOGRAMA".

******** PRÓXIMO RETO
Reto 7:     "Descifrando Enigma".

martes, 21 de noviembre de 2017

Criptografía (LXXI): Solución Reto 5

El  enunciado del quinto reto que puse en este post era el siguiente: "Como en casi todo en esta vida, en el criptoanálisis la fuerza bruta no es una opción o, al menos, suele ser la peor opción. Pero, también como en casi todo en esta vida, hay excepciones. Éste es el caso del criptograma asociado al reto, ya que el espacio de claves (conjunto finito de todas las claves que se pueden emplear) es ridículo, incluso para un criptosistema clásico. Por las pistas dadas hasta ahora, seguro que ya sabes cuál es el criptosistema empleado para cifrar el criptograma. Por otra parte, el refranero español es muy sabio y nos recuerda lo que he dicho al principio: ¿me puedes decir qué frase del refranero español se esconde en el criptograma?".

Este reto es de criptografía y su solución es:

Por las pistas dadas en el título y el enunciado es evidente que el criptograma asociado al reto se ha obtenido mediante el cifrado César (ya expliqué en este post cómo se cifra y descifra utilizando este método).

Lo más habitual en este tipo de cifrado es que cada carácter del texto en claro se sustituya por aquel que se encuentra un número fijo de posiciones por delante de él en el alfabeto (por ejemplo: la "A" se sustituye por la "D", la "B" por la "E", etc.). Típicamente, el desplazamiento utilizado suele ser de 3 posiciones, pero este cifrado puede generalizarse para emplear uno de los - 1 desplazamientos posibles, siendo "n" el tamaño del alfabeto, es decir, si usamos el alfabeto español (n = 27) podemos usar uno de 26 desplazamientos. Cuando el desplazamiento es fijo nos referimos a un cifrado de desplazamiento puro.

Por tanto, utilizando la fuerza bruta, es decir, probando todos los posibles desplazamientos el ataque prosperará en el peor de los casos en el intento vigésimo sexto, lo que es perfectamente posible realizar en muy poco tiempo, incluso a mano.

Para ello, colocamos el criptograma en una fila y debajo de cada uno de los caracteres del mismo colocamos el carácter anterior del alfabeto. Si logramos leer un refrán (que es la respuesta que nos pide el reto) el ataque habrá prosperado, en caso contrario añadimos una nueva fila y colocamos debajo de cada carácter de la fila anterior el carácter anterior del alfabeto, y así sucesivamente hasta que obtengamos un texto inteligible, de la siguiente manera:
Tal y como decía en el enunciado, esto ha sido posible en este caso porque en el cifrado César el tamaño del espacio de claves (conjunto finito de todas las claves que se pueden emplear) es ridículo, incluso para un criptosistema clásico.

Por tanto, la solución al reto 5 es "Más vale maña que fuerza", frase del refranero español que nos viene a recordar que la fuerza no suele ser la mejor opción.

******** PRÓXIMO RETO
Reto 6:     "Dime con quién andas y te diré quién eres".

domingo, 19 de noviembre de 2017

Criptografía (LXXII): Reto 6

Otro reto fácil sobre criptografía.

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. A lo largo de la semana iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 6: "Dime con quién andas y te diré quién eres".

Allá por el siglo IX, Al-Kindi, un filósofo árabe, fue el primero que se dio cuenta, o al menos que lo documentó, de que se podía atacar un texto cifrado mediante la estadística del lenguaje en el que estuviera escrito el texto en claro, ya que ciertas características del mismo se trasladaban al criptograma. Por ello, entiendo que podría ser considerado como el padre del criptoanálisis e incluso como el primer "hacker" de la historia. El análisis de frecuencias consiste, básicamente, en estudiar la frecuencia de aparición en el criptograma de caracteres o símbolos y de grupos de ellos (de ahí el título de este reto) con relación a la frecuencia de las letras y grupos de éstas en el lenguaje en el que esté escrito el texto en claro. ¿Puedes descifrar el criptograma asociado al reto utilizando el análisis de frecuencias?.

Dificultad:
Tipo:          Criptografía.

Recursos:  - Criptograma:
******** 21/11/2017
Pista 1:     En nuestro reto la frecuencia de aparición (porcentaje) de los símbolos en el criptograma comparada con la frecuencia de aparición (porcentaje) de las letras en el idioma español nos dará una pista muy importante sobre qué símbolos pueden corresponderse con las letras del texto en claro. Así, los dos candidatos a ser las letras más frecuentes en español ("E" y "A") serán fácilmente reconocibles con un análisis de frecuencias de los símbolos, ya que éstas son las que presentan una significativa mayor frecuencia de aparición en dicho idioma. Este análisis de frecuencias de monogramas es un muy buen punto de partida, pero, sobretodo en criptogramas no muy largos (éste tiene una longitud de 132 símbolos), debe completarse necesariamente con los correspondientes análisis de bigramas, trigramas, etc. (grupos de dos caracteres o símbolos, de tres, etc.) e incluso de aquellos grupos que podrían formar palabras, por lo que ahora le toca el turno a eso que da título al reto: "Dime con quién andas y te diré quién eres".

******** 22/11/2017
Pista 2:     Del análisis de frecuencias de los símbolos podemos establecer la hipótesis inicial de que los dos que aparecen con mayor frecuencia en el criptograma se corresponden con las letras "E" y "A", respectivamente. Considerando, además, que el criptograma comienza con el candidato a ser la "E", y teniendo siempre presente el porcentaje de aparición de los símbolos, podemos completar nuestra hipótesis estableciendo los candidatos a ser la "O" y la "S", de la siguiente manera (a la izquierda se muestra el porcentaje de aparición de los símbolos en el criptograma y a la derecha el porcentaje de aparición de las letras que se espera encontrar en un texto escrito en español):
Con lo que en una aproximación al texto en claro tendríamos:
Fijándonos en los símbolos enmarcados en color rojo y considerando su porcentaje de aparición en el criptograma creo que no es difícil establecer a qué letras podrían corresponderse en el texto en claro. A partir de aquí, quizás con el análisis de bigramas, trigramas, etc... consigas descifrar completamente el criptograma.

******** 23/11/2017
Pista 3:     Completando nuestra hipótesis con los dos símbolos enmarcados en rojo en la pista anterior, que serían los candidatos a ser la "T" y la "L", respectivamente, hacemos una segunda aproximación al texto en claro:
Considerando esta aproximación, en la que se han enmarcado algunos bigramas y trigamas, teniendo siempre presente el porcentaje de aparición de los símbolos en el criptograma, y teniendo en cuenta que:

- "DE"  y "UE" son los bigramas que terminan en "E" más frecuentes en español,
- "UN" es un bigrama frecuente en español,
- "QUE" es el trigrama más frecuente en español,
- "ADO" y "NTE" son trigramas frecuentes en español,

estoy seguro de que con todo ello puedes ir completando la hipótesis con nuevos símbolos candidatos a letras en el texto en claro e ir haciendo nuevas aproximaciones hasta descifrar completamente el criptograma. 

******** 24/11/2017
Solución.

******** PRÓXIMO RETO
Reto 7:     "Descifrando Enigma".

jueves, 16 de noviembre de 2017

Criptografía (LXX): Reto 5

En este post otro reto muy fácil sobre criptografía; a ver si alguien se anima a comentar :).

Como siempre, se admiten soluciones en forma de comentarios a esta entrada. A lo largo de la semana iré proporcionando pistas para su resolución, un máximo de tres, y posteriormente actualizaré este post con la solución.

Reto 5: "Tú también, Bruto, hijo mío".

Como en casi todo en esta vida, en el criptoanálisis la fuerza bruta no es una opción o, al menos, suele ser la peor opción. Pero, también como en casi todo en esta vida, hay excepciones. Éste es el caso del criptograma asociado al reto, ya que el espacio de claves (conjunto finito de todas las claves que se pueden emplear) es ridículo, incluso para un criptosistema clásico. Por las pistas dadas hasta ahora, seguro que ya sabes cuál es el criptosistema empleado para cifrar el criptograma. Por otra parte, el refranero español es muy sabio y nos recuerda lo que he dicho al principio: ¿me puedes decir qué frase del refranero español se esconde en el criptograma?.

Dificultad: 
Tipo:          Criptografía.

Recursos:  - Criptograma: YNFINXQYNANDHQRHQEMN

******** 18/11/2017
Pista 1:     Por el título del reto enseguida te habrás dado cuenta de que me refiero al cifrado César. Lo más habitual en este tipo de cifrado es que cada carácter del texto en claro se sustituya por aquel que se encuentra un número fijo de posiciones por delante de él en el alfabeto (por ejemplo: la "A" se sustituye por la "D", la "B" por la "E", etc.). Típicamente, el desplazamiento utilizado suele ser de 3 posiciones, pero este cifrado puede generalizarse para emplear uno de los hasta - 1 desplazamientos posibles, siendo "n" el tamaño del alfabeto, es decir, si usamos el alfabeto español (n = 27) podemos usar uno de 26 desplazamientos. Cuando el desplazamiento es fijo nos referimos a un cifrado de desplazamiento puro.

******** 19/11/2017
Pista 2:     Utilizando la fuerza bruta, es decir, probando todos los posibles desplazamientos, el ataque prosperará en el peor de los casos en el intento vigésimo sexto, lo que es perfectamente posible realizar en muy poco tiempo, incluso a mano.

******** 20/11/2017
Pista 3:     Coloca el criptograma en una fila y debajo de cada uno de los caracteres del mismo coloca el carácter anterior del alfabeto. Si logras leer un refrán el ataque habrá prosperado, en caso contrario añade una nueva fila y coloca debajo de cada carácter de la fila anterior el carácter anterior del alfabeto, y así sucesivamente hasta que obtengas un texto inteligible.
******** 21/11/2017
Solución.

******** PRÓXIMO RETO
Reto 6:     "Dime con quién andas y te diré quién eres".

Criptografía (LXIX): Solución Reto 4

El  enunciado del cuarto reto que puse en este post era el siguiente: "Como es sabido la palabra clave viene del latín (clavis, "llave"), y la "llave" de este reto la tiene un científico inglés, quizás el más importante que ha dado la humanidad y cuyo nombre latinizado se esconde en el anagrama asociado al reto. Con la "llave inglesa" descifrar el criptograma que figura a continuación es un juego de niños, sobretodo si os digo que el inventor del criptosistema con el que se ha cifrado el texto en claro es otro científico inglés, Charles Wheatstone. ¿Me puedes decir a qué obra del primero de estos dos científicos ingleses se refiere el criptograma?".

Este reto es de criptografía y su solución es:

1.- Investigando un poco es fácil encontrar que "Jeova Sanctus Unus" (algo así como: "Jeová único santo") era el seudónimo que utilizaba Isaac Newton para firmar sus trabajos como alquimista.

Si reordenamos los caracteres del anagrama obtenemos el nombre latinizado de este gran científico, de la siguiente manera:
Es decir: "ISAACUS NEUUTONUS".

Utilizando este resultado como clave podremos descifrar el criptograma.

2. Para ello, lo primero que debemos saber es qué criptosistema se ha utlizado para cifrar el texto en claro, y el enunciado del reto nos da una pista muy importante para ello, su inventor fue otro científico inglés: Charles Wheatstone.

Investigando un poco más también es fácil darse cuenta de que este último fue el inventor del cifrado de Playfair, aunque éste método lleve el nombre de Lyon Playfair, que fue quien lo dio a conocer.

3.- Básicamente, este método consiste en:

3.1.- Disponer en una matriz de 5x5, de izquierda a derecha y de arriba a abajo, los caracteres de la clave (eliminando los repetidos) y después completar dicha matriz con el resto de los caracteres del alfabeto que no figuren el clave, excluyendo la "J" y la "Ñ".

En nuestro caso:

Clave:  "ISAACUS NEUUTONUS". Eliminamos caracteres repetidos: "ISACUNETO" y los disponemos en la matriz de 5x5, completándola después con el resto de caracteres del alfabeto diferentes a los anteriores.
3.2.- Ya expliqué en este post como se cifra un texto en claro utilizando este criptosistema y ahora vamos a descifrar el criptograma del reto: "QLTASA".

Agrupamos los caracteres del criptograma dos a dos: QL TA SA.

Como "Q" y "L" están en la misma fila, para descifrar, se sustituye cada uno de ellos por el carácter situado inmediatamente a su izquierda (si es el primero de la fila se sustituye por el último de la fila), obteniéndose "P" y "R", respectivamente:
Como "T" y "A" están en la misma columna, para descifrar, se sustituye cada uno de ellos por el carácter situado inmediatamente encima de él (si es el primero de la columna se sustituye por el último de la columna), obteniéndose "A" y "X", respectivamente:
Y, finalmente, como "S" y "A" están en la misma fila, para descifrar, se sustituye cada uno de ellos por el carácter situado inmediatamente a su izquierda (si es el primero de la fila se sustituye por el último de la fila), obteniéndose "I" y "S", respectivamente:
 Obteniéndose como texto en claro: "PRAXIS".

4.- Por tanto, la solución al reto 4 es "Praxis", que es la obra más importante de Isaac Newton como alquimista.

******** PRÓXIMO RETO
Reto 5:     "Tú también, Bruto, hijo mío".