Quantcast
Channel: El blog de García Larragan y Cía
Viewing all 639 articles
Browse latest View live

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

$
0
0
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".

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

$
0
0
El pasado miércoles, 29 de noviembre de 2017, he tenido 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.

Criptografía (LXXIV): El algoritmo MD5

$
0
0
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.

Criptografía (LXXV): Reto 7

$
0
0
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.


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

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

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

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

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

Criptografía (LXXVI): Reto 8

$
0
0
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


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

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

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

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

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

Criptografía (LXXVII): Reto 9

$
0
0
Planteo en este post un reto de dificultad media que combina la esteganografía con la criptografí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 9: "¡Feliz Navidad!".

Como todos los años por estas fechas suelo enviar una felicitación de navidad a un amigo con el que comparto la afición por el ajedrez. Este año le he enviado un correo electrónico en el que figura como asunto el título de este reto y en el que le adjunto la imagen asociada al mismo. No, no me he equivocado de imagen. Supón que interceptas o tienes acceso a ese e-mail, ¿puedes ver la felicitación de navidad que le he enviado a mi amigo?.

Dificultad:
Tipo:          Criptografía y Esteganografía.

Recursos:  - Reto 9_Navidad2017.bmp


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

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

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

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

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

Zorionak eta urte berri on 2018!

$
0
0
Como ya es tradición en este blog, llegadas estas fechas os deseo a todos que paséis unas muy felices fiestas en compañía de los vuestros y lo mejor para el año que viene.

¡Feliz Navidad y próspero año nuevo!

Criptografía (LXXVIII): Solución Reto 7

$
0
0
El  enunciado del séptimo reto que puse en este post era el siguiente: "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)?".

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

1.- Lo primero que tenemos que hacer es elaborar el "menú", a partir del encaje de la "crib" en el criptograma, que nos servirá como punto de partida para configurar la bomba. Ya expliqué en detalle cómo se hace esto y los siguientes pasos en este post y siguiente, por lo que en éste me limitaré a dar, sin mayores detalles, los resultados que nos llevarán a resolver el reto planteado.

El "menú" sería el siguiente:
Ahora asignamos a cada uno de los enlaces entre caracteres del "menú" un codificador de doble extremo. Para ello, seleccionamos el "camino" más largo posible a través de sus enlaces con objeto de conectar en secuencia el máximo número posible de codificadores, ya que de esta forma se simplificarán las conexiones a realizar en el panel posterior de la bomba (que veremos más adelante). Elegimos el siguiente "camino":

K -->--> E --> K --> R --> V --> T --> W --> H --> E --> --> W 

Con lo que nuestro "menú" podría representarse gráficamente de la siguiente manera:
Y finalmente, establecemos la posición inicial de cada uno de los tambores de cada codificador conforme a la posición relativa que ocupa cada uno de los enlaces en la "crib". Para ello asumimos que el ajuste de los anillos antes de cifrarse la primera letra de la "crib" es "ZZZ", por lo que en la posición relativa 1 habrá que ajustar la posición inicial de los tambores a "ZZA", en la posición relativa 2 a "ZZB", en la 3 a "ZZC" y así sucesivamente. Con los ajustes de los tres tambores de cada uno de los codificadores, nuestro "menú" podría representarse gráficamente como sigue:
2.- Ahora estamos ya en disposición de configurar la bomba, para lo que utilizaremos el simulador asociado al reto como recurso.

En nuestro reto y a partir del "menú" obtenido en el paso anterior, vamos a utilizar los doce codificadores de doble extremo de la batería situada en la parte superior (del 1 al 12 - del primer conjunto de tres tambores de la izquierda hasta el duodécimo situado más a la derecha).

