Criptografía
La criptografía es la ciencia que estudia la transformación de un determinado mensaje en un código de forma tal que a partir de dicho código solo algunas personas sean capaces de recuperar el mensaje original. En general se utiliza para ello una palabra clave o 'password' con la cual se cifra el mensaje, el código resultante solamente puede ser descifrado por aquellos que conozcan el password.
La criptografía es una actividad muy antigua: Ya en la época de los griegos se supone que existían métodos para codificar los mensajes que se enviaban a las tropas en regiones alejadas, sin embargo, el primer criptosistema del cual se tienen pruebas de su existencia fue utilizado en la época del imperio romano y se llamaba 'CAESAR' el sistema era utilizado por Julio Cesar para enviar mensajes cifrados a sus allegados mas cercanos, hablaremos del criptosistema 'CAESAR' muy pronto.
Junto a la criptografía coexiste necesariamente otra disciplina: el criptoanálisis, mientras que los criptógrafos se encargan de desarrollar criptosistemas cada vez mas seguros y difíciles de descifrar los criptoanalistas tratan de 'romper' un criptosistema obteniendo el mensaje a partir del código cifrado. De estos dos bandos con objetivos diametralmente opuestos siempre se afirma que alguno de los bandos es el 'lado bueno' y el otro inevitablemente 'los chicos malos' estos roles se pueden intercambiar indefinidamente dependiendo de la situación y el contexto en el cual estudiemos el tema. En este texto desarrollaremos la teoría operativa y técnicas mas habituales tanto de los criptógrafos como de los criptoanalistas.
Lamentablemente la criptografía y su ciencia paralela el criptoanálisis son disciplinas que experimentan marcados avances en épocas de guerra, allí es necesaria la comunicación de estrategias, planes tácticos e informes super secretos entre las distintas fuerzas de cada bando de forma tal que si el código es interceptado por un eventual enemigo este no pueda hacerse de la información que se envío. La criptografía experimenta su mayor avance durante el transcurso de la segunda guerra mundial en donde adquiere un protagonismo singular, allí, el criptosistema de la maquina alemana 'Enigma' es roto por los criptoanalistas de las fuerzas aliadas siendo éste un factor que contribuyo en gran medida a la victoria final de los aliados. En este caso los criptógrafos alemanes eran los 'malos' y los criptoanalistas aliados eran 'los buenos', pero si nosotros queremos enviar un mensaje secreto a alguien y el mismo resulta publicado en un diario vamos a pensar que los criptoanalistas son personas sumamente viles. Como vemos todo depende de la situación.
Afortunadamente la criptografía experimenta su segundo gran auge con la masificación de las comunicaciones digitales y el advenimiento de la era de las computadoras. Hoy en día suele ser necesario enviar y recibir mensajes a través de Internet de forma tal que el mensaje solo pueda ser entendido por alguna persona en particular, por ejemplo si enviamos nuestro numero de tarjeta de crédito queremos que lo obtenga solamente el vendedor y no algún criptoanalista pakistaní que pasaba por allí. En los últimos años la criptografía se ha convertido en una ciencia de enorme importancia y a la cual se le destina cada vez un tratamiento más serio y más científico de forma tal de lograr comunicaciones seguras. Como veremos esto no es una tarea para nada sencilla.
Conceptos de seguridad en computadoras digitales.
Uno de los puntos que siempre estuvo en discusión sobre el almacenamiento de información en computadoras digitales, fue la seguridad de los mismos frente a posibles miradas indiscretas, desde que la primera computadora hizo su aparición en alguna organización militar o gubernamental la necesidad de resguardar la información allí almacenada se hizo evidente.
Para proteger la información almacenada se suele recurrir a las denominadas técnicas de encriptación, la encriptación consiste básicamente en convertir un mensaje en otro de forma tal que el mensaje original solo pueda ser recuperado por un determinado grupo de personas que saben como "desencriptar" el mensaje codificado. El esquema básico de encriptación implica la utilización de un password para encriptar de forma tal que solo puedan desencriptar el mensaje aquellos que conocen el password utilizado, esto trae varios problemas como veremos mas adelante.
Con el advenimiento de Internet y la masificación absoluta de las comunicaciones la privacidad de los datos se ha vuelto un tema muy en boga en los últimos tiempos, originando todo tipo de problemas que involucran desde el mas simple e inocente usuario de internet hasta las mas altas organizaciones gubernamentales del planeta.
En el mundo de las computadoras la criptografía puede ser utilizada para varias cosas, algunas áreas importantes en donde se utiliza la criptografía son:
La encriptación de información 'critica' que debe ser almacenada en computadoras, actos gubernamentales, informaciones secretas, etc.
La encriptación de mensajes enviados a través de redes, redes locales, redes publicas e internet.
La certificación de identidad de quienes envían mensajes importantes a través de internet.
Protección de información 'delicada' que deba enviarse a través de internet como, por ejemplo, números de tarjetas de crédito.
Encriptación de comunicaciones telefónicas, radiales o televisivas que pueden ser interceptadas.
Encriptación de datos.
Las técnicas de encriptación suelen dividir a los algoritmos en dos grupos: los algoritmos de clave privada y los algoritmo de clave publica. A los algoritmos de clave privada se los llama también algoritmos de encriptación simétricos mientras que los de clave pública suelen denominarse algoritmos antisimétricos.
Algoritmos de clave simétrica
Los algoritmos de clave simétrica, también llamados de clave secreta o privada, son los algoritmos clásicos de encriptación en los cuales un mensaje es encriptado utilizando para ello una cierta clave sin la cual no puede recuperarse el mensaje original.
El esquema básico de los algoritmos de clave simétrica es:
MENSAJE + CLAVE = CÓDIGO (encriptación)
CÓDIGO + CLAVE = MENSAJE (desencriptación)
Criptosistemas:
Definiremos a un criptosistema como un conjunto de tres elementos:
- Un espacio de mensajes: PT que es la colección de todos los posibles mensajes pt que pretendemos enviar.
- Un espacio de claves K. Cada clave k determina un método de encriptación Ek y un método de desencriptado Dk. De forma tal que Ek(pt) = código y Dk(código)=pt.
- Un espacio de códigos: CT que es la colección de todos los posibles códigos ct.
Sistemas monoalfabéticos y polialfabéticos:
Un algoritmo de encriptación por clave privada es monoalfabético si cada ocurrencia de un mismo caracter en el mensaje original es reemplazada siempre por un mismo caracter en el código cifrado.
Un algoritmo de encriptación por clave privada es polialfabético si cada ocurrencia de un mismo caracter en el mensaje original es reemplazada por distintos caracteres en el código cifrado.
Desarrollaremos a continuación algunos de los criptosistemas de clave privada mas conocidos, desde los más básicos hasta los más complejos.
- Criptosistema Caesar
- Criptosistema Hill
- Criptosistema Afines
- Criptosistema Playfair
- Criptosistema DES
Criptosistema Caesar
El sistema Caesar o desplazamientos Caesar es una de las tecnicas de criptografía más simples y mayormente difundidas. Fue el primero que se utilizó del cual se tienen registros. El sistema es monoalfabético y es realmente muy malo, su único valor es el valor histórico de haber sido el primero.
En un sistema Caesar la encriptación se hace por sustitución, cada caracter del mensaje original será reemplazado por un caracter en el mensaje cifrado, el caracter cifrado se obtiene avanzando 'k' pasos en el alfabeto a partir del caracter original. Obviamente 'k' es la clave.
Ejemplo con k=2:
Si el texto original es "ABCDE" se codifica como "CDEFG"

