miércoles, 21 de octubre de 2015

El cifrado de la información y la LOPD

Tenía pendiente escribir un post sobre el criterio de la Agencia Española de Protección de Datos (AEPD) en el caso de intercambio de información con datos de carácter personal a los que les son de aplicación las medidas de seguridad de nivel alto y, en concreto, sobre el cifrado.

Este criterio se refleja en el informe jurídico 0494/2009 emitido por esta Autoridad de Control (desconozco si hay algún otro documento que fije un criterio posterior), que, en mi opinión, como muchos otros, se limita a "marear la perdiz" llegando a concluir algo absolutamente inútil respecto a la cuestión analizada, aunque para ser justo creo que gran parte de los que emite sí son de utilidad.

Como todos sabemos el artículo 104 del Reglamento de Desarrollo de la LOPD, "Telecomuniciones", dispone que:

"Cuando, conforme al artículo 81.3 deban implantarse las medidas de seguridad de nivel alto, la transmisión de datos de carácter personal a través de redes públicas o redes inalámbricas de comunicaciones electrónicas se realizará cifrando dichos datos o bien utilizando cualquier otro mecanismo que garantice que la información no sea inteligible ni manipulada por terceros".

Además, esta misma medida, conforme a lo establecido en el artículo 101.2 del citado Reglamento, es también exigible en el caso de la distribución de soportes que contengan datos a los que les sean de aplicación las medidas de seguridad de nivel alto:

"La distribución de los soportes que contengan datos de carácter personal se realizará cifrando dichos datos o bien utilizando otro mecanismo que garantice que dicha información no sea accesible o manipulada durante
su transporte.
Asimismo, se cifrarán los datos que contengan los dispositivos portátiles cuando éstos se encuentren fuera de las instalaciones que están bajo el control del responsable del fichero".

El informe jurídico en cuestión comienza, en mi opinión, desvariando sobre la esteganografía como un mecanismo genérico que cabría utilizar, sin mayor precisión sobre ninguna técnica concreta. Aquí me temo que las posibilidades son casi infinitas, tantas como nuestra imaginación nos permita.

Y continúa diciendo: "Pero no sólo es necesario cifrar, sino cifrar de forma que la información no sea inteligible ni manipulada por terceros. Sin esta última condición, no se cumplirá lo estipulado en el citado artículo 104. Esto implica dos cosas, por un lado que el sistema de cifrado a emplear no esté comprometido, es decir, que no se conozca forma de romperlo..." ; y yo aquí, más allá del cifrado que ofrecen los productos que generan archivos PDF o el realizado por WinZip y sobre los que la Agencia pone el acento, me pregunto si tal y como afirma la AEPD: ¿un criptosistema sólo está comprometido si se conoce forma de romperlo?.

Pues me temo que no, tal y como la propia AEPD parece también tener en cuenta cuando acto seguido dice: "Por otro lado, esta garantía necesaria para preservar la confidencialidad de las comunicaciones no sólo descansa en el sistema de cifrado, sino también en el sistema de gestión de claves, en particular, y en el procedimiento de administración de material criptográfico, en general. Sin una correcta definición de ambos, que no se encuentran en su escrito, las comunicaciones a largo plazo estarán comprometidas y no se cumplirá con lo estipulado en el artículo 104 señalado anteriormente.", pero aunque lo que afirma es evidentemente cierto, se olvida de que, además, existen también otras muchas formas de que un sistema criptográfico pueda verse comprometido, entre otras muchas, una mala utilización del mismo por parte de los usuarios o de ataques dirigidos a éstos. ¿Puede entonces, sin más consideraciones que el sistema empleado, garantizarse que el sistema no se vea comprometido?. En mi opinión: No. 

Y el citado informe termina con la grandilocuente conclusión de perogrullo siguiente:

"La seguridad en el intercambio de información de carácter personal en la que hay que adoptar medidas de seguridad de nivel alto, en particular los requisitos de cifrado de datos, no es un tema baladí, ni un mero trámite administrativo, ni una cuestión de comodidad. Es el medio técnico por el cuál se garantiza la protección de un derecho fundamental y al que hay que dedicar el tiempo y los recursos que sean necesarios para su correcta implementación.”.

Lo dicho (aunque en mi opinión ni siquiera es SÓLO un medio técnico), salvo que no parece adecuado utilizar el cifrado que ofrecen los productos que generan archivos PDF o el realizado por WinZip (aunque para el uso particular dice que pudieran considerarse adecuados; aquí me temo que la Agencia se "mete en otro charco", puesto que el ejercicio de actividades exclusivamente personales o domésticas queda fuera del ámbito de aplicación de la LOPD), a mí no me saca de ninguna duda y yo hubiera contestado simplemente que los sistemas por los que se pregunta no responden a las exigencias del RDLOPD, sin meterse en mayores disquisiciones, sobre todo si se tiene tan poco que aportar.