En primer lugar, montamos los tambores correspondientes y ajustamos la posición inicial de cada uno de ellos en el panel frontal de la bomba. Vamos a realizar la primera prueba de nuestro "menú" para el orden de los tambores I-II-III, para lo que montamos sobre sus ejes los 3 tambores correspondientes a ese orden en cada uno de los 12 codificadores de la batería superior y ajustamos cada uno de ellos a la posición inicial indicada en el menú obtenido en el paso anterior. El siguiente gráfico muestra el ajuste realizado para los tres tambores del primer codificador:
Ahora establecemos las conexiones del "menú" en el panel posterior de la bombaTeniendo en cuenta el "camino" que hemos elegido en el paso anterior, conectamos en secuencia (cuando una misma letra es la salida de un codificador y la entrada del siguiente) los siguientes codificadores "puenteando" la salida de cada uno de ellos con la entrada del siguiente, de la siguiente manera:
Después, establecemos el resto de conexiones del "menú" mediante cables (las conexiones indicadas en color rojo ya las hemos realizadas mediante "puentes") y determinamos la letra del "menú" a la que se le va a aplicar la tensión, en nuestro reto elegimos la "E" (la "letra central"), ya que es letra del "menú" que se ve involucrada en el mayor número de bucles (3), y, por tanto, establecemos la conexión correspondiente (utilizando el conector de la columna central etiquetado con "2" que queda libre) con el conector para aplicar dicha tensión (CH1), que también se encuentra en el panel posterior. Todo ello, de la siguiente manera:
Y finalmente, para tener lista la bomba activamos los tres interruptores siguientes que se encuentran en el lateral derecho: el interruptor "CHAIN 1" (batería superior de codificadores), uno de los interruptores para dicha batería (para probar la hipótesis de partida establecida. En nuestro reto que "E" se conecta en el tablero de conexiones de la máquina Enigma con la letra correspondiente al interruptor que se accione; en nuestro reto elegimos la "A", aunque la elección de esta última letra no es importante) y el interruptor "CARRY":
Ponemos en marcha la bomba. Transcurrido un breve tiempo el simulador se para mostrando en tres tambores de su frontal un posible ajuste de los anillos correspondiente a los tres rotores de la máquina enigma: lento o izquierdo, medio o central y rápido o derecho, respectivamente. En este caso: "X", "W" y "V".
Además, en el lateral derecho de la máquina, se muestra la letra que estaría conectada en el tablero de clavijas con la letra central que hemos elegido ("E"). En esta parada nos indica la letra "T".
Con la información de esta parada tenemos ya parte de la clave:

- Los rotores utilizados y su orden: "I-II-III".
- El ajuste de los anillos: "X-W-V".
- Conexión tablero de clavijas: "E/T".

pasamos a la máquina de comprobación del simulador ("checking machine") para 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.

Para ello, con los tambores correspondientes a la prueba realizada (I-II-III), realizamos el ajuste de los anillos de los tambores a las posiciones indicadas en la parada"X-W-V" (movemos el punto negro para situarlo encima de la letra correspondiente de cada tambor) y posteriormente vamos ajustando los tambores a la posición adecuada y pulsando cada una de las letras del "menú" para obtener aquella letra a la que estaría conectada cada una de ellas en el tablero de clavijas:

Así:

- "E" es la entrada al decodificador 10 (tambores en "ZZB") y su salida es "Q". Ajustamos los tambores a esa posición y pulsamos "T" (letra que conforme a la parada estaría conectada con "E") para obtener la letra con la que estaría conectada la "Q". Se ilumina "G".

- "Q" es la entrada al decodificador 11 (tambores en "ZZA") y su salida es "W". Ajustamos los tambores a esa posición y pulsamos "G" (letra que estaría conectada con "Q") para obtener la letra con la que estaría conectada la "W". Se ilumina "W" (lo que nos indica que la "W" no estáría conectada a otra letra).

- "W" es la entrada al decodificador 8 (tambores en "ZZJ") y su salida es "H". Ajustamos los tambores a esa posición y pulsamos "W" (la "W" no estaría conectada a ninguna otra letra) para obtener la letra con la que estaría conectada la "H". Se ilumina "M".

Y así sucesivamente, y obtenemos:

- E/T.
- Q/G.
- W/W.
- H/M.
- A/D.
- K/I.
- R/R.
- V/N.
- B/O.
- X/X.
- F/U.
- S/S.

Con esto ya sabríamos 8 de las 10 posibles conexiones de letras en el tablero de clavijas y comprobamos que no se ha producido ninguna contradicción, es decir, que una misma letra no esté conectada a la vez a más de otra letra (lo que no es posible con el diseño de la máquina, y si así fuera la parada se revelaría como falsa). No es el caso, por lo que la parada puede ser correcta.

Comprobamos la clave hallada hasta el momento con la réplica de la máquina enigma del simulador (Enigma 3). Para ello:

1.- Realizamos el ajuste de los anillos de los rotores I, II y III a "X", "W" y "V", respectivamente:
2.- Ponemos la posición inicial de los rotores en "Z-Z-Z":
Comentar que, por error en el simulador de la bomba, los tambores I, II y III, que son los utilizados en nuestro reto, están una letra por delante de los correspondientes rotores de la máquina Enigma, por lo que para compensar ese error de los tambores tenemos que poner los rotores en la posición inicial "Y-Y-Y" en lugar de "Z-Z-Z".

