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.

No hay comentarios:

Publicar un comentario