¿Para cuando, no ya una lista de los sistemas que la AEPD considera que garantizan que la información no sea inteligible ni manipulada por terceros porque no se conoce forma de romperlos (aquí yo más bien diría "porque no se conoce que se conoce la forma de romperlos", ¿le han preguntado a la NSA si conoce?), sino, al menos, una relación de las características de los criptosistemas y de las condiciones de gestión de los mismos que la AEPD considera cumplen los artículo 104 y 101.2?. Eso sí que creo que sería de utilidad y me sacaría de dudas :).

Criptografía (XVIII): criptología para todos (II)

Continúo en este post el repaso a los criptosistemas clásicos que inicié en el anterior y que me permitirá introducir nuevos conceptos que entiendo ayudarán a comprender mejor los sistemas criptográficos modernos que serán objeto de próximas entradas.

Pero antes sentemos algunas definiciones y conceptos relativos, esta vez, al criptoanálisis.

- Ataque de fuerza bruta: es el tipo de ataque más simple a un criptosistema y consiste en su caso más extremo en ir probando una a una todas las claves posibles hasta encontrar la correcta. En definitiva, se conocen con este nombre a todos los métodos que prueban exhaustivamente las claves del espacio K (conjunto finito de todas las claves que se pueden emplear).

Actualmente el espacio de claves (K) de cualquier criptosistema que se precie ha de ser lo suficientemente grande para hacer inviable un ataque de este tipo, aunque el gran avance de la potencia de cálculo de los ordenadores en la actualidad y en un futuro próximo, e incluso la aplicación de nuevas tecnologías ahora en ciernes (criptografía cuántica), podría hacer a algunos de ellos, e incluso a todos ellos, vulnerables frente a este tipo de ataques.

Esto no ocurría en gran parte de los criptosistemas clásicos, por lo que la mayoría de ellos son actualmente susceptibles de ser atacados con éxito mediante el empleo de la fuerza bruta (en algunos casos, los más simples, ni siquiera nos harían falta los ordenadores).

- Análisis de frecuencias: técnica que consiste en explotar la frecuencia de aparición de las letras y grupos de letras en el idioma en el que está escrito un mensaje en claro para poder descifrar los mensajes cifrados sin disponer de la clave.

Al Kindi, en el siglo IX, fue el primero en documentar este tipo de ataque para "romper" cifrados clásicos de sustitución monoalfabética.

En los criptosistemas de sustitución monoalfabética ciertas características del idioma en el que está escrito el texto en claro se trasladan al texto cifrado; tal es el caso de la frecuencia relativa de aparición de las letras y de grupos de letras (bigramas, trigramas, etc.). Es decir, en un texto cifrado mediante un sistema de este tipo, el carácter, dígrafo, etc. que aparezca con mayor frecuencia será el candidato a corresponderse con la letra de mayor frecuencia en el idioma en el que se encuentra escrito el texto en claro (en español la "E") y así sucesivamente (en español: "A", "O",...), y, de la misma forma, los grupos de mayor frecuencia serán los candidatos a corresponderse con los bigramas, trigramas, etc. más frecuentes en dicho idioma (en español: "DE", "EN",... "ENE", "ESE",...).

A lo largo de la historia los criptógrafos han ido ideando diversos métodos para evitar este tipo de ataque (sustitución polialfabética, combinación de sustitución y transposición, etc.), algunos de ellos, como veremos más adelante en el repaso de algunos de los criptosistemas clásicos, con mayor o menor éxito que otros.

- Ataque sólo al criptograma: el criptoanalista conoce el algoritmo de cifrado pero sólo tiene acceso a textos cifrados o criptogramas.

El análisis de frecuencias podría considerarse como un ataque de este tipo.

- Ataque con texto claro conocido: las mismas características que el anterior pero, además, el criptoanalista conoce o infiere parte del texto en claro correspondiente al texto cifrado del que dispone.

Entiendo que el criptoanálisis que realizó Alan Turing al cifrado de la máquina Enigma, basado en la conjetura de que ciertos textos sin cifrar ("cribs") se encontraban en el texto cifrado, puede ser catalogado como un ataque de este tipo.

- Ataque con texto claro (cifrado) escogido: se denomina así al tipo de ataque en el que el criptoanalista puede obtener los textos cifrados (en claro) correspondientes a un conjunto de textos en claro (cifrados) de su elección.

Aunque hablaré de este tipo de criptoanálisis en un post posterior, incluyendo algunas definiciones a las que todavía no he hecho referencia, adelanto que se puede considerar un ataque de este tipo al criptoanálisis diferencial inventado por Eli Biham y Adi Shamir en 1990, aplicable fundamentalmente a los algoritmos simétricos de cifrado por bloques tipo DES (Data Encryption Standard) y que parte de pares de mensajes en claro con diferencias mínimas, estudiando las variaciones que se producen en los correspondientes mensajes cifrados.

Continuemos ahora con el repaso a algunos métodos de criptografía clásica:

1.- Cifrado por sustitución homofónica: con este tipo de cifrado se pretendía "aplanar" o "suavizar" la frecuencia de aparición de los caracteres, símbolos o grupos de éstos en un criptograma. De esta forma se perseguía que las características propias de un idioma en cuanto a la frecuencia de aparición de las letras no se trasladara al criptograma y evitar así el análisis de frecuencias.