3.- Establecemos las conexiones de letras que conocemos en el tablero de clavijas:
4.- Desciframos el criptograma correspondiente a la "crib":
Como se puede observar en la figura anterior hemos obtenido como texto en claro el correspondiente a la "crib".

Por tanto, la solución al reto 6 es:

- Rotores utilizados y su orden: "I-II-III".
- Ajuste de los anillos: "X-W-V".
- Conexión tablero de clavijas: "E/T", "Q/G""W/W", "H/M", "A/D", "K/I", "R/R", "V/N", "B/O", "X/X", "F/U", "S/S"

Para finalizar, comentar que nos faltan dos posibles conexiones de letras en el tablero de clavijas, pero obtenerlas a partir de los criptogramas interceptados no sería mayor problema.

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

Criptografía (LXXIX): Reto 10

$
0
0
En este post un reto fácil 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 10: "¿Dónde está la llave?".

Sospechamos que un empleado de nuestra compañía está sacando información confidencial para pasársela a la competencia. Tras diversas investigaciones creemos que para ello puede estar utilizando el pendrive que le ha proporcionado la empresa. Con la excusa de grabar en él cierta documentación conseguimos que nos lo deje y tras su análisis conseguimos recuperar diversos archivos borrados. Todos ellos están protegidos por contraseña, menos un archivo con una imagen (se asocian al reto este último y uno de los recuperados). En la imagen se oculta la contraseña del resto de archivos recuperados: ¿me puedes decir cuál es?.

Dificultad:
Tipo:          Esteganografía.

Recursos:  - Reto 10_Imagen.bmp
                  - Reto 10_Archivo recuperado 1.zip 

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

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

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

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

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

Criptografía (LXXX): Solución Reto 8

$
0
0
El  enunciado del octavo reto que puse en este post era el siguiente: "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?".

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

1.-  Tras descargar los dos archivos asociados al reto, aquel con una posición de una partida de ajedrez y el que contiene el código QR que figura en la firma del correo electrónico, abro el primero de ellos con un editor hexadecimal y tras un primer análisis no detecto nada que me lleve a la conclusión de que en él se oculta información adicional.

Respecto al archivo que contiene el código QR lo primero que me llama la atención es que el lector que yo utilizo no lo reconoce, por lo que es posible que éste no esté bien formado, y, en cualquier caso, esto es un tanto raro y centra mis sospechas sobre este archivo.

Analizando un poco más en profundidad el código QR se observa (ver figura siguiente) que los patrones de sincronización tienen los colores invertidos (deberían alternar negro y blanco comenzando en negro) respecto a los de posición y alineamiento, y a los de la zona tranquila, lo que indica que los colores de parte del código QR están invertidos respecto al código original.
En una primera prueba, utilizando Paint selecciono todo el código QR excepto la zona tranquila e invierto los colores:
Ahora voy seleccionando los patrones de posición y el de alineamiento e invirtiendo sus colores, obteniendo el siguiente código QR:
Y pruebo a ver si el lector lo reconoce ahora. Efectivamente, sí lo reconoce, se trata de un Código QR de geolocalización y muestra en el mapa la siguiente ubicación:
Con lo que ya sabemos dónde se producirá la cita.

Nos falta sólo saber cuándo y para intentar averiguarlo abro el archivo que contiene el código QR con un editor hexadecimal:
Tal y como se observa en la figura anterior, entre los metadatos parece que hay una fecha y una hora (19/12/2017 19:00), de lo que nos podríamos haber dado cuenta también sin más que mirar las propiedades del archivo:
Esto, unido a que en el enunciado del reto se dice que el correo se envió el 16/12/2017, me lleva a concluir sin ninguna duda que la cita tendrá lugar el día 19/12/2017 a las 19:00 horas.

Por tanto, la solución al reto 8 es: hemos quedado en la dirección (coordenadas de geolocalización) que contiene el código QR asociado al reto y en la fecha y hora que se indican en el metadato "Comentarios" del archivo de imagen que contiene dicho código. 

Por otra parte y ya que estamos, si alguien quiere resolver el problema de ajedrez (imagen puesta para despistar) puede ver la solución en este post.

******** PRÓXIMO RETO
Reto 9:     "¡Feliz Navidad!".

Criptografía (LXXXI): Las rejillas de Fleissner

$
0
0
En este post otro sistema criptográfico clásico, las rejillas de Fleissner, que implementa un método de transposición para cifrar el texto en claro.