Criptosistema Hill
Este sistema esta basado en el álgebra lineal y ha sido importante en la historia de la criptografía. Fue Inventado por Lester S. Hill en 1929, y fue el primer sistema criptografico polialfabético que era práctico para trabajar con mas de tres símbolos simultaneamente.
Este sistema es polialfabético pues puede darse que un mismo caracter en un mensaje a enviar se encripte en dos caracteres distintos en el mensaje encriptado.
Suponiendo que trabajamos con un alfabeto de 26 caracteres.
Las letras se numeran en orden alfabético de forma tal que A=0, B=1, ... ,Z=25

Se elije un entero d que determina bloques de d elementos que son tratados como un vector de d dimensiones.
Se elije de forma aleatorea una matriz de d × d elementos los cuales seran la clave a utilizar.
Los elementos de la matriz de d × d serán enteros entre 0 y 25, además la matriz M debe ser inversible en
.
Para la encriptación, el texto es dividido en bloques de d elementos los cuales se multiplican por la matriz d × d
Todas las operaciones aritméticas se realizan en la forma modulo 26, es decir que 26=0, 27=1, 28=2 etc.
Dado un mensaje a encriptar debemos tomar bloques del mensaje de "d" caracteres y aplicar:
M×Pi=C, donde C es el código cifrado para el mensaje Pi
Ejemplo:
Si tomamos la matriz
como matriz de claves.
Para encriptar el mensaje "CODIGO" debemos encriptar los seis caracteres de "CODIGO" en bloques de 3 caracteres cada uno, el primer bloque