Por ejemplo: supongamos que nuestro alfabeto de entrada está constituido por las 27 letras del alfabeto español y nuestro alfabeto de salida por los números del "00" al "99". Así, podríamos asignar a cada letra uno o varios números en función de su frecuencia de aparición en un texto escrito en español, construyendo una tabla, por ejemplo, como la siguiente:
Si sólo utilizáramos un número para sustituir cada carácter de un texto en claro, supongamos que los que figuran en la primera fila de nuestra tabla, para cifrar: "ESTE ES UN EJEMPLO DE CIFRADO", obtendríamos el siguiente criptograma (en grupos de dos dígitos): "21 06 02 21 21 06 14 38 21 37 21 12 13 11 01 04 21 09 08 15 18 05 04 01".

Con lo que en el análisis de frecuencias obtendríamos que "21" aparece en 6 ocasiones y el criptoanalista llegaría a la conclusión de que probablemente se corresponda con la "E" (la letra más frecuente en español), y con mayor cantidad de texto cifrado y el análisis de frecuencias de bigramas, trigramas, etc. no sería muy difícil descifrar los mensajes.

Sin embargo, si utilizamos todas las filas de la tabla anterior el criptograma resultante podría ser el siguiente (en grupos de dos dígitos): "73 06 32 36 29 89 14 80 98 37 48 12 13 51 75 82 44 93 60 15 95 79 04 66", con lo que el criptoanalista no tendría ninguna pista sobre la correspondencia de estos grupos de dos dígitos con las letras del alfabeto español, y con mayor cantidad de texto cifrado tendría serias dificultades al estar "aplanada" o "suavizada" su frecuencia de aparición.

Sin embargo, si se dispone de una gran cantidad de texto cifrado se podrían encontrar secuencias repetidas de caracteres, símbolos o grupos de éstos (en nuestro ejemplo números de dos dígitos) y realizar con éxito un ataque basado en el análisis de frecuencias de bigramas, trigramas, etc.

Conforme a las definiciones que hemos ido incluyendo en estos posts, los sistemas por sustitución homofónica son sistemas de sustitución polialfabética.

2.- Cifrado de Vigenère:
Sobre este método clásico de cifrado, recogido en una obra del siglo XVI escrita por Blaise de Vigenère (aunque quien ideó el método original fue realmente Giovan Battista Bellaso), ya he escrito una entrada en este blog en la que cuento brevemente en qué consistía y también el método Kasiski para criptoanalizar mensajes cifrados con este método.

Se trataba de un sistema de sustitución polialfabética que utilizaba una clave para cambiar de alfabeto, lo que, en principio, imposibilita el ataque mediante el método de análisis de frecuencias, ya que un carácter del texto en claro no se sustituía siempre por la misma letra en el texto cifrado.

Ya vimos en el citado post anterior cómo se cifraba y descifraba un mensaje utilizando este método (muy fácil: carácter que se encuentra en la intersección de la fila del carácter que corresponde al carácter de la clave y de la columna del carácter del texto en claro. Vamos, como en el juego de los barcos).

Sin embargo su vulnerabilidad residía en su naturaleza cíclica (aplicación cíclica de n cifrados de sustitución monoalfabética), de tal manera que si era posible determinar la longitud de la clave observando patrones comunes o repeticiones de caracteres (de 3 o más) en el texto cifrado bastaba con dividir el criptograma en tantos subcriptogramas como número de caracteres tuviera la clave (cada uno de ellos habría sido cifrado utilizando la misma letra de la clave o, lo que es lo mismo, el mismo alfabeto) para poder realizar un análisis de frecuencias sobre cada uno de ellos y obtener la clave empleada.

3.- Cifrado de Playfair:
Se trata de un criptosistema inventado por Charles Wheatstone en el siglo XIX, aunque su nombre se debe a Lyon Playfair que fue quien contribuyó a darlo a conocer.

Este sistema consistía en utilizar una matriz de 5x5 caracteres que se iba rellenando, de izquierda a derecha y de arriba abajo, con las letras de la clave (eliminando las posibles letras repetidas de la misma) y se completaba con el resto de las letras del alfabeto (las que no figurasen en la clave), excluidas la "J" y la "Ñ".

Por ejemplo, utilizando la palabra "PLAYFAIR" como clave, obtendríamos la matriz que se muestra en la figura que ha servido para ilustrar este método.

Cada grupo de dos letras del texto en claro era sustituido por otras dos letras en el texto cifrado, de la siguiente manera (utilizaré como ejemplo el mensaje en claro: "CIFRADO PLAYFAIR" y la clave "PLAYFAIR"):

a) Se agrupaban los caracteres del texto a cifrar dos a dos.

En nuestro ejemplo:

"CI FR AD OP LA YF AI RX".

Si el número de caracteres era impar, como es nuestro caso, se añadía como último carácter una letra sin significado en el mensaje en claro, por ejemplo: "X".

b) Para cada par de caracteres:

b.1) Si ambos caracteres estaban situados en la misma fila cada uno de ellos se sustituía por el carácter situado inmediatamente a su derecha (si el carácter a sustituir era el último de la fila se sustituía por el primero de la fila).