Este criptosistema debe su nombre a su inventor, Edouard Fleissner von Wostrowitz, y también se le conoce como de rejillas giratorias.

En éste método una rejilla es un cuadrado con un número par de celdas en la que éstas se dividen en cuatro cuadrantes con el mismo número de celdas, y como primer paso se numeran las celdas del primer cuadrante con números consecutivos.

Por ejemplo:
El segundo paso consiste en numerar las celdas del segundo cuadrante con el número que le corresponde a cada una de ellas tras la rotación de 90º de la rejilla.

En nuestro ejemplo:
El tercer paso consiste en numerar las celdas del tercer cuadrante con el número que le corresponde a cada una de ellas tras rotar nuevamente la rejilla otros 90º.

En nuestro ejemplo:
El cuarto paso consiste en numerar las celdas del cuarto cuadrante con el número que le  corresponde a cada una de ellas tras rotar nuevamente la rejilla otros 90º.

En nuestro ejemplo:
Y, finalmente, el último paso para tener preparada la rejilla consiste en perforar una y sólo una celda de cada número.

Por ejemplo:
Lógicamente, tanto el emisor como el receptor del mensaje deben utilizar la misma rejilla para cifrarlo y descifrarlo, respectivamente.

Veamos un ejemplo con la rejilla que hemos construido:

Texto en claro: "ESTE ES UN EJEMPLO DE CIFRADO UTILIZANDO UNA REJILLA GIRATORIA".

Para cifrar, el emisor dispone los caracteres del texto en claro en una tabla con el mismo número de filas y columnas que la rejilla (si no completa todas las celdas, las que queden se rellenan con caracteres nulos) y sitúa encima la rejilla:
Y va anotando los caracteres que se muestran en los huecos perforados. El criptograma hasta el momento sería: "ENELOCRDUNAIGORX".

Cuando anota todos los caracteres de los huecos perforados gira la rejilla 90º:
Y sigue anotando los caracteres que se muestran ahora en los huecos perforados. El criptograma hasta el momento sería: "ENELOCRDUNAIGORXSSUJLIADJLRAXCJY".

Cuando anota todos los caracteres de los huecos perforados vuelve a girar la rejilla 90º:
Y continúa anotando los caracteres que se muestran ahora en los huecos perforados. El criptograma hasta el momento sería: "ENELOCRDUNAIGORXSSUJLIADJLRAXCJYMDEATZULAITIAZYQ".

Cuando anota todos los caracteres de los huecos perforados gira por última vez la rejilla 90º:
Y completa el criptograma anotando los caracteres que se muestran ahora en los huecos perforados.

Criptograma: ENELOCRDUNAIGORXSSUJLIADJLRAXCJYMDEATZULAITIAZYQETEPIFOIONREQTBZ

Para descifrar, el receptor pone la rejilla sobre un papel en blanco y va rellenando los huecos perforados con los caracteres del criptograma:
Cuando completa todos los huecos perforados gira la rejilla 90º y continúa completando los huecos perforados que se muestran ahora con los siguientes caracteres del criptograma:
Cuando completa todos los huecos perforados vuelve a girar la rejilla 90º y sigue completando los huecos perforados que se muestran ahora:
Cuando completa todos los huecos perforados vuelve a girar por última vez la rejilla 90º y continúa completando el texto en claro con los huecos perforados que se muestran ahora:
Finalmente, quita la rejilla y lee sobre el papel el texto en claro.

Texto en claro:
ESTEESUNEJEMPLODECIFRADOUTILIZANDOUNAREJILLAGIRATORIAXXQZYTBCQJZY

Es decir, desechando los caracteres nulos del final:

"ESTE ES UN EJEMPLO DE CIFRADO UTILIZANDO UNA REJILLA GIRATORIA".

Criptografía (LXXXII): Solución Reto 9

$
0
0
El  enunciado del noveno reto que puse en este post era el siguiente: "Como todos los años por estas fechas suelo enviar una felicitación de navidad a un amigo con el que comparto la afición por el ajedrez. Este año le he enviado un correo electrónico en el que figura como asunto el título de este reto y en el que le adjunto la imagen asociada al mismo. No, no me he equivocado de imagen. Supón que interceptas o tienes acceso a ese e-mail, ¿puedes ver la felicitación de navidad que le he enviado a mi amigo?".

Este reto combina la esteganografía con la criptografía y su solución es:

1.- Descargamos el archivo asociado al reto (Reto 9_Navidad 2017.bmp) y lo abrimos con un editor hexadecimal.