El primer bloque "COD" se codificara como "WLP"

El segundo bloque "IGO" se codificara como "GSE"
Luego 'CODIGO' encriptado equivale a 'WLPGSE'.
Observar que las dos "O" se codificaran de forma diferente.
Para desencriptar el método es idéntico al anterior pero usando la matriz inversa de la usada para encriptar.
Criptosistema Afines
El Criptosistema Afin es una clase de encriptación por sustitución y es monoalfabético y simétrico.
Un criptosistema afín es determinado por dos enteros a y b siendo
a ≥ 0
b ≤ m
m es el tamaño del alfabeto.
Además a y m deben ser coprimos.
Para encriptar un mensaje a cada caracter se le aplica la siguiente fórmula:
e( x ) = a x + b (mod m )
Por ejemplo si:
a=3, b=5 y m=26
El mensaje que queremos encriptar es "hola".
Toda la aritmética debe ser realizada modulo m en este caso 26.
Las letras se numeran en orden alfabético de forma tal que A=0, B=1, ... ,Z=25

La funcion de encriptación que utilizaremos será:
e( x ) = 3 x + 5 (mod 26)
h=7 => e( 7 ) = 7 * 3 + 5 = 26 mod 26 = 0 = a
o=14 => e( 14 ) = 14 * 3 + 5 = 47 mod 26 = 21 = v
l=11 => e( 11 ) = 11 * 3 + 5 = 38 mod 26 = 12 = m
a=0 => e( 0 ) = 0 * 3 + 5 = 5 = f
El mensaje "hola" encriptado es "avmf"
Este es un sistema monoalfabético pues cualquier ocurrencia de un determinado caracter será reemplazado siempre por un único caracter en el mensaje cifrado ya que e( x ) = a x + b es función.
El requerimiento de que a y m sean coprimos asegura que la función e( x ) = a x + b sea inyectiva ya que si la función no fuera inyectiva un cierto caracter en el mensaje cifrado podría corresponder a mas de un caracter en el mensaje original y no podríamos descifrar el mensaje.
Dos números 'a' y 'b' son coprimos si su Máximo común divisor es 1. El concepto de números coprimos es de gran importancia en el mundo de la criptografía, este y otros conceptos de la teoría de números son utilizados muy a menudo para encriptar y desencriptar información.
En nuestro ejemplo '3' y '26' son coprimos mientras que '10' y '26' no lo son (MCD=2).
La funcion de desencriptación es d ( x ) = a−1 ( x − b )(mod m ) donde a−1 es la inversa multiplicativa de a modulo m
en el caso de a = 3, a−1 = 9 ya que 3 · 9 = 27 = 1 modulo 26, por lo tanto la función de desencriptación será:
d ( x ) = 9 ( x − 5)(mod 26)
Criptosistema Playfair
Este sistema criptográfico fue inventado en 1854 por Charles Wheatstone, pero debe su nombre al Baron Playfair de St Andrews quien promovió el uso de este criptosistema.
El algoritmo utiliza una tabla o matriz de 5x5.
La tabla se llena con una palabra o frase secreta descartando las letras repetidas. Se rellenan los espacios de la tabla con las letras del alfabeto en orden. Usualmente se omite la "W" y se utiliza la "V" en su lugar o se reemplazan las "J" por "I". Esto se hace debido a que la tabla tiene 25 espacios y el alfabeto tiene 26 símbolos. La frase secreta usualmente se ingresa a la tabla de izquierda a derecha y arriba hacia abajo o en forma de espiral, pero puede utilizarse algún otro patrón. La frase secreta junto con las convenciones para llenar la tabla de 5x5 constituyen la clave de encriptación.
Por ejemplo:
Si la frase secreta es "CRIPTOSISTEMA PLAYFAIR"
Llenaremos de izquierda a derecha y arriba hacia abajo y omitiremos la W