En nuestro ejemplo:
b.2) Si ambos caracteres estaban situados en la misma columna cada uno de ellos se sustituía por el carácter situado inmediatamente debajo de él (si el carácter a sustituir era el último de la columna se sustituía por el primero de la columna).

En nuestro ejemplo ningún par de las letras agrupadas en el texto en claro coinciden en una misma columna, pero suponiendo que hubieran coincidido la "E" y la "U":
b.3) Si ambos caracteres estaban situados en diferente fila y columna, la primera letra se sustituía por aquella situada en su misma fila y la misma columna que la segunda, y la segunda por aquella situada en su misma fila y la misma columna que la primera.

En nuestro ejemplo:
b.4) Si ambos caracteres eran el mismo, es decir, la pareja estaba formada por la misma letra, había que descomponer ese par de letras para formar dos nuevas parejas, lo que se hacía añadiendo una letra sin significado tanto al primer carácter como al segundo, y después se cifraban ambos nuevos pares de letras conforme a las reglas anteriores.

En nuestro ejemplo ningún par de las letras agrupadas en el texto en claro está formado por dos letras iguales, pero suponiendo que uno de ellos fuera, por ejemplo, "AA" habría que formar dos nuevas parejas, por ejemplo: "AX" y "AX" y aplicarles las reglas de cifrado anteriores.

Conforme a todo lo indicado, en nuestro ejemplo, se obtendría:

Texto en claro    ---> "CIFRADO PLAYFAIR".
Pares de letras  ---> "CI  FR AD OP LA  YF  AI  RX".
Criptograma      ---> "DR LD FB NL  AY FP PB CV".

Por tanto, se trataba de un criptosistema de sustitución monoalfabética, ya que cada pareja de letras del mensaje en claro se sustituía siempre por el mismo dígrafo (grupo de dos letras) en el texto cifrado.

En este caso, aunque el cifrado de pares de caracteres imposibilitaba el análisis de frecuencias de las letras en el idioma en el que estuviera escrito el mensaje en claro, la vulnerabilidad venía dada porque algunas características propias del idioma, en este caso la frecuencia de aparición de bigramas, persistían en el texto cifrado.

4.- Cifrado de Vernam:
Este criptosistema inventado en 1917 por Gilbert S. Vernam, aunque posteriormente Joseph Mauborgne hizo una contribución decisiva al mismo, consistía en utilizar como clave una secuencia aleatoria de igual longitud que el mensaje, combinándola carácter a carácter con el texto mediante una función reversible. Dicha secuencia se usaba una única vez (lo que se conoce en inglés como one-time pad) y tras su uso se destruía.

La función era una XOR u o-exclusivo (suma módulo 2, ver figura) aplicada a los bits utilizados para codificar los caracteres en código Baudot de teletipos.

El código de Baudot representaba las letras, dígitos y algunos caracteres especiales mediante cinco posiciones con un espacio o una marca, es decir, cinco bits (25 caracteres), de la siguiente manera:
Por tanto, la función de cifrado podría expresarse en este caso como: Ek(mi) = (mi + ki) mod 2 = mi XOR ki, mientras que la de descifrado sería: Dk(ci) = (ci + ki ) mod 2 = ci XOR ki.

Veamos un ejemplo de cifrado:
Por tanto, conforme a las definiciones comentadas hasta este momento, se trataba de otro criptosistema de sustitución polialfabética, ya que cada carácter del mensaje en claro no se sustituía siempre por el mismo carácter en el texto cifrado.

Para descifrar un criptograma bastaba con volver a combinar la clave carácter a carácter con el texto cifrado mediante la función XOR u o-exclusivo (suma módulo 2). En nuestro ejemplo de la siguiente manera:
5.- Cifrado ADFGVX:
Sobre este cifrado, así como sobre su criptoanálisis, ya he escrito algunas entradas en este blog, por lo que me limitaré a decir que era un criptosistema que combinaba la sustitución monoalfabética con la transposición. Esto último, precisamente, para evitar una ataque mediante el análisis de frecuencias.

Este cifrado fue "roto" muy pocas veces durante la I Guerra Mundial, si bien es cierto que se empezó a utilizar al final de la misma.

Como comento en las entradas a las que he hecho referencia, las labores de criptoanálisis que llevó a cabo en ese momento Georges Painvin se centraron en mensajes interceptados muy esteriotipados, con comienzos y/o finales de los mismos muy similares, y podemos decir que se trató de un ataque sólo al criptograma, eso sí, basado en la inestimable ayuda que le brindaban los alemanes al transmitir mensajes cifrados con la misma clave (todos los de un día) con secuencias de caracteres comunes entre ellos.

Mediante esas secuencias de caracteres comunes entre criptogramas, Georges Painvin era capaz de deducir la longitud de la clave con la que se habían cifrado los mensajes de un mismo día y deshacer la transposición de las columnas que se había realizado ordenando alfabéticamente los caracteres de la clave. Una vez hecho esto, con el suficiente número de mensajes interceptados, bastaba con realizar un análisis de frecuencias de los dígrafos del mensaje (letras, bigramas, trigramas,...) para obtener el texto en claro de todos los mensajes de un mismo día.