Lo primero que nos llama la atención son los caracteres alfanuméricos, "LyQW2FDMTlR4", que se encuentran a partir de la posición "36" en hexadecimal (54 en decinal):
Tal y como indique en este post, la cabecera de un archivo de imagen bmp tiene un tamaño de 54 bytes, lo que se indica en 4 Bytes a partir de la posición "0A" en hexadecimal (10 en decimal) con el valor "36 00 00 00" (recordar que los Bytes se disponen de izquierda a derecha del menos significativo al más significativo, es decir, hay que leerlos de derecha a izquierda: "00 00 00 36" en hexadecimal, 54 en decimal), pero tal y como se observa en la figura en este caso tiene un tamaño de "00 00 00 42" en hexadecimal (66 en decimal), lo que indica que se ha ampliado en 12 Bytes, que es justo el número de caracteres alfanuméricos que hemos observado. Es decir, se ha ampliado el tamaño de la cabecera para incluir en ella dichos caracteres sin afectar a la visualización de la imagen.

2.- Lo siguiente que nos llama la atención es que el tamaño que realmente tiene el archivo no coincide con el que debería tener tras la ampliación realizada en la cabecera:
Es decir, debería tener 373.734 Bytes + 12 Bytes = 373.746 Bytes, y realmente tiene 466.396 Bytes:
Vamos a la posición"05B3F1" (373.745 en decimal) que es en la que, conforme al tamaño del archivo que se indica en la cabecera más la ampliación realizada a la misma, se encontraría el último Byte del archivo bmp, y reconocemos justo detrás de ella (a partir de la posición "05B3F2") la cabecera de una archivo zip (empieza con los valores en haxadecimal "50 4B", que se corresponden en ASCII con los caracteres "PK").
Además, tal y como se observa en la figura anterior, este archivo zip parece contener un archivo comprimido llamado Navidad2017.jpg, y que es posible que contenga la felicitación que estamos buscando.

Sin hacer mayores comprobaciones, extraemos el contenido del archivo bmp a partir de la posición "05 B3 F2" y hasta el final, y generamos con esa información un archivo nuevo que grabamos con el nombre de Reto 9_Navidad2017.zip.
El tamaño del archivo así generado es de 92.650 Bytes, lo que ya cuadra con el tamaño que tiene realmente el archivo bmp, es decir: 373.734 Bytes (indicado en su cabecera) + 12 Bytes (ampliación cabecera) + 92.650 Bytes (tamaño archivo zip) = 466.396 Bytes (tamaño archivo bmp).

Abrimos este nuevo archivo zip y, efectivamente, contiene un único archivo comprimido de nombre Navidad2017.jpg, pero está protegido con contraseña.

3.- Para intentar averiguar la contraseña del archivo zip nos centramos en los caracteres alfanuméricos que hemos observado en la cabecera, es decir: "LyQW2FDMTlR4" y probamos a ver si ésta es la contraseña. No lo es.

Fijándonos un poco más en esos caracteres vemos que es posible que sean el resultado de codificar la contraseña en Base64. Acudimos a un codificador/decodificador Base64 online pero no obtenemos un resultado coherente.

¿Podría tratarse de un criptograma?. Pues sí, pero, en ese caso, ¿qué criptosistema se ha empleado para cifrar el texto en claro?. Considerando lo anterior, es decir, que parece código Base64, es probable que se haya utilizado uno de transposición para, simplemente, cambiar de orden los caracteres, pero tras utilizar diversos métodos de cifrado de transposición para ir probando los resultados que se van obteniendo como posibles claves y, además, acudir al codificador/decodificador Base64 para intentar obtener la clave, no se obtiene la clave correcta del archivo zip.

Posteriormente, nos fijamos en la imagen que contiene el archivo asociado al reto (Reto 9_Navidad2017.bmp) por si ésta nos puede dar alguna pista para resolverlo. Un tablero de ajedrez recuerda a una rejilla: ¿puede haberse empleado algún método de cifrado de rejilla?. En ese caso la posición de las piezas en el tablero podrían indicar los huecos perforados en la rejilla (ver este post donde explico uno de estos métodos: las rejillas de Fleissner).

Probando con el criptosistema indicado en el párrafo anterior la rejilla para nuestro reto sería:
Y ahora ponemos esta rejilla sobre un papel en blanco y vamos rellenando los huecos perforados con los caracteres del criptograma. Como éste tiene 12 caracteres sólo utilizamos los huecos de la primera fila y los de la mitad de la segunda fila, de la siguiente manera:

