Curso sencillo de PGP
Capítulo 1: El cifrado, en pocas
palabras

1.1 - Conceptos en
criptografía
Según el manual "Introduction to Cryptography"
que acompaña al programa PGP, "la criptografía es la ciencia de usar
las matemáticas para cifrar y descifrar datos" ¿Y qué es cifrar? Todos tenemos
alguna idea de lo que significa. Para nuestros fines, cifrar o
encriptar [encrypt] es el proceso de transformar un texto conocido
(texto llano [plaintext]) en un batiburrillo de datos que sean
ininteligibles (texto cifrado [ciphertext]) para cualquiera que no
posea una clave de cifrado [encryption key]. El proceso inverso de
reconstruir el texto original partiendo del texto cifrado y de una clave de
descifrado [decryption key] es el descifrado o
desencriptación [decryption]
El proceso de cifrado está basado
en un algorimo matemático (un conjunto de procesos matemáticos) y en
una clave (que, dado el algoritmo y el texto llano, nos da el texto
cifrado); puede verse como la cerradura y la llave, respectivamente. Veamos un
ejemplo. Una de los métodos de cifrado más antiguos es el llamado cifrado
de César, consistente en desplazar todas las letras del alfabeto en una
cantidad conocida. Si el desplazamiento es, digamos cinco, eso significa que
la letra A se transforma en la F (la letra que hay cinco posiciones a la
derecha de la A en el alfabeto), la B en la G, la C en la H, y así
sucesivamente. Es decir, convertimos cada letra de texto llano (primera fila)
en una letra de texto cifrado (segunda fila) de acuerdo con la siguiente
secuencia:
ABCDEFGHIJKLMNOPQRSTUVXYZ (texto llano)
FGHIJKLMNOPQRSTUVXYZABCDE
(texto cifrado)
donde hemos supuesto que tras la Z viene la A. De
este modo, JULIOCESAR se convierte en OAQNTHJYFX. Podemos denotar la clave
como cinco (número de posiciones a desplazar); el algoritmo sería simplemente
la sustitición de una letra por la que hay x posiciones a la derecha (x
es la clave). Para descifrar, no hay más que tomar el texto cifrado y
sustituir cada letra por la que hay cinco posiciones a su izquierda (la O se
convierte en la J, la A en la U...). Si usamos dígitos binarios en lugar de
letras, podremos utilizar el sistema de César para cifrar todo tipo de
archivos informáticos (documentos de texto puro, con códigos de formato,
incluso archivos ejecutables).
El sistema cesariano ya no se utiliza
debido a la sencillez con la que se puede romper (si bien Julio César lo
utilizó con éxito durante su campaña de las Galias). Romper [break], o
más correctamente, criptoanalizar [cryptanalyze] es la ciencia de
obtener el texto llano a partir del texto cifrado sin conocer la clave, o bien
de obtener la propia clave a través de texto llano, cifrado o de donde sea. El
método de cifrado de César no es seguro porque resulta fácil presa del
criptoanálisis.
Para empezar, es susceptible de un ataque de fuerza
bruta, consistente simplemente en probar todas las posibles claves. Igual
que si probásemos todas las combinaciones de una caja fuerte. Utilizando el
alfabeto apuntado anteriormente, solamente tenemos veinticinco posibles claves
(naturalmente, desplazar una letra veintesiés posiciones da igual resultado
que desplazarla uno solo), lo que nos permite probar todas las combinaciones
de forma cómoda. El número de posibles claves se conoce como espacio de
claves [key space].
En segundo lugar, el texto cifrado "filtra"
información acerca del texto llano. Si contamos todas las letras de un texto
normal en la mayoría de los idiomas occidentales, veremos que la letra E es la
más frecuente. Comprobar la frecuencia de las letras del texto cifrado y
compararlas con la frecuencia típica de las letras en el alfabeto en el que
está escrito el texto llano nos permite obtener fácilmente la clave. En el
ejemplo anterior, los textos cifrados con la "clave cinco" contendrían en
promedio más veces la letra J que los demás; esto se debe a que la J
representa a la letra E, que aparece más frecuentemente en el texto llano.
Para que este ataque sea eficaz, se requiere un texto cifrado que sea
lo bastante largo, ya que si no la frecuencia de las letras del texto podría
no coincidir con las del alfabeto. El texto cifrado LAFIFQFOFXF contiene
cuatro F; si suponemos que la F cifrada corresponde con la E sin cifrar,
podríamos reconstruir la clave (un desplazamiento hacia la derecha para el
cifrado). Obtenemos por tanto el texto llano KZEHEPENEVE. O se trata del
nombre de un pueblo ucraniano, o hemos metido la pata. El texto llano
verdadero (cifrado con clave cinco) corresponde a la palabra GUADALAJARA.
Moraleja: cuanto más texto cifremos con una clave concreta, tanto más
vulnerable es a un ataque criptoanalítico.
Naturalmente, la clave de
César puede complicarse, pero también las herramientas de los criptoanalistas
son ahora más eficades y poderosas. Esto ha dado lugar a una batalla continua
entre criptógrafos (que diseñan algoritmos de cifrado resistente al
criptoanálisis) y criptoanalistas (empeñados en reventar cualquier tipo de
cifrado) muy similar a la lucha entre la espada y el escudo.
Se suele
denominar complejidad [complexity] al conjunto de operaciones que
tenemos que realizar para criptoanalizar el sistema, medidos en "unidades" de
clave, es decir, respecto al número de operaciones que requeriría probar con
una sola clave; si la complejidad es menor que el espacio de claves, significa
que existen métodos más eficientes para "romper" un mensaje que la mera
búsqueda exhaustiva de todas las claves posibles. Cualquiera de estos métodos
se denomina ataque criptoanalítico, o ataque; se dice entonces que el
sistema ha sido criptoanalizado. Por su parte, un criptógrafo diseñará
algoritmos que no sean atacables (es decir, que no haya atajos al sistema de
probar todas las claves posibles), o al menos que los ataques no sean
prácticos (porque permitan ganancias marginales o porque requieran de una
excesiva cantidad de mensajes en texto llano, cifrado o simplemente espacio en
disco duro).
Un ejemplo sencillo nos permitirá aclarar los conceptos.
Supongamos el típico maletín con cerradura de combinación, compuesta por tres
ruedecitas que marcan números entre 0 y 9. La clave de cifrado sería
simplemente el número de tres cifras (uno por ruedecilla) que hay que
introducir para que el maletín se abra. El algoritmo vendría
representado por el conjunto de mecanismos internos de la cerradura de
combinación; como en otros casos, el mecanismo exacto de funcionamiento nos
trae sin cuidado, del mismo modo que para conducir un coche no nos interesa
saber cómo se produce la combustión interna. Un ladrón torpe tendría que
probar todas las claves; a diez posibilidades por ruedecilla, habría de probar
un total de 10^3 = 1.000 claves para tener la segurida de acertar.
Sin
embargo, un ladrón más inteligente podría examinar los mecanismos de un
maletín similar y obtener cierta información sobre el sistema, es decir,
criptoanalizarlo. Podría por ejemplo llegar a la conclusión de que, si
presiona fuertemente una esquina del maletín, la última rueda permite probar
dos combinaciones a la vez, esto es, la combinación 613 y la 614 se comprueban
simultáneamente. De ese modo, le bastará probar las combinaciones pares, y la
complejidad de su ataque será de 500, es decir, estadísticamente tendrá el
doble de probabilidades de acertar. Eso no significa que en un maletín
concreto vaya a vencer a su compañero de "fuerza bruta" (quien a lo mejor
acierta de chiripa tras el tercer intento), pero si hay muchos maletines en
juego el ladrón criptoanalista tiene más papeletas a su favor.
Otro
ejemplo. Muchas transacciones comerciales (entre otras, las que llevan a cabo
los cajeros automáticos) se cifran mediante el algoritmo DES, que tiene un una
clave de sesenta y cuatro bits (es decir, es un maletín con 64 ruedecillas,
cada una de ellas con solamente dos posiciones, 0 y 1). El número de claves
posibles es de 2^64, pero solamente hay 2^56 claves independientes (eso es así
porque 8 de esos 64 bits son los denominados "bits de paridad" y no colaboran
en la fortaleza del sistema; es como un maletín donde uno de cada ocho
ruedecillas fuese innecesaria). Eso hace que el espacio de claves sea
2^56; es decir, con probar 2^56 claves ya hemos agotado todas las
posibilidades.
No obstante, hay diversos tipos de ataques
criptoanalíticos, aunque ninguno de ellos es realmente útil en la
práctica. Por ejemplo, el denominado criptoanálisis diferencial es un tipo de
ataque que permite obtener la clave correcta tras un esfuerzo similar al de
probar 2^37 claves, es decir, es 2^(56-37) = medio millón (más o menos) de
veces más eficiente que la búsqueda mediante fuerza bruta. ¿Por qué no es en
la práctica útil? Porque requiere !analizar 2^36 textos cifrados con esa
clave! Se conocen otros ataques, pero requieren conocer o elegir gran cantidad
de texto -llano o cifrado- para extraer información suficiente para averigüar
la clave.
Espero que al llegar a estas alturas, no te hayas perdido;
si no, bien empezamos ;-). Pero no importa, con tal de que te hayas quedado
con lo fundamental, esto es, que hay procedimientos para convertir un texto (o
en general, un archivo digital de cualquier tipo) en un batiburrillo
ininteligible. Esto nos sirve cuando no queramos que nadie, aparte de nosotros
mismos y las personas autorizadas para ello, tenga acceso a nuestros datos.
1.2 - Cifrado simétrico (o de
clave secreta)
Cuando la clave de cifrado es la misma que
la de descifrado (y, por tanto, los algoritmos de cifrado y de descifrado
coinciden) se habla de algoritmo de cifrado simétrico. Este es el tipo
de cifrado que ha dominado la historia de la criptografía hasta hace un par de
décadas.
El cifrado de César, visto anteriormente, es un buen ejemplo.
El algoritmo de descifrado es el mismo que el de cifrado, sólo que recorrido
de forma inversa (desplazar hacia la izquierda, en lugar de hacia la
derechaa); la clave (desplazar cinco unidades) es la misma. Existen muchos
algoritmos de clave simétrica resistentes al criptoanálisis: DES, RC4, RC5,
Blowfish, IDEA, CAST, Triple-DES, LOKI, por nombrar solamente unos cuantos.
Los algoritmos simétricos se clasifican en: algoritmos de cifrado en bloque
[block cipher] y algoritmos de cifrado en flujo [stream cipher]. Esta
clasificación, en la práctica, nos traerá completamente sin cuidado, del mismo
modo que el cambio de marchas de un coche no depende de que sea gasolina o
diesel.
Para cifrar, se coge el mensaje M y se le aplica la operación
matemática Ck (es decir, se usa el algoritmo de cifrado C con la clave k),
obteniendo Ck(M). Para descifrar el mensaje, se aplica la operación inversa
Dk. Puesto que Ck y Dk son operaciones inversas, se tiene Dk(Ck(M)) = M, esto
es, el mensaje original. Esto requiere que el emisor y el receptor del mensaje
utilicen tanto el mismo algoritmo como la misma clave.
Y ahí está nudo
gordiano de los sistemas de clave secreta. La comunicación segura entre el
emisor y el receptor pasa por que ambos, y nadie más, conozca la clave k.
Pero, ¿cómo hacemos llegar la clave k de uno a otro interlocutor? Podría
enviarse por un canal seguro, esto es, uno que no pueda ser interceptado o
espiado; pero ¿qué sentido tiene el cifrado si se dispone de un medio seguro
de comunicación? El cifrado es para evitar a los fisgones; si no hay
posibilidades de fisgar, no hay necesidad de cifrar.
Segundo problema:
si la clave se filtra en cualquier momento a un tercero, la seguridad
desaparece. Todos hemos visto películas donde el bueno se hace con la clave y
consigue engañar al enemigo enviando mensajes falsos, o bien leyendo los
mensajes auténticos de los malos. Esto puede suceder, y no sólo en las
películas. Una clave comprometida (es decir, que está o puede estar en
poder de un tercero) desbarata todo el sistema de comunicación segura basado
en el cifrado, ya que el fisgón puede hacer cualquier cosa que puedan hacer
los interlocutores.
Llamemos Ana y Belén a dichos interlocutores, y
Fausto al fisgón. Belén puede recibir un mensaje cifrado por Fausto, pero ella
cree que viene de Belén -ya que en teoría nadie más podría hacerlo- de manera
que pica el anzuelo. Igual pasa con Ana. Tanto Ana como Belén pueden enviar
mensajes a Fausto creyendo que lo hacen a su amiga; y nuestro fisgón puede
leer toda la correspondencia actual, e incluso la pasada si consigue acceso a
los mensajes anteriores. Mal negocio. Por supuesto, Ana y Belén pueden acabar
dándose cuenta del engaño, pero el daño ya está hecho. Se verán en la
necesidad de intercambiar de nuevo una clave. Y, si no quieren que Fausto se
vuelva a colar en la conversación, deberán guardar cuidadosamente la clave
para evitar que nadie más tenga acceso a ésta
Estos dos problemas
(intercambio y gestión de claves) se resuelven con los sistemas de clave
asimétrica o pública, que pasamos a ver al toque de ya.
1.3 - Cifrado asimétrico (o de
clave pública)
El problema de la distribución de claves (es
decir, cómo hacer llegar la clave de cifrado de Ana a Belén sin que Fausto
pueda meter las narices) se resuelve mediante la llamada criptografía de clave
pública -o de clave asimétrica- descubierta hacia 1975. Los detalles
matemáticos son bastante engorrosos y no necesitamos aprenderlos, así que nos
los saltaremos. Lo crucial y novedoso es que en la criptografía de clave
pública se utilizan dos claves distintas, una para el cifrado y otra
para el descifrado. La clave de cifrado es pública, esto es, conocida
por todo el mundo; la de descifrado (clave privada) solamente es
conocida por su propietario. Ambas constituyen un par de claves
Supongamos que tanto Ana como Belén tienen un par de claves
pública/privada. Si Ana desea enviar un mensaje a Belén, los paso a seguir son
los siguientes:
- Ana obtiene la clave pública de Belén k
- Ana
compone un mensaje M y lo cifra con la clave pública de Belén.
- Ana envía
el mensaje cifrado Ck(M)
- Belén recibe el mensaje y le aplica su clave
privada k´ obteniendo Dk´(Ck(M)) = M
Es decir, cualquiera puede cifrar
un mensaje y enviárselo a Belén, pero solamente ella podrá descifrar los
mensajes que le llegan. Nadie más. Ni siquiera Ana podrá descifrar el mensaje
que acaba de cifrar.
Véase que este elegante esquema evita los
peligros de enviar la clave por un conducto inseguro; de hecho la clave
pública puede ser tan diseminada cono un número de teléfono. Fausto lo va a
tener ahora más difícil, ya que acceder a la clave pública le servirá para
enviar mensajes, pero no para leer los que se envían Ana y Belén entre sí.
Incluso si obtuviese la clave secreta de Ana, ello le permitiría leer los
mensajes que Belén envía a Ana, pero no las respuestas de Ana a Belén. Por
supuesto, permanece la obligación por parte de Ana y Belén de guardar
celosamente sus respectivas claves privadas. Pero Fausto ya no puede
aprovecharse del intercambio de claves secretas.
También permite
aliviar los requisitos de almacenamiento de claves, sobre todo cuando hay más
personas comunicándose. Si hay N interlocutores, el número de claves
diferentes que hay que intercambiar y almacenar para comunicaciones seguras
dos a dos es N*(N-1)/2. Si N=100, eso significa más de 50.000 claves
distintas. Por supuesto, podemos hacer que algunas o todas las claves sean
iguales, pero a lo mejor no es conveniente que Carlos tenga acceso a las
comunicaciones entre Ana y Belén. Con los sistemas de clave pública, cada
usuario solamente necesita tener una clave privada (la suya propia) y cien
claves públicas (en realidad, sólo 99: !un usuario no necesita criptografía
para hablar consigo mismo!).
La criptografía de clave pública se
asemeja a un buzón de correos. Cualquiera puede introducir una carta en el
buzón, pero solamente el poseedor de la llave del buzón podrá abrirlo para
acceder a su contenido. Bueno, en realidad sí hay una posibilidad. Las claves
públicas y privada no son independientes, y en teoría es posible obtener la
clave privada a partir de la clave pública. Pero en la práctica, el volumen de
cálculos matemáticos que ha de realizarse es demasiado grande para que pueda
llevarse a cabo. Como en los sistemas de clave simétrica, el "truco" es hacer
que haya tantas claves posible que no resulte práctico, aun cuando sea posible
en teoría.
En la actualidad, los sistemas de clave pública más
utilizados son el RSA y el Diffie-Hellman. Más correctamente, Diffie-Hellman
es un algoritmo de intercambio de claves. Su variante para criptografía de
clave pública se conoce como "algoritmo Diffle-Hellman, variante ElGamal" Lo
menciono simplemente por "si te suena" de algún otro lugar. Aquí no vamos a
ponernos puristas, y diremos Diffle-Hellman, o DH.
1.4 - Cifrado híbrido (mitad
carne, mitad pescado)
Los criptosistemas de clave pública
tampoco son la panacea universal, y adolecen de diversos problemas. Nos
ocuparemos de dos de ellos. Uno es el de la suplantación. Si Belén recibe la
clave pública de Ana, ¿cómo sabe que es realmente la de Ana? Trataremos ese
engorro en otro apartado.
La segunda pega, de índole práctica, se
refiere a la eficiencia. Los algoritmos de clave pública son lentos. El
cifrado de un mensaje mediante cifrado de clave pública es del orden de mil
veces más lento que mediante un algoritmo de clave simétrica. Los ordenadores
son cada vez más rápidos, pero cuando hay grandes cantidades de información
por cifrar o descifrar (pensemos, por ejemplo, en una base de datos protegida
mediante cifrado) puede llegar a ser una verdadera dificultad. También resulta
que el mensaje cifrado es mucho mayor que el original. Esto es una molestia
para nuestros medios de almacenamiento (disquetes, discos duros) y una
verdadera tortura para nuestra ya sobrecargada Internet, donde cada kilobyte
de información significa tiempo de espera ... y beneficios para la compañía
telefónica.
Estos problemas, y algunos otros (por ejemplo, ciertos
ataques criptoanalíticos) se evitan mediante un sistema híbrido que tome lo
mejor de dos mundos. ¿Queremos rapidez y brevedad? Pues creamos una clave
simétrica y ciframos el mensaje con ella. ¿Queremos enviar de forma segura la
clave simétrica al destinatario? Pues ciframos la clave simétrica con la
clave pública del destinatario.
Supongamos que Ana quiere enviar
un mensaje a Belén. Lo que hace es lo siguiente:
- Crea una clave
simétrica K y cifra el mensaje con dicha clave. Sea Ck(M) el resultado
-
Cifra la clave simétrica con la clave pública de Belén. El resultado es Ckp(K)
- Envía a Belén dos cosas: el mensaje (cifrado con la clave simétrica K) y
la clave simétrica K cifrada con la clave pública de Belén.
Cuando
Belén recibe el "paquete", procede a la inversa:
- Toma Ckp(K) y lo
descifra usando su clave privada. El resultado es K
- Usa K para descifrar
el mensaje Ck(M). El resultado es M
Es decir, la clave pública se usa
para cifrar; pero lo que se cifra no es el mensaje, sino la clave simétrica
con que va cifrado el mensaje. De ese modo hacemos llegar al destinatario la
clave K, y podemos hacerlo por medios inseguros de transmisión. Poco nos
importa que Fausto esté la acecho, porque no puede descifrar el mensaje sin
conocer K ... y no puede conocer K si no tiene la clave privada. Es decir,
hemos combinado un criptosistema de clave simétrica (para intercambiar el
mensaje) con uno de clave asimétrica o pública (para intercambiar la clave).
Los sistemas "híbridos" no se consideran un tipo de cifrado aparte,
sino que normalmente se hace la división entre sistemas de clave simétrica y
de clave asimétrica (o de clave secreta - clave pública), pero nos hemos
detenido aquí por su importancia. PGP es un programa de cifrado híbrido, es
decir, combina cifrado simétrico y asimétrico de la manera que he descrito
aquí. De modo similar, los protocolos criptográficos SSL utilizados por los
navegadores en conexiones seguras (https) utilizan esta combinación híbrida.
Se puede hacer mejor de lo que hemos descrito hasta ahora. Se puede
elegir K de manera que sea distinta para cada comunicación. Es decir,
diferentes mensajes se cifran con diferentes claves. Esto mejora la seguridad
de diversas maneras. En primer lugar, un atacante puede obtener información
(cuando menos, reducir la complejidad del ataque) si sabe que diversos
mensajes se cifran con la misma clave, aunque el atacante no conozca cuál es
dicha clave. Existe, por tanto, un cierto riesgo si ciframos todos nuestros
mensajes con la misma clave simétrica. También hay un riesgo asociado al hecho
de que siempre ciframos la misma clave simétrica K con nuestra clave pública.
Cambiar K de un mensaje a otro elimina estos peligros (reducidos pero
que existen). Y si el atacante lograra por el medio que fuese obtener K,
solamente le serviría para un solo mensaje, ya que el siguiente estaría
cifrado con otra clave distinta. Por eso, la clave simétrica "de usar y tirar"
se denomina clave de sesión. Por supuesto, dicha clave ha de ser
aleatoria, para que no se pueda obtener información favorable a un posible
atacante. Eso se consigue mediante los programas generadores de números
aleatorios. No entraremos en ello, pero cualquier programa de cifrado híbrido
que se precie ha de contar con un generador de números aleatorios adecuado.
1.5 - Más información
Muchas veces, cuando voy a la sección de bibliografía adicional de un
libro, me encuentro una y otra vez con frases del tipo "esta bibliografía,
necesariamente breve y que por supuesto no abarca todas las fuentes
importantes...", lo que a mí siempre me suena como si el autor quisiese decir
"jo, pues anda que si me pongo a buscar referencias en serio, ibas tú a
alucinar; conténtate con esta mínima muestra de mi saber, pobre gusano."
En este caso, es cierto que los enlaces que incluyo son una referencia
mínima, pero no porque os considere pobres gusanos, sino simplemente porque ni
quiero ni cansaros con múltiples enlaces ... ni tengo yo el cuerpo para
ponerme a buscar por la Red, todo sea dicho. Solamente os incluyo algunos
enlaces para los que queráis ahondar un poco más (no mucho) en el asunto. Y,
además, son de manufactura propia, así que todo queda en casa:
+ Criptografía para principiantes, por José de Jesús Ángel.
Para los que deseen una base de conocimientos con más matemáticas.
+
Criptología, por Manuel Pons Martorell. Para mi gusto, más
asequible y ameno.
+ Descripción del
algoritmo DES, por Jorge Sánchez Arriazu. Disección del algoritmo
simétrico más conocido. Sólo para estómagos endurecidos.
También
tenéis a vuestra disposición muchas direcciones sobre criptografía, PGP y
seguridad informática en general en mi sección de Enlaces. Hay algunos,
como Kriptópolis, que piden a gritos
ser saqueados vilmente. Adelante, devoradores de la información, y ojo no os
vayáis a atragantar.
Termina aquí el Capítulo 1 de este Curso sencillo de PGP. ¿Qué
hacemos ahora?