Esto nos recuerda que en la seguridad de la información, y la criptografía no es una excepción, el eslabón más débil de la cadena de seguridad lo constituyen las personas; podemos tener un criptosistema muy robusto, el cifrado ADFGVX lo era para su época, pero éste será finalmente "roto" si las personas que lo utilizan hacen un uso no adecuado de él.

6.- Máquinas de cifrado del siglo XX:
Sobre la máquina más famosa de este tipo, la máquina Enigma, también he escrito varios posts en este blog, por lo que en éste también me limitaré a decir que se trataba de un criptosistema de sustitución polialfabética, pero esta vez con tal número de alfabetos involucrados que lo hacían prácticamente invulnerable a los métodos de criptoanálisis conocidos hasta la fecha, o, al menos, así lo creían los alemanes.

El cifrado de esta máquina también fue criptoanalizado con éxito o, al menos, con un relativo acierto, en primer lugar por los polacos y después por los británicos, pero en mi opinión lo que llevó a ello tampoco fue, otra vez y al menos en lo fundamental, una vulnerabilidad propia del sistema, sino el uso inadecuado que de él hicieron las personas (repetición al inicio del mensaje de los caracteres correspondientes a la clave de sesión, falta de disciplina de los operadores alemanes al elegir estos caracteres - repetidos, consecutivos,... -, excesivo formalismo de los mensajes con comienzos o finales muy esteriotipados, envío de mensajes a la misma hora con contenido y estructura muy similares - partes metereológicos - ,...).

No obstante, en el siglo XX se inventaron y utilizaron otras máquinas de cifrado, tales como: Purple, Typex, SIGABA,...

Hasta aquí este post, en el que he repasado algunos de los criptosistemas clásicos y que me ha servido adicionalmente para introducir algún nuevo concepto, y en el siguiente introduciré ciertos conceptos relativos a los criptosistemas modernos.

sábado, 10 de octubre de 2015

Criptografía (XVII): criptología para todos (I)

Como se ha puesto de manifiesto en todos los posts de esta serie, no soy un experto en la materia y mis únicas pretensiones son aprender sobre un tema que me resulta apasionante y contribuir, en la medida que mi capacidad y talento me lo permitan (de verdad, poco en ambos casos), a divulgarlo de una forma comprensible entre aquellas personas que estén interesadas, espero que sin cometer demasiados errores.

Antes de continuar con otros posts de esta serie, en los que compartiré lo que voy aprendiendo sobre la criptografía moderna, aunque sin olvidarme de la clásica (ya que en mi opinión su conocimiento es fundamental para entender los criptosistemas modernos), creo que es necesario sentar ciertas definiciones y conceptos, algunos de lo cuales se han avanzado en los anteriores y serán empleados en los siguientes:

Criptografía (Diccionario RAE): (Del gr. κρυπτός, oculto, y -grafíaArte de escribir con clave secreta o de un modo enigmático.

Critptoanálisis (Diccionario RAE)(Del gr. κρυπτός, oculto, y análisisArte de descifrar criptogramas.

De lo que entiendo que la última es la contraria de la primera, aunque creo que lo más adecuado puede ser entender que ambas técnicas son complementarias (llamarles ciencias me parece muy pretencioso. La verdadera ciencia que subyace en todo esto, como en casi todo, son las matemáticas).

Criptología: Que yo haya visto no se recoge en el Diccionario de la RAE, pero entiendo que es un término que se emplea para agrupar a las dos definiciones anteriores, y de ahí el título dado a esta pequeña serie de posts, ya que en ellos hablaré tanto de criptografía como de criptoanálisis.


Criptosistema: Que yo haya podido ver tampoco se recoge en el Diccionario de la RAE, pero creo que se podría definir como el sistema mediante el cuál una quíntupla de elementos interactúan en la transformación de un mensaje inteligible en un mensaje cifrado o criptograma: (M, C, K, E, D).

Siendo:

M: Conjunto finito de todos los mensajes sin cifrar o texto en claro (en inglés plain text).
C: Conjunto finito de todos los mensajes cifrados o criptogramas (en inglés cipher text).
K: Conjunto finito de todas las claves (en inglés key) que se pueden emplear, tanto en el cifrado como en el descifrado.
E: Conjunto de funciones o transformaciones de cifrado (en inglés encrypt) que se aplica a cada elemento de M para obtener un elemento de C.
D: Conjunto de funciones o transformaciones de descifrado (en inglés decryptque se aplica a cada elemento de C para obtener un elemento de M.

Por lo que, evidentemente, el criptosistema debe cumplir necesariamente que si se cifra un mensaje m (m є Mutilizando la clave k (k є K) y después lo desciframos utilizando la clave (k), que puede o no ser la misma que la empleada para cifrar (de esto ya hablaremos después), se obtiene el mismo mensaje (m), es decir: Dk(Ek(m)) = m.

- Esteganografía: (Del gri στεγανος - steganos: cubierto u oculto, y γραφος - graphos: escritura) Estudio y aplicación de técnicas que permiten ocultar mensajes en otro tipo de información de tal manera que los primeros pasen inadvertidos para las personas que, aún teniendo acceso a su contenido, no sean los destinatarios de los mensajes. El mensaje oculto puede "viajar" dentro de la información que lo contiene en claro o cifrado.    

La esteganografía es también muy antigua y ha sido ámpliamente utilizada por multitud de culturas con técnicas muy diversas y también ha ido evolucionado a lo largo del tiempo. Ejemplos: letras situadas en un orden concreto en un determinado texto, tinta invisible, uso del bit menos significativo en una imagen digital, ocultación de mensajes en archivos digitales de vídeo y audio, etc.

Además, puede ser el complemento perfecto a la criptografia, ya que combinadas ambas técnicas, antes que nada, las personas que pudieran tener acceso a la información deberían sospechar que hay un mensaje oculto y, aún así, se encontrarían con que éste está cifrado.     

Repasemos ahora algunos de los criptosistemas clásicos para introducir algunos conceptos adicionales.

1.- La escítala espartana:
Se trata de uno de los sistemas criptográficos más antiguos que se conocen, utilizado en el siglo V a.C. en las guerras entre Atenas y Esparta, y era un sistema de transposición, es decir, sólo el orden de cada carácter del texto en claro resultaba alterado en el texto cifrado, sin que existiera ninguna sustitución de éstos por otro u otros caracteres.

El sistema consistía en varas de similar grosor o diámetro, que tenían que tener tanto el emisor como el receptor de los mensajes, y en cintas de cuero o papiro en las que se enviaba el mensaje.

Para cifrar un mensaje se enrrollaba la cinta en la vara y se escribía el mensaje a cifrar longitudinalmente, de la siguiente manera (texto en claro: "ESCITALAEJEMPLODECIFRADO"):
Así, si algún ateniense interceptaba el mensaje no entendería un carajo, puesto que leería en la cinta desenrrollada el mensaje cifrado: "EJISEFCMRIPATLDAOOLDAEEC".

Evidentemente, para leer el texto en claro bastaba con volver a enrrollar la cinta en una vara del mismo diámetro o similar.

2.- Cifrado de Polibio:
En el siglo II a.C Polybius ideó otro de los sistemas criptográficos más antiguos que se conocen.

En este caso se trata de un sistema criptográfico de sustitución, en contraposición con un sistema de transposición, ya que el orden de cada carácter del texto en claro no resulta alterado en el texto cifrado, sino que cada uno de ellos es sustituido por otro u otros caracteres.

Se trata, asimismo, de un sistema de sustitución monoalfabética, en contraposición con un sistema de sustitución polialfabética, porque se emplea un único alfabeto, es decir, cada carácter del texto en claro se sustituye siempre por el mismo o mismos caracteres en el texto cifrado.

El sistema consistía en un tablero de 5x5 cuadrículas en las que se colocaban las letras del alfabeto (ver figura).

Para cifrar un mensaje se sustituía cada uno de los caracteres del texto a cifrar por el dígrafo o grupo de dos letras que le correspondía en el tablero, es decir, cada letra del texto en claro se sustituía por la letra de la fila y de la columna que correspondían a la cuadrícula en la que estaba.

Por ejemplo, si el texto en claro fuera: "EJEMPLOCIFRADOPOLIBIO" obtendríamos el texto cifrado o criptograma: "AEBDAECBCECACDACBDBAVBAAADCDCECDCABDABBDCD". 

3.- Cifrado César:

Otro de los sistemas criptográficos más antiguos que se conocen, utilizado en el siglo I a.C. y que debe su nombre a Julio César. Era un sistema de sustitución monoalfabética.

En este caso cada carácter del texto en claro es sustituido por otro carácter del alfabeto situado un número fijo de posiciones por delante (típicamente tres posiciones), y es monoalfabético porque se emplea un único alfabeto, es decir, cada carácter del texto en claro se sustituye siempre por el mismo carácter en el texto cifrado.

Como digo, para cifrar un mensaje lo único que había que hacer era sustituir cada carácter del texto en claro por aquél que se encontraba tres posiciones por delante de éste en el alfabeto.

Ejemplo:
De esta forma, si algún bárbaro no analfabeto y versado en latín (digo yo que alguno habría) interceptaba el mensaje tampoco entendería un carajo, puesto que leería el mensaje cifrado que se muestra en la figura anterior.

Evidentemente, para descifrar el mensaje bastaba con sustituir cada uno de sus caracteres por aquél que se encontraba tres posiciones por detrás de cada uno de ellos en el alfabeto:
Este cifrado, lógicamente, puede generalizarse para utilizar cualquier desplazamiento (hasta 26) y, en ese caso, el desplazamiento utilizado para cifrar un mensaje sería la clave, pudiendo expresarse la función de cifrado como: Ek(m) = (m+k) mod 26,  y la de descifrado como: Dk(c) = (c-k) mod 26.

4. Cifrado de Alberti:
Fue inventado en el siglo XV por Leon Battista Alberti y era un sistema de sustitución polialfabética, es decir, en este caso, en contraposición con un sistema de sustitución monoalfabética, se pueden emplear diversos alfabetos (hasta un máximo de 24) y, por tanto, cada carácter del texto en claro no se sustituye siempre por el mismo carácter en el texto cifrado.

El sistema consistía en discos, que tenían dos círculos concéntricos o anillos, de los que debían disponer tanto el emisor como el receptor de los mensajes.

Cada disco tenía grabados en su anillo exterior, que era fijo, los caracteres del latín (excluidos "H", "K" e "Y", en mayúsculas y ordenados alfabéticamente; en total 20 caracteres) y los cuatro primeros dígitos (ordenados del 1 al 4). Por tanto, en total había 24 casillas. Este anillo se utilizaba para el texto en claro.

Cada disco disponía también de un anillo interior móvil en el que estaban grabados los 23 caracteres del latín ("h", "k" e "y" incluidos, en minúsculas y desordenados) más "&". Por tanto, en total tenía también 24 casillas. Este anillo se utilizaba para el texto cifrado.

Los dígitos del anillo exterior servían, entre otras cosas que veremos en un ejemplo un poco más adelante, para sustituir palabras o frases relevantes en el mensaje en claro por el grupo de dos, tres o cuatro dígitos que se les había asignado a cada una de ellas. Es decir, Alberti elaboró un libro de códigos con todas las combinaciones posibles de dos, tres y cuatro dígitos del 1 al 4 ("11" a "4444"; en total 336 combinaciones posibles) y le asignó a cada una de ellas un significado (palabra o frase). Esto es lo que se conoció como código de recifrado. Lógicamente, ese libro de códigos debía ser compartido también por el emisor y por el receptor de los mensajes. Para el ejemplo de cifrado que viene a continuación supongamos que "11" significa "ALBERTI".

Para cifrar un mensaje, supongamos que el texto en claro es: "CIFRADO DE ALBERTI", el emisor y el receptor se tenían que poner de acuerdo en la letra mayúscula del carácter del anillo externo fijo que utilizarían como clave, en nuestro ejemplo supongamos que la "A".

Entonces, el emisor giraba el anillo interno móvil hasta hacer coincidir la letra minúscula que deseaba, en nuestro ejemplo supongamos que la "m", con la letra mayúscula del carácter del anillo externo fijo que hemos elegido como clave (en nuestro ejemplo la "A"), tal y como se muestra en la figura.

En nuestro ejemplo el primer carácter del mensaje cifrado sería la "m", para indicar al receptor la posición relativa de los anillos que determina la correspondencia inicial de los caracteres, es decir, el primer alfabeto de sustitución a utilizar.

A partir de ahí (con esa posición de los anillos), el emisor cifraba los caracteres del texto en claro que quería hasta que decidía cambiar de alfabeto.

En nuestro ejemplo supongamos que decide cifrar con ese alfabeto la primera palabra del mensaje cifrado, "CIFRADO", con lo que obtendría como mensaje cifrado hasta ese momento: "miadpmhk" (recordar que el primer carácter "m" es para indicar al receptor la posición relativa de los anillos), y que a partir de ese momento decide cambiar de alfabeto.

Cuando el emisor decidía cambiar de alfabeto incluía en el texto cifrado el dígito (del 1 al 4) del anillo externo fijo (en nuestro ejemplo supongamos que elige el 3) cuya letra minúscula (la que coincidía en ese momento con el dígito seleccionado, en nuestro caso la "s") debía mover el receptor hasta hacer que coincidiera con el carácter utilizado como clave (en nuestro caso la "A"), tal y como se muestra en la figura.

Y después continuaba cifrando los caracteres del texto en claro que deseaba. Supongamos que en nuestro caso decide cifrar el texto en claro con el nuevo alfabeto hasta el final, con lo que el texto cifrado quedaría: "miadpmhk3qizz" (recordar que el dígito "3" se incluye para indicar al receptor que gire el anillo interno hasta la nueva posición relativa de los anillos, es decir, para utilizar un nuevo alfabeto).

Y, ¿de dónde salen los caracteres "zz" del final?. Para ello hay que tener en cuenta lo que he comentado sobre el código de recifrado y que en nuestro ejemplo hemos dicho que el grupo de dos dígitos "11" significa "ALBERTI", es decir, el emisor ha sustituido "ALBERTI" por "11" en el texto en claro y ha cifrado ese grupo de dos dígitos conforme a la posición relativa de los anillos en ese momento, obteniendo como resultado "zz".

Evidentemente, en el proceso de descifrado el receptor del mensaje giraba el anillo interno hasta hacer coincidir el primer carácter del texto cifrado (en nuestro ejemplo "m") con el carácter mayúscula del anillo externo correspondiente a la letra que había pactado con el emisor como clave (en nuestro caso "A". Ver la primera figura del ejemplo) e iba obteniendo el texto en claro (en nuestro caso: "CIFRADO"), y cuando se encontraba un dígito en el texto cifrado giraba el anillo interno hasta hacer coincidir la letra minúscula que en ese momento coincidiera con él (en nuestro ejemplo se encontraría con el 3 en el mensaje cifrado y este dígito coincide con la "s") con el carácter utilizado como clave (en nuestro caso la "A". Ver la segunda figura del ejemplo) y continuaba descifrando el mensaje con la nueva posición relativa de los anillos (obteniendo en nuestro caso el siguiente texto en claro: "CIFRADODE11").

Si en el texto en claro el receptor se encontraba con grupos de dos, tres o cuatro dígitos acudía al libro de códigos para conocer qué palabras o frases estaban asociadas a cada uno de ellos (en nuestro ejemplo "11" significa "ALBERTI"), obteniendo como resultado el texto en claro definitivo (en nuestro caso "CIFRADO DE ALBERTI").


Hasta aquí este post, por no hacerlo excesivamente largo, y en el siguiente continuaré repasando algunos de los criptosistemas clásicos que me servirán para introducir nuevas definiciones y conceptos que considero importantes.

domingo, 4 de octubre de 2015

Reto: criptoanálisis cifrado ADFGVX (IV)

Último post de esta pequeña serie en el que pongo la solución a nuestro pequeño reto de criptoanálisis sobre mensajes cifrados con el sistema ADFGVX utilizado por el ejército alemán en la I Guerra Mundial.

En el anterior hice la pregunta para resolver este último paso, ésta era:

¿Se puede intentar averiguar el orden de entre estas dos posibilidades; merece la pena o pasamos ya al análisis de frecuencias de los dígrafos para intentar descifrar los mensajes?.

En ella me refería a que en el post anterior llegamos a dos posibles soluciones para el orden de los caracteres de la clave antes de la transposición de las columnas:

4-7-3-5-9-8-10-11-1-6-12-2 o 7-4-5-3-8-9-11-10-6-1-2-12.

Pues bien, yo creo que no merece la pena intentar averiguar cuál de estos dos órdenes es el correcto, ya que intuyo que escojamos el que escojamos seremos capaces de descifrar los mensajes a través del análisis de frecuencias. Es decir, en un caso haríamos el análisis con los dígrafos resultantes de la ordenación de las columnas antes de su transposición correspondientes a uno de estos órdenes y en el otro con esos mismos dígrafos pero con sus caracteres individuales intercambiados respecto al anterior.

Para que se me entienda lo que quiero decir desvelo la clave utilizada para cifrar los mensajes e incluso la tabla empleada para obtener los dígrafos antes de la transposición de las columnas.

La tabla es la siguiente:
Mientras que en lo que respecta a la clave, ya decía en el post en el que planteé este reto que "lo importante es la clave"; y esto es así en sentido literal, ya que la clave que se ha utilizado es "LOIMPORTANTE".

Por tanto:
Entonces, como se observa en la figura anterior el orden correcto de los caracteres de la clave antes de la transposición de las columnas es:

4-7-3-5-9-8-10-11-1-6-12-2.

Sin embargo, voy a utilizar el otro orden posible en al análisis de frecuencias, es decir:

7-4-5-3-8-9-11-10-6-1-2-12.

Evidentemente, éste no se corresponde con el orden correcto de los caracteres de la clave antes de la transposición, sino con aquél que resulta de intercambiar estos dos a dos:
Lo que, a su vez y como consecuencia, nos llevará a obtener la tabla transpuesta (la que se obtiene al intercambiar filas por columnas) de la que realmente se ha empleado:
Pero, como digo, creo que también descifraremos los mensajes.

Veámoslo:

Como el texto en claro está escrito en español tenemos que tener en cuenta la frecuencia relativa de aparición de los caracteres en los textos escritos en dicho idioma y compararla con la de los dígrafos que se obtienen una vez deshecha la transposición de las columnas, que son los siguientes para el orden de los caracteres de la clave antes de la transposición que hemos elegido (7-4-5-3-8-9-11-10-6-1-2-12):
La frecuencia de aparición de las letras en español y, por otra parte, de estos dígrafos en los mensajes antes de la transposición de las columnas es la siguiente:
Lógicamente, esta frecuencia de aparición de los dígrafos es la misma que para los dígrafos que resultarían de aplicar el otro orden posible de los caracteres de la clave antes de la transposición, pero con los caracteres individuales de estos intercambiados. Es decir, por ejemplo, para el dígrafo "XD" obtenemos la misma frecuencia relativa que obtendríamos para el dígrafo "DX" si utilizáramos el otro orden posible.

Como se observa en la tabla anterior el dígrafo "XD" (o "DX" en caso de utilizarse el otro orden posible) es el candidato a corresponderse con la letra "E" (la de mayor frecuencia en español) y "AG" (o "GA" en el caso del otro orden) podría corresponderse con la "A" (la segunda más frecuente en español).

El análisis posterior de la frecuencia de los bigramas y trigamas (grupos de dos y tres letras, respectivamente), ver un ejemplo detallado en este post anterior, nos permitirá identificar ciertas correspondencias de los dígrafos con las letras en español y, en consecuencia, nos llevará a poder descifrar los mensajes.

SOLUCIÓN: El texto en claro de los mensajes es el mismo que el de los mensajes que utilicé en el post en el que expliqué el análisis de frecuencias de los bigramas y trigramas.