Desde hace mucho tiempo que la criptología es uno de los temas que apasionan, aunque para indagar de verdad necesitas alto conocimiento matemático que espero algún dia nos enseñen en la uni. Sin ningún tipo de conocimiento básico, lo primero que se nos puede ocurrir para encriptar un texto, es la rotación (método Cesar) o la traducción.
El término traducción al que me refiero puede ser muy amplio, y esta idea que le da un toque personal a esta entrada, me viene de hace muchos años cuando oí en la tele que el japonés originariamente se diseñó para que unos cuantos lo hablasen y no les entendieran, como un tipo de encriptación del lenguaje. Cierto o no, nos vamos a valer de eso.
El tema de la rotación no tiene mucho misterio. Se basa en rotar el abecedario, de manera que si hacemos una rotación 3:
Osease, que el texto “hola mundo”, podria quedar encriptado de la siguiente manera, “krod pxpgr”. Una persona que vea esto puede sacar algunas deducciones y hacer pruebas.
- Al haber un espacio entre dos grupos de letras, se puede deducir que se tratan de dos palabras.
- Al no ser de un tamaño raro, se pueden considerar letras que forman palabras, sin más.
- Para desencriptarlo, lo primero que se nos puede ocurrir es hacer una rotación debido a lo fácil que es programar algo, para que nos rote un texto de manera automática de todas las formas posibles.
Como podemos deducir, la rotación sin más, no es un método seguro. Pero, ¿y si además de rotar hacemos una traducción? Esa era mi idea desde el principio, y valiéndome de lo que conté del japonés, podemos usar los propios kanjis del japonés para traducir (aunque usaré ‘kanas’ para los más quisquillosos).
De manera que (traduciendo también el espacio en blanco), nuestro “krod pxpgr” se puede transformar en un “ゼかとつこにギヲちな” por poner un ejemplo.
Ya parece un poco más complicado de desencriptar, ¿verdad? Vamos a pararnos aquí y vamos a pensar en la herramienta desencriptradora, ya que si hacemos una encriptación, es lógico que necesitamos otra herramienta que nos recorra el camino inverso.
En este proceso, hemos necesitado dos premisas: la primera de ellas es la rotación que hemos tomado, y la segunda, la traducción. El tema de la traducción no tiene ningún misterio, ya que en una matriz podemos tener todos los caracteres que vamos a traducir, y en otra la traducción de cada uno. Y por último, el tema de la rotación, lo podemos pasar en la propia cadena, me explico, después de traducir “hola mundo” por “krod pxpgr”, al usar una rotación 3, podemos traducir el texto originario a “krod pxpgr3”. Y posteriormente lo traducimos a kanjis japoneses ゼかとつこにギヲちなズ. De esta forma hacemos lo siguiente para desencriptar: traducimos -> obtenemos el número de rotación -> rotamos.
Perfecto, pues ya tenemos nuestra cadena encriptada a un lenguaje con símbolos raros que no tienen absolutamente nada que ver con los nuestros. Sin embargo, esto sigue teniendo varios fallos.
A lo largo de la historia, las personas han sido capaces de desencriptar lenguajes escritos (como los jeroglíficos por ejemplo), entonces, desencriptar un simple “hola mundo” debe ser pan comido. Esto lo han conseguido observando el patrón que siguen las palabras, la cantidad de veces que se usan las letras (por ejemplo, para el castellano en particular, las vocales y los espacios en blanco son muy usados) ¿Cómo podemos hacer más fuerte el sistema? Podemos hacer algo en relación a lo que hemos explicado anteriormente con la rotación.
Podemos hacer que cada vez que hagamos un mensaje, aunque sea el mismo, se traduzca de distinta manera, ya que cada vez lo rotamos de forma distinta. Esto no es muy complicado, ya que como pasamos en el propio mensaje las posiciones en las que lo rotamos, desrotarlo debe ser dificil.
De esta forma, cuando encriptemos una frase, en esa propia frase estará la clave para desencriptarla.
Todavía más
¿Cómo podemos hacer esto todavia más fuerte? Recordais las dos matrices de las que hablé antes?, una con los caracteres a traducir y otra con la traducción. Para hacer todavía más fuerte esto, podemos valernos de caracteres de distintos idiomas (para liarlo más) y que, a la hora de traducir, en lugar de traducir letras, traduzcamos sílabas. Tendremos más cosas que traducir claro está, pero será más fuerte por tener más variedad en el conjunto.
Un saludo, lipman