La encriptación se realiza de la siguiente forma:
El mensaje original que se desea encriptar es dividido en bloques de dos caracteres cada uno y se le aplican las siguientes cuatro reglas en orden
Si en el bloque las dos letras son la misma, se reemplaza la segunda generalmente por una X (o alguna letra poco frecuente) y se encripta el nuevo par.
Si las dos letras del bloque aparecen en la misma fila de la tabla, cada una se reemplaza por la letra adyacente que se encuentra a su derecha (si es la letra que se encuentra en la última posición a la derecha de la fila se la reemplaza con la primera de la izquierda de esa fila). Ej. SM se reemplazará por EA y AE por OM.
Si las dos letras del bloque aparecen en la misma columna de la tabla, cada una se reemplaza por la letra adyacente que se encuentra por debajo (si es la letra que se encuentra en la última posición inferior de la columna se la reemplaza con la primera de arriba de esa columna). Ej. LC se reemplazará por GO y GQ por QC.
Si las letras no se encuentran en la misma fila ni columna se las reemplaza se determina el rectángulo formado por los dos caracteres y se encripta tomando los caracteres que están en las esquinas del rectángulo y en la misma fila que el carácter a encriptar. Ej. SB se reemplazará por MY y KR por HP.

Para desencriptar se aplican estas cuatro reglas en forma inversa, descartando las "X" que no tengan sentido en el mensaje final.
Ejemplo
Si queremos codificar "LENGUAJE"
Tomamos "LE" como no están ni en la misma fila ni columna se utiliza la regla 4, "LE" se reemplaza por "FO".
Tomamos "NG" como están en la misma fila utilizamos la regla 2, "NG" se reemplaza por "GH".
Luego, tomamos "UA" como no están ni en la misma fila ni columna se utiliza la regla 4, "UA" se reemplaza por "ZS" .
Finalmente tomamos "JE" como están en la misma columna utilizamos la regla 3, "JE" se reemplaza por "VF".
Por lo tanto "LENGUAJE se encriptará como ""FOGHZSVF"
De este esquema podemos deducir que el sistema es polialfabético pues por ejemplo "LE"="FO" implica que "E"="O" y "JE"="VF" implica que "E"="F" lo cual demuestra que el sistema es polialfabético. En el sistema Playfair si bien no es cierto que todo carácter siempre sea encriptado en un mismo caracter si vale que todo par de caracteres siempre sea encriptado en el mismo par de caracteres, por lo que en lugar de decir que el sistema es polialfabético podemos decir que es monoalfabético de orden 2.