Solución Kriptojuego 20080131: La vergüenza española (I)
Cuando al ser humano se le ocurre cifrar un mensaje, intuitivamente le vienen a la cabeza dos formas de hacerlo:
- Cambiar las letras de sitio (se denomina Transposición, y vimos un ejemplo un tanto alambicado en el kriptojuego anterior).
- Cambiar las letras originales por otras (pertenecientes al mismo alfabeto o a otros), siguiendo obviamente alguna regla que permita revertir el cifrado. Es la denominada Sustitución, que practicamos en este kriptojuego.
Tanta es la importancia de ambos métodos, que aún subyacen en muchos de los sistemas más modernos...
Al igual que hay muchas formas de transposición, existen muchas modalidades de sustitución (por ejemplo: carácter a carácter o en grupos de 2, 3 o más; usando varios alfabetos en lugar de uno de forma periódica o aperiódica, etc). En este artículo trataremos sólo el método utilizado en este kriptojuego, es decir, el cifrado por sustitución monoalfabética y monográmica con alfabeto estándar (ya tendremos ocasión de tratar otros tipos en nuevos kriptojuegos).
CIFRADO POR SUSTITUCIÓN
A la hora de cifrar un mensaje sustituyendo unos caracteres por otros, es necesario en primer lugar decidir cuál será el alfabeto de cifrado y/o cómo construirlo.
1. Desplazamiento puro: César
Una forma sencilla podría consistir en simplemente desplazar un número fijo de lugares los caracteres del alfabeto original, retomando de nuevo el principio cuando se nos acaben éstos. Es el clásico método atribuido al emperador César por el historiador Suetonio, en que cada carácter del alfabeto latino original se desplazaba tres lugares hacia la derecha para obtener el alfabeto cifrado. En el caso del alfabeto inglés de 26 letras (que serían 27 en el castellano con ñ) tendríamos:
a b c d e f g h i j k l m n o p q r s t u v w x y z -> Alfabeto original D E F G H I J K L M N O P Q R S T U V W X Y Z A B C -> Alfabeto cifrado
Por ejemplo, al cifrar "kriptopolis" obtendríamos lo siguiente:
k r i p t o p o l i s N U L S W R S R O L V
En CrypTool:
Cifrado: Menú: File -> New Escribimos kriptopolis Menú: Crypt/Decrypt -> Symmetric (classic) -> Caesar/ROT-13 Pantalla: Key entry as -> Alphabet character: Escribimos D Pulsamos botón Encrypt Descifrado: Menú: Analysis -> Symmetric Encription (classic) -> Ciphertext-Only -> Caesar
Puesto que con este alfabeto de 26 caracteres sólo caben 25 posibles desplazamientos (y por tanto 25 alfabetos cifrados) distintos, el descifrado resultaría trivial, pues sólo habría que probar consecutivamente las 25 "claves" posibles, hasta dar con el mensaje en claro. Demasiado fácil, incluso con lápiz y papel.
2. Desplazamiento más palabra clave
Una forma de reforzar este cifrado es añadir una palabra clave al alfabeto cifrado, que puede insertarse en cualquier posición y desplaza al resto de caracteres, evitando posibles repeticiones. Por ejemplo, puedo añadir la clave MADRID al principio del alfabeto cifrado, resultando:
a b c d e f g h i j k l m n o p q r s t u v w x y z -> Alfabeto original M A D R I J K L N O P Q S T U V W X Y Z B C E F G H -> Alfabeto cifrado
En este caso:
k r i p t o p o l i s P X N V Z U V U Q N Y
Esta sencilla modificación complica teóricamente bastante el descifrado, porque ahora ya no basta enfrentar el mensaje a sólo 25 claves, sino que ha de contrastarse con muchísimas más (siempre que se desconozca la palabra clave MADRID, claro). Es éste precisamente el sistema que he utilizado en este kriptojuego, mediante la clave KRYPTOS.
En CrypTool:
Cifrado: Menú: File -> New Escribimos el texto a cifrar (o lo pegamos desde el portapapeles). Menú: Crypt/Decrypt -> Symmetric (classic) -> Substitution/Atbash Pantalla: Key input -> Key: Escribimos KRYPTOS (o la clave deseada). Observar cómo los caracteres a la derecha se van desplazando, desapareciendo todos los que puedan estar ya en la clave. Pulsamos botón Encrypt. Descifrado: Lo veremos más adelante, al mostrar cómo se resuelve el propio kriptojuego.
3. Alfabeto de cifrado aleatorio
Pero se puede aumentar muchísimo más el espacio de claves (hasta 26!, es decir, un cuatro seguido de 26 ceros, si mis matemáticas y mi calculadora no me fallan ;) si prescindimos totalmente del algoritmo de desplazamiento y utilizamos en su lugar un alfabeto de cifrado totalmente aleatorio. Tenemos entonces el inconveniente de que la clave (en este caso todo el alfabeto) es mucho más complicada de transmitir (y ya no digamos recordar). El alfabeto de cifrado no puede contener caracteres repetidos e incluso algunos -o todos- los caracteres podrían sustituirse por símbolos, formando así un alfabeto mixto (el caso relatado en "El Escarabajo de Oro", de Edgar Allan Poe), algo que sólo aparentemente parece complicar el criptoanálisis, porque en cualquiera de estos casos el ataque por fuerza bruta (es decir, probando todas las claves posibles) resulta impracticable.
Esa sensación de seguridad, que tardó casi 1.000 años de demostrarse falsa (como algunos de nuestros lectores han verificado por sí mismos), fue la culpable de que la criptografía apenas evolucionara en tan largo período de la Historia, así como de algunos episodios trágicos -y otros simplemente embarazosos- que comentamos en la siguiente entrega, gracias a la cual entenderéis el por qué del sorprendente titulo de esta nota (al menos los que no hayáis leido aún a Singh ;)

- 1123 lecturas
Twitter

Hola,muy interesante.......
Hola,
muy interesante... estoy impaciente por el proximo articulo.
He dado con esta web hace poco y me ha parecido tan interesante que me estoy interesando con la criptologia (y estos minijuegos XDDD).
¿Por donde deberia empezar a aprender sobre esta materia?
saludos y gracias por vuestro sabio consejo
javi
Pinitos de Criptografía en C
Hace un par de años, en mis estudios de informática, realicé un ejercicio de implementar en C el método de Julio César, pero como me pareció muy pueril, amplié el programa a una sistema incremental que llamé Tritemio (aunque creo que no es el mismo sistema que se utilizaba en la edad media), y finalmente un invento propio que llamé Aleatix, y que utiliza el sistema de desplazamiento pero basado en el generador psudoaleatorio de C, de 99 millones de posibilidades, y con el código numérico que se utiliza como clave de cifrado que establece la "semilla" del generador.
El programa está documentado en mi web http://anilandro.googlepages.com, en el apartado "Criptografía en lenguaje C". En realidad no es nada del otro mundo, pero quien se lo mire con atención tal vez descubra el truco que encierra en su interior.
Saludos a todos
Autodidacta
La verdad que, para cualquier persona autodidacta, estos juegos son una gran introducción a la criptografía. Ofrece un montón de puntas para empezar a buscar información útil.