Criptograma: LyQW2FDMTlR4
Cuando se nos acaban los huecos de la primera fila y los de la mitad de la segunda fila, rotamos 90º la rejilla y seguimos completando dichos huecos con los siguientes caracteres del criptograma:
Cuando se nos acaban los huecos de la primera fila y los de la mitad de la segunda fila, volvemos a rotar 90º la rejilla y seguimos completando los huecos que se muestran ahora con los siguientes caracteres del criptograma:
Cuando se nos acaban los huecos de la primera fila y los de la mitad de la segunda fila, volvemos a rotar por última vez 90º la rejilla y seguimos completando los huecos que se muestran ahora con los siguientes caracteres del criptograma:
Finalmente, quitamos la rejilla y leemos sobre el papel el texto en claro.
Texto en claro: TWlLR2FyQDM4

Comprobamos si ésta es la contraseñe del archivo zip. Tampoco. Seguidamente comprobamos si al decodificar este posible código Base64 obtenemos la clave correcta:
Probamos con contraseña: MiKGar@38 y, efectivamente, vemos que es la clave del archivo zip. Este último contiene la siguiente imagen (Navidad2017.jpg):
la solución al reto 9 consistía en conseguir ver la imagen anterior.

******** PRÓXIMO RETO
Reto 10:   "¿Dónde está la llave?".

Criptografía (LXXXIII): Solución Reto 10

$
0
0
El  enunciado del décimo reto que puse en este post era el siguiente: "Sospechamos que un empleado de nuestra compañía está sacando información confidencial para pasársela a la competencia. Tras diversas investigaciones creemos que para ello puede estar utilizando el pendrive que le ha proporcionado la empresa. Con la excusa de grabar en él cierta documentación conseguimos que nos lo deje y tras su análisis conseguimos recuperar diversos archivos borrados. Todos ellos están protegidos por contraseña, menos un archivo con una imagen (se asocian al reto este último y uno de los recuperados). En la imagen se oculta la contraseña del resto de archivos recuperados: ¿me puedes decir cuál es?".

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

1.- Descargamos los dos archivo asociados al reto (Reto 10_Imagen.bmp y Reto 10_Archivo recuperado 1.zip) y abrimos el segundo de ellos. Este archivo contiene un archivo comprimido (Documento 1.txt) protegido por contraseña.

En el enunciado del reto ya se nos dice que en la imagen se oculta la contraseña del archivo anterior y del resto de archivos recuperados. Abrimos el primero de los archivos asociados al reto (Reto 10_Imagen.bmp) con un editor hexadecimal,

El tamaño de archivo que se indica en su cabecera coincide con el que realmente tiene:
Por tanto, podemos descartar los métodos esteganográficos que incrementan el tamaño del archivo portador, tales como: EOF y el de ampliación de la cabecera para ocultar información adicional en ella.

Otro de los métodos más sencillos para ocultar información en un archivo de imagen bmp consiste en utilizar los Bytes de relleno de cada línea de la imagen. Es decir, en un archivo bmp los valores correspondientes a cada línea de la imagen se disponen de izquierda a derecha con una longitud de línea múltiplo de 4 Bytes, agregándose en caso necesario los Bytes con valor 0 que se precisen hasta completar la longitud múltiplo de 4. Estos Bytes de relleno se ignoran a la hora de visualizar la imagen, por lo que su utilización para ocultar información adicional no afecta a su visualización.

En nuestro reto, tal y como se puede observar en la figura siguiente, la imagen bmp tiene 523 píxeles de ancho:
En la figura anterior en la que se muestra la cabecera del archivo bmp, vemos que se utilizan 24 bits (3 Bytes) por píxel ("0018" en hexadecimal, 24 en decimal), por lo que cada línea de la imagen tendrá (523 píxeles x 3 Bytes/píxel) + 3 Bytes = 1.569 Bytes + 3 Bytes = 1.572 Bytes. Es decir, 1.569 no es múltiplo de 4 y, por tanto, se añaden 3 Bytes de relleno en cada línea hasta que su longitud sea igual al siguiente múltiplo de 4, hasta 1.572. Además, para conocer cuanta información podemos ocultar como máximo en esta imagen utilizando los Bytes de relleno de todas las líneas de la imagen basta con multiplicar el alto de la imagen (que tal y como se observa en la figura anterior es 412 píxeles) por el número de Bytes de relleno de cada línea, es decir, en nuestro caso: 412 líneas x 3 Bytes/línea = 1.236 Bytes.

