por Pierre Loidreau <pierre.loidreau(at)ensta.fr>
Sobre el autor:
Pierre es profesor e investigador en la ENSTA (Ecole
Nationale Supérieure de Techniques Avancées - Escuela
Nacional Superior de Técnicas Avanzadas ). Su campo de investigación son los
"criptosistemas" basados en la teoría de códigos correctores de errores. Practica Linux
a diario... y tenis a menudo.
Taducido al español por:
Roberto Hernando Velasco (homepage)
Contenidos:
|
Introducción a la criptografía
Resumen:
Este artículo se ha publicado en un número especial sobre la seguridad de Linux
Magazine France. El editor, los autores y los traductores han aceptado amablemente que todos
los artículos de ese número especial sean publicados en LinuxFocus. En consecuencia,
LinuxFocus os "ofrecerá" esos artículos a medida que se vayan traduciendo al inglés.
Este resumen se reproducirá en todos los artículos que tengan el mismo origen.
Porqué la criptografía. 2500 años de historia
El origen de la criptografía se remonta sin duda a los orígenes del hombre,
desde que aprendió a comunicarse. Entonces, tuvo que encontrar medios
de asegurar la confidencialidad de una parte de sus comunicaciones. En el antiguo
Egipto, la escritura jugó a veces ese papel. Sin embargo, el primer testimonio
de uso deliberado de métodos técnicos que permitieran cifrar los mensajes
viene de Grecia, sobre el siglo VI antes de Cristo, y se llama "escitalo".
El escitalo era un bastón. El emisor enrollaba una tira de cuero alrededor
del bastón y escribía longitudinalmente sobre el bastón. Después desenrollaba
la tira y la enviaba al destinatario. Sin conocer el diámetro del bastón que había
jugado el papel de clave, era imposible descifrar el mensaje. Más tarde los
ejércitos romanos utilizaron para comunicarse el cifrado de César, consistente en
desplazar el alfabeto tres letras.
Después, durante cerca de 19 siglos, se asiste al desarrollo más o menos
ingenioso de técnicas de cifrado experimentales donde la seguridad residía
esencialmente en la confianza que quisieran darles los usuarios. En el siglo
XIX, Kerchoffs estableció los principios de la criptografía moderna. Uno de los principios
establece que la seguridad de un sistema de cifrado no reside más que
en la clave y no en el procedimiento de cifrado.
En lo sucesivo, concebir sistemas criptográficos debía responder a esos criterios.
Sin embargo, todavia les faltaba a esos sistemas unos cimientos matemáticos suficientes que proveyeran
utilidades para medir y cuantificar su resistencia a eventuales ataques y, por qué
no, encontrar el "Santo Grial" de la criptografía: el sistema incondicionalmente seguro.
En 1948 y 1949 dos artículos de Claude Shannon, "Teoría Matemática de la Comunicación" y
sobre todo "La Teoría de la Comunicación de los Sistemas Secretos" dieron los
cimientos científicos a la criptografía borrando tanto vanas promesas como falsos prejuicios. Shannon
probó que el cifrado de Vernam introducido algunas decenas de años antes --todavía
llamado one-time pad-- era el único sistema incondicionalmente seguro. Sin embargo
el sistema era impracticable. Es por lo que hoy en día la evaluación de la seguridad
de un sistema se interesa principalmente en la seguridad computacional.
Se dice que
un sistema de cifrado de clave secreta es seguro si ningún ataque conocido de
menor complejidad que la búsqueda exhaustiva sobre el espacio de claves ofrece mejores
resultados que ésta.
AES (Advanced Encryption Standard, Norma de Encriptación Avanzada)
Muy recientemente, en octubre de 2000, el NIST (National Institute of
Standards and Technology, Instituto Nacional de Estándares y Tecnología) eligió,
entre 15 candidatos, un nuevo estándar de cifrado con
clave secreta para
reemplazar al viejo DES, debido a que el tamaño de las claves se había vuelto demasiado
pequeño. El algoritmo elegido para convertirse en el AES es el Rijndael, cuyo nombre
viene del de sus creadores, Rijmen y Daemen.
Éste es un sistema de cifrado llamado "por bloques" ya que los mensajes están cifrados por
bloques completos, que aquí son de 128 bits. Hay varias versiones del sistema utilizando
claves de 128, 192 o 256 bits. Como información apuntar que el DES cifra bloques de 64 bits
con una clave de 56 bits solamente. El triple DES utilizaba normalmente hasta entonces
cifras con bloques de 64 bits con una clave de 112 bits.
Figura 1: Iteraciones del AES
El principio de funcionamiento del AES está descrito en la figura 1. En primer lugar,
se añade bit a bit al mensaje la clave secreta K0 .
Después, como para todos los algoritmos de cifrado por bloques, se itera una función
F, parametrizada por subclaves que se obtienen de la clave maestra mediante
un algoritmo de expansión de claves.
En el caso de AES, se itera 10 veces la función F.
- La figura 2 describe cómo se itera la función F para cifrar.
Se toma como entrada bloques de 128 bits repartidos en 16 octetos. Antes de
nada, se aplica a cada octeto la misma permutación S. Seguidamente, se
aplica a los 16 octetos una segunda permutación P. Entonces al resultado
obtenido se le añade bit a bit la subclave de 128 bits obtenida por el algoritmo de expansión
de clave.
- El algoritmo de expansión de clave permite calcular la clave Ki
de la i-ésima iteración en función de la subclave Ki-1 de la
(i-1)-ésima iteración, siendo K0 la clave
secreta. Esto se describe en la figura 3. Los 16 octetos de la clave Ki-1
se toman de 4 en 4. Los últimos 4 octetos se permutan usando una permutación S,
que es la misma que se utiliza para permutar los bits de cada octeto de la función. Después
se suma al primer octeto del nuevo conjunto el elemento ai.
Este elemento es un octeto que depende del número i de la iteración considerada.
Por último, para obtener Ki, se añade bit a bit los
4 octetos obtenidos a los 4 primeros octetos de Ki-1,
después el resultado obtenido es agregado a los 4 octetos siguientes y así sucesivamente.
Figura 2: Función F
Veamos brevemente cómo se construyen las permutaciones y a qué corresponde la
constante ai.
Técnicamente y por simplicidad, un octeto se puede considerar como un elemento
de un conjunto con 256 elementos llamado cuerpo finito, sobre el que existen todo
tipo de operaciones simples, entre otras las operaciones de adición, producto e
inversión. La permutación S anteriormente mencionada corresponde a la
inversión sobre este conjunto. La permutación P está especificada como
una operación muy simple, implementándose fácilmente. El elemento ai
corresponde a elevar a la potencia i un elemento del cuerpo. Estas
consideraciones permiten implementar AES de forma muy eficaz.
Como el AES no comprende más que operaciones muy simples sobre los octetos
se tienen dos ventajas enormes:
- incluso la implrmentación por software de AES es extremadamente rápida.
Por ejemplo, una implementación en C++ sobre un Pentium a 200MHz permite
cifrar a 70Mbits/s;
- la resistencia de AES a los criptoanálisis diferencial y lineal no depende
de la elección de S-Cajas como en el DES, que habían sido sospechosas de haber
sido amañadas por la NSA. En efecto, todas las operaciones efectuadas son operaciones
simples.
Figura 3: Algoritmo de expansión de claves
Criptografía de clave pública
En 1975 Diffie y Hellman publicaron un artículo llamado "New Directions in
Cryptography" (Nuevas direcciones en Criptografía) que tuvo el efecto
de una bomba en la comunidad de los criptógrafos, introduciendo
el concepto de criptografía de clave pública. Los algoritmos de cifrado
con clave secreta (o clave privada), los únicos conocidos hasta entonces, ya no satisfacían
las nuevas necesidades que aparecían paralelamente a la explosión de
nuevos medios de comunicación muy impersonales -- como por ejemplo, el desarrollo de las redes
de comunicaciones.
La solución completamente revolucionaria que propusieron fue introducir
la noción de función de una sola vía con trampa, o trapdoor one-way function (también
conocida como función de un sentido irreversible).
Es una función que se calcula fácilmente en un sentido, pero que es
computacionalmente imposible de invertir si no se conoce un secreto
llamado trampa, aunque la función sea conocida por todos.
Entonces la clave pública es la función, mientras que la trampa, conocida por
un número restringido de usuarios se denomina clave privada. Así nació el
mundo de Alice, Bob y compañía. Alice y Bob son dos personas que buscan
comunicarse de forma íntegra mientras algunas personas pueden interponerse, escuchando
o incluso alterando el canal de comunicación.
Para descifrar el mensaje el receptor invierte la función utilizando la trampa.
El ejemplo más bello de criptosistema de clave pública y, sin lugar a dudas, el más simple
aparece justo dos años después, en 1978. Se debe a Rivest, Shamir y Adleman de donde
toma el nombre RSA. Se basa en la dificultad de factorizar dos números enteros. La clave
privada está formada por la tripleta (p,q,d) donde p y q son dos
números primos de aproximadamente el mismo tamaño, d es un número entero primo con
p-1 y con q-1. La clave pública se compone del par (n,e). Donde
n=pq y e es el inverso de d módulo (p-1)(q-1), i.e.
ed = 1 mod(p-1)(q-1).
Supongamos que Alice desea enviar un mensaje cifrado con la clave pública
de Bob (n,e). Primero transforma el mensaje en un número m inferior
a n. Después calcula
c = me mod
n,
y envía el resultado c a Bob. Éste, cuya clave pública es (p,q,d),
calcula:
cd mod n =
med mod n =
m.
En el caso de RSA, la función de una sola vía con trampa que se considera
es la función que asocia a un número x<n el valor xe mod n.
Tras el sistema de cifrado RSA, se han desarrollado muchos otros sistemas
de clave pública. Uno de los más utilizados actualmente, y un serio competidor
de RSA es un sistema de cifrado basado en los problemas de cálculo de los logaritmos
discretos.
Sobre el uso moderno de la criptografía
En realidad, el interés de la criptografía de clave pública es el de ocuparse de
muchos problemas de seguridad, y ofrecer una gran flexibilidad. Lo que permite
entre otras cosas encontrar soluciones a los problemas de autentificación:
- La identificación de personas: con la aparición de medios
de comunicación impersonales, Alice quiere estar segura de que la persona
con la que se comunica no hace trampas con su identidad,
es decir que alguien que diga ser Bob lo sea en realidad. Para conseguirlo,
Alice utiliza lo que se llama un protocolo de identificación. Existen
muchos, basándose en los mismos principios que RSA de las propiedades
del logaritmo discreto.
- La autentificación de documentos: una autoridad puede
autentificar documentos por medio de una signatura numérica
. La signatura consiste en añadir
al documento cierto número de bits que se calculan en función del documento
y de la autoridad, y por lo general mediante funciones hash
como MD5 o SHA. Además,
todo el que tenga acceso al documento, debe poder verificar que la signatura
realmente es de la autoridad. Para hacerlo se utilizan los llamados esquemas
de signatura. Uno de los más conocidos es el esquema de signatura
ElGamal que se basa, una vez más, en las propiedades del logaritmo discreto.
Por otro lado, como la criptografía de clave secreta, la criptografía de clave
pública permite elaborar sistemas de cifrado, asegurando la confidencialidad
de las comunicaciones.
Supongamos que Alice desea comunicarse con Bob de forma privada. Alice
encuentra en un directorio la clave pública de
Bob, y cifra el mensaje con esta clave. Cuando Bob recibe el mensaje cifrado,
utiliza su clave privada para descifrar el mensaje y recuperar el texto llano.
Las dos claves juegan papeles completamente distintos, ésta es la razón
por la que se habla de criptosistemas asimétricos, en oposición a los
criptosistemas de clave secreta que utilizan la misma clave para
cifrar que para descifrar y se llaman criptosistemas simétricos.
La criptografía de clave pública presenta otra ventaja sobre la criptografía de clave
secreta. Si n personas desean comunicarse mediante un criptosistema de clave
secreta, cada una de ellas debe disponer de una clave diferente para cada
persona del grupo. Por tanto hace falta poder generar en total n(n-1) claves.
Teniendo en cuenta que n puede ser del orden de varios millares, será
necesario generar ficheros de varios millones de claves. Además, añadir
un miembro al grupo no es sencillo, ya que habrá que generar otrar n
claves para que el nuevo miembro pueda comunicarse con los demás integrantes
del grupo, y después distribuir las nuevas claves a todo el grupo. Por contra,
en el caso de un criptosistema asimétrico, se guardan las n claves
públicas de los miembros del grupo en un directorio.
Para añadir un miembro, basta conque ponga su clave pública en el
directorio.
Clave pública o clave secreta: un compromiso
En el párrafo anterior, se ha visto que la criptografía de clave pública
aporta solución a muchos más problemas que la criptografía de clave
secreta. Entonces nos podemos preguntar cuál es la utilidad de AES.
Existen dos razones fundamentales para escogerlo:
- Por una parte, una razón práctica. En efecto, la mayoría de los sistemas
de cifrado de clave pública son muy lentos. Por ejemplo, RSA es varios
centenares de veces más lento que el AES implementándose en software y es completamente
imposible implementarlo en hardware. Actualmente donde la velocidad
de la transmisión de la información constituye un punto crucial, el algoritmo
de cifrado no puede ser el factor limitante.
- Por otro lado, desde el punto de vista de la seguridad, hay problemas relativos
a la estructura misma de los sistemas de cifrado de clave pública.
Es sorprendente constatar que el tamaño de las claves necesario en criptografía
de clave pública para asegurar un seguridad satisfactoria es mayor que el tamaño
de claves en criptografía de clave secreta. En realidad la noción y la importancia
del tamaño de clave para asegurar la seguridad no tiene sentido más que en el caso
de la clave secreta. De hecho, esos sistemas se basan en la hipótesis de que los
únicos posibles ataques son los llamados ataques exhaustivos (o por fuerza bruta)
que consisten en
enumerar todas las claves posibles. Por ejemplo, en el caso de una clave
de 128 bits, el tamaño del espacio a enumerar es 2128.
Por contra, en el caso de clave pública, el tamaño de clave no tiene sentido más
que cuando se considera el mismo sistema. De hecho, por ejemplo el sistema
RSA de 512 bits es mucho menos seguro que un AES de 128 bits. La única médida
válida para evaluar un criptosistema de clave pública es la complejidad del mejor
ataque conocido. La mayor diferencia es que jamás se está al abrigo
de ataques teóricos. Muy recientemente un grupo de investigadores
ha conseguido factorizar un número de 512 bits. En consecuencia, para tener
una seguridad suficiente para los próximos años, se aconseja generalmente
utilizar números n de 1024 bits.
En cifrado, es mejor entonces utilizar algoritmos de cifrado de clave secreta
cuando sea posible. Una solución completamente interesante y aceptable
es el compromiso elaborado por Zimmermann para concebir PGP. El principio
de cifrado es el siguiente: supongamos que Alice y Bob desean comunicarse
de manera íntegra, utilizando un algoritmo de clave secreta -en el caso de
PGP éste algoritmo es IDEA-.
- Alice y Bob se ponen de acuerdo sobre la clave secreta por un protocolo
de intercambio de claves. Este tipo de protocolos utiliza propiedades de criptografía
de clave pública. Uno de los más conocidos en la materia es el protocolo de
Diffie-Hellman.
- Después se comunican utilizando el algoritmo IDEA, que es público.
Una vez que su conversación ha terminado, rechazan la clave de esa sesión. Tal
sistema combina las ventajas de los dos tipos de criptografía. En general, se considera
que la mayor debilidad se encuentra en el protocolo de intercambio de claves.
Bibliografía
Historia de la criptografía:
- S. Singh : Histoire des codes secrets. Jean-Claude
Lattès, 1999.
(N.T. existe una versión en castellano publicada por Editorial Debate en 2000 con
el título "Los códigos secretos").
- D. Kahn : The Codebreakers: the story of secret
writing. MacMillan publishing, 1996.
AES :
Criptografía en general :
Formulario de "talkback" para este artículo
Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
2002-05-20, generated by lfparser version 2.21