Con el editor hexadecimal vamos a la posición que ocupa el primer carácter de relleno correspondiente a la primera línea de la imagen (en hexadecimal: 36 + 621 = 657):
Los tres caracteres de relleno de la primera línea contienen los valores en hexadecimal "4B 65 79", que se corresponden en ASCII con los caracteres "Key", por lo que parece que, efectivamente, se han utilizado los Bytes de relleno de algunas líneas para ocultar la contraseña que nos pide el reto.

Vamos a la posición que ocupa el primer carácter de relleno correspondiente a la segunda línea de la imagen (en hexadecimal: 657 + 3 + 621 = C7B):
Los tres caracteres de relleno de la segunda línea contienen los valores en hexadecimal "2F 30 38", que se corresponden en ASCII con los caracteres "/08".

Vamos a la posición que ocupa el primer carácter de relleno correspondiente a la tercera línea de la imagen (en hexadecimal: C7B + 3 + 621 = 129F):
Los tres caracteres de relleno de la tercera línea contienen los valores en hexadecimal "2D 30 33", que se corresponden en ASCII con los caracteres "-03".

Vamos a la posición que ocupa el primer carácter de relleno correspondiente a la cuarta línea de la imagen (en hexadecimal: 129F + 3 + 621 = 18C3):
Los tres caracteres de relleno de la tercera línea contienen los valores en hexadecimal "00 00 00".

Por tanto, vamos a realizar la primera prueba con la contraseña = "Key/08-03", y, efectivamente, es la clave correcta. El archivo Documento 1.txt que contiene el archivo zip tiene el siguiente contenido:
Por tanto, la solución al reto 10 es: Key/08-03.

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

Reconocimiento de la AVPD a PRIBATUA (I)

$
0
0
PRIBATUA (Asociación Vasca de Privacidad y Seguridad de la Información / Pribatutasun eta Informazio Segurtasuneko Euskal Elkartea) ha sido reconocida por laAVPD (Agencia Vasca de Protección de Datos / Datuak Babesteko Euskal Bulegoacon un accésit en su V edición de los premios a la protección de datospor su permanente dedicación a la difusión de la privacidad y seguridad de la información.

No podemos estar más orgullosos de ello; tanto porque la divulgación, comunicación, sensibilización y formación en esta materia (a los profesionales involucrados y a la sociedad en general) constituye uno de los fines esenciales de la Asociación, asunto al que especialmente nos hemos dedicado desde su creación, como por compartir reconocimiento con profesionales de reconocido prestigio.
¡Enhorabuena a todos los premiados!

Criptografía (LXXXIV): Reto 11

$
0
0
En este post otro reto fácil 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 11: "En el fondo del mar".

Como todos sabemos desde muy pequeños, las llaves están en el fondo del mar, y en este caso ocurre igual. Para encontrar la llave (clave) con la que superar este reto tendrás que descender al fondo del mar. ¿Me puedes decir cuál es la clave?.

Dificultad:
Tipo:          Esteganografía.

Recursos:  - Mar.jpg


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

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

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

******** __/__/____
Por publicar.

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

Tres plataformas recomendables de desafíos de seguridad

$
0
0
En este post comparto tres plataformas online con retos de ciberseguridad que creo recomendables para pasar un rato entretenido resolviendo desafíos de este tipo.

Personalmente, a mí los que mas me gustan son los retos relativos a criptografía y esteganografía, pero en estas tres plataformas también encontrareis retos de otras muy diversas categorías: Reversing, Forense, Exploiting, Análisis de tráfico, etc.

En todas ellas basta con registrarse de forma gratuita para comenzar a resolver los retos.

ATENEA: Plataforma de desafíos de seguridad del CCN-CERT pensada para que cualquier persona con inquietudes en el campo de la ciberseguridad pueda poner a prueba sus conocimientos.

Los retos se catalogan en 8 categorías: Básica, Criptografía y Esteganografía, Exploiting, Forense, Hacking Web, Análisis de Tráfico, Reversing y Extra.

En mi opinión una plataforma con retos no muy apropiados para principiantes, ya que yo diría que la dificultad de estos es mayoritariamente media o alta. Aún así cuenta con una categoría básica de retos apta para personas sin experiencia previa en temas de ciberseguridad.

Root Me: Dispone de un mayor número de retos que la anterior, catalogados en las siguientes categorías: App-Script, App-Sistema, Cracking, Criptoanálisis, Esteganografía, Forense, Programación, Realista, Redes, Web-Cliente y Web-Servidor.

Aunque la dificultad de los retos es heterogenéa, yo diría que al igual que la anterior no es una plataforma para principiantes que quieran iniciarse en temas de ciberseguridad, ya que, también al igual que la anterior, no se dan muchas pistas para resolver los retos, aunque sí se hace referencia en cada reto a documentación existente en Internet que puede ayudar a resolverlos.

CTFLearn: Plataforma con una gran cantidad de retos, catalogados en las siguientes categoría: Binario, Criptografía, Forense, Explotación Web, Programación y Varios, y que yo diría que es la más adecuada para principiantes, ya que la dificultad de la mayor parte de los retos es asequible y en la mayoría de ellos los usuarios aportan pistas para su resolución.

Estoy mirando algunas plataforma más (W3ChallsRingZer0 Team Online CTF, etc.), pero, de momento, estas son las tres que más me gustan y que, por tanto, recomiendo.

Criptografía (LXXXV): Reto 12

$
0
0
En este post un reto de dificultad media 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 12: "Halloween".

La calabaza es sin duda el elemento más típico del día de Halloween y tiene la clave para superar este reto. ¿Me  puedes decir cuál es la clave?.

Dificultad:
Tipo:          Esteganografía.

Recursos:  - Halloween.bmp.

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

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

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

******** __/__/____
Solución (por publicar).

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

Criptografía (LXXXVI): Reto 13

$
0
0
Continúo con otro reto de dificultad media 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 13: "Mejor juntos y revueltos".

Pese al dicho popular que dice: "juntos pero no revueltos", creo que hay ocasiones en las que es mejor "juntos y revueltos". Este es el caso de este reto, en el que he enviado a dos amigos míos sendos archivos con una imagen. ¿Me puedes decir cuál es la clave que se esconde en esos archivos?.

Dificultad:
Tipo:          Esteganografía.

Recursos:  - Reto 13_1.png.
                  - Reto 13_2.png.

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

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

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

******** __/__/____
Solución (por publicar).

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

Criptografía (LXXXVII): Solución Reto 13

$
0
0
El  enunciado del decimotercer reto que puse en este post era el siguiente: "Pese al dicho popular que dice: 'juntos pero no revueltos', creo que hay ocasiones en las que es mejor 'juntos y revueltos'. Este es el caso de este reto, en el que he enviado a dos amigos míos sendos archivos con una imagen. ¿Me puedes decir cuál es la clave que se esconde en esos archivos?".

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

1.- Descargamos los dos archivo asociados al reto (Reto 13_1.png y Reto 13_2.png).

2.- Decía en la primera pista que puse para ayudar a resolver este reto que el método "secret sharing" consiste en distribuir un secreto (en nuestro reto la clave) entre un grupo de participantes (en nuestro reto mis dos amigos), de tal forma que sólo es posible "reconstruir" el secreto si se combina un número suficiente de dichas distribuciones (en nuestro caso las dos imágenes). Es decir, cada uno de mis dos amigos por separado no será capaz de "reconstruir" el secreto (en nuestro caso la clave que se esconde en los archivos de imagen que les he enviado a cada uno de ellos), sólo podrán obtenerlo si ambos cooperan aportando la imagen recibida. Esto puede indicarnos que combinando ambas imágenes (XOR) es posible que obtengamos la imagen original a partir de la que se obtuvieron las dos imágenes enviadas a mis amigos y que ésta muestre la clave.

Una de las herramientas de estegoanálisis que suelo utilizar es Stegsolve. Abrimos la primera de las imágenes asociadas al reto con este software:
Seguidamente combinamos con ésta la segunda imagen asociada al reto:
Y efectivamente obtenemos la imagen original a partir de la cual se obtuvieron las dos imágenes que envié a mis amigos:
Por tanto, la clave que nos piden como solución a este reto es: 35t3g4n0gr4f14.

******** PRÓXIMO RETO
Reto 14:   "Niebla".

Criptografía (LXXXVIII): Reto 14

$
0
0
En esta ocasión un reto fácil 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 14: "Niebla".

Me han dicho que iban a emitir por televisión la clave con la que resolver este reto, pero yo sólo veo niebla. Quizás haya que esperar a que ésta se levante. Y tú, ¿ves la clave?.

Dificultad:
Tipo:          Esteganografía.

Recursos:  - TV.gif.


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

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

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

******** __/__/____
Solución (por publicar).

******** PRÓXIMO RETO
Reto 15:  Por publicar.
Viewing all 639 articles
Browse latest View live