Tema 20. Criptografía:
Algoritmos.
Certificados digitales.
Autoridades de certificación.
Sellado de tiempo.
Firma electrónica.
Instalación y administración de certificados electrónicos.
El software de la FNMT.
Definición de Criptografía
La criptografía moderna se puede considerar una rama de las matemáticas y la computación enfocada en encontrar y crear formas de convertir información clara y con algún significado en información imposible de entender por entidades que no cuenten con la autorización para hacerlo, aunque la tengan en su poder.
La palabra quiere decir literalmente “escritura oculta”. Y también se puede definir como el campo encargado de encontrar algoritmos o procedimientos que permitan ocultar mensajes que sólo puedan ser descifrados por aquellos que tengan la llave.
La criptografía implica esconder información explícitamente (los atacantes pueden saber que esa información está oculta e incluso hasta tener los mensajes ocultos en su poder), de manera que quien tenga la información correcta (que les concede la autorización) pueda obtener la información original desde los datos ininteligibles.
Este proceso de ocultar la información se llama cifrado (también se usa encriptado, como un barbarismo), mientras que el proceso de recuperar la información se llama descifrado (o desencriptado).
Los procesos de cifrado modernos requieren generalmente una llave o conjunto de llaves, para realizar los procesos de cifrado y descifrado.
La criptografía es la base de todos los mecanismos de seguridad informática modernos, y a menudo se usa una combinación de ellos para proteger un sistema.
La criptografía se divide en dos grandes ramas:
1. Criptografía de clave simétrica o privada.
2. Criptografía de clave asimétrica o pública.
Técnicas de criptografía simétrica
Este tipo de cifrado se basa en el uso de una única clave, tanto para el cifrado como para el descifrado.
La criptografía simétrica se refiere al conjunto de métodos que permiten tener comunicación segura entre las partes, siempre y cuando anteriormente se hayan intercambiado la clave correspondiente, que se denomina clave simétrica.
La simetría se refiere a que las partes tienen la misma clave tanto para cifrar como para descifrar. A este tipo de criptografía se conoce también como criptografía de clave privada.
Existe una clasificación de la criptografía privada o simétrica en tres familias:
– La criptografía simétrica de bloques (block cipher).
– La criptografía simétrica de flujo (stream cipher)
– La criptografía simétrica de resumen (hash functions).
Aunque con ligeras modificaciones, un sistema de criptografía simétrica de bloques puede modificarse para convertirse en alguna de las otras dos formas.
La criptografía simétrica ha sido la más usada en toda la historia.
Ésta ha sido implementada en diferentes dispositivos manuales, mecánicos, eléctricos, hasta los algoritmos actuales que son programables en cualquier ordenador.
La idea general es aplicar diferentes funciones al mensaje que se quiere cifrar de tal modo que solo conociendo una clave pueda aplicarse de forma inversa para poder así descifrarlo.
Aunque no existe un tipo de diseño estándar, quizá el diseño más popular es el de Fiestel, que consiste
esencialmente en aplicar un número finito de interacciones de cierta forma, que finalmente da como resultado el mensaje cifrado.
Este es el caso del sistema criptográfico simétrico más conocido, DES.
El sistema DES
DES (Data Encryption Standard) es un sistema criptográfico que toma como entrada un bloque de 64 bits del mensaje y éste se somete a 16 interacciones, con una clave de 56 bits.
En la práctica, el bloque de la clave tiene 64 bits, ya que a cada conjunto de 7 bits se le agrega un bit que puede ser usado como de paridad.
Dependiendo de la naturaleza de la aplicación, Data Encryption Standard, tiene cuatro modos de operación para poder implementarse:
ECB (Electronic Codebook Mode) para mensajes cortos, de menos de 64 bits.
CBC (Cipher Block Chaining Mode) para mensajes largos.
CFB (Cipher Block Feedback) para cifrar bit por bit ó byte por byte.
OFB (Output Feedback Mode) el mismo uso pero evitando propagación de error.
En la actualidad no se ha podido romper el sistema DES desde la perspectiva de poder deducir la clave simétrica a partir de la información interceptada, sin embargo, con un método a fuerza bruta, es decir probando alrededor de 256 posibles claves, se pudo romper DES en Enero de 1999.
Lo anterior quiere decir que, es posible obtener la clave del sistema DES en un tiempo relativamente corto, por lo que lo hace inseguro para propósitos de alta seguridad.
La opción que se ha tomado para poder suplantar a DES ha sido usar lo que se conoce como cifrado múltiple, es decir aplicar varias veces el mismo algoritmo para fortalecer la longitud de la clave, esto ha tomado la forma de un nuevo sistema de cifrado que se conoce actualmente como triple-DES o TDES.
El sistema triple-DES
El funcionamiento de TDES consiste en aplicar tres veces DES. Utiliza una clave de 168 bits, aunque se
ha podido mostrar que los ataques actualmente pueden romper a TDES con una complejidad de 2112, es
decir efectuar al menos 2112 operaciones para obtener la clave a fuerza bruta, además de la memoria requerida.
Se optó por TDES ya que es muy fácil interoperar con DES y proporciona seguridad a medio plazo.
En los últimos 20 años se han diseñado una gran cantidad de sistemas criptográficos simétricos, entre algunos de ellos están: RC-5, IDEA, FEAL, LOKI’91, DESX, Blowfish, CAST, GOST, etc.
Sin embargo no han tenido el alcance de DES, a pesar de que algunos de ellos tienen mejores propiedades.
Podemos afirmar que el estado actual de la criptografía simétrica es la búsqueda de un nuevo sistema que pueda reemplazar a DES en la mayor parte de aplicaciones.
Es así como se ha optado por convocar a un concurso de sistemas criptográficos simétricos y que se decida cual será el nuevo estándar al menos para los próximos 20 años.
El sistema AES
El NIST (National Institute of Standards Technology) convocó a un concurso para poder tener un sistema
simétrico que fuese seguro y pudiera usarse al menos en los próximos 20 años como estándar.
En el concurso resultaron cinco finalistas: MARS, RC6, Rijndael, Serpent y Twofish.
Las principales características que se pidió a AES (Advanced Encryption Standard) es que al menos fuese
tan seguro y rápido como TDES, es decir, que al menos evitase los ataques conocidos; además de que pudiera ser implementado en una gran parte de aplicaciones.
AES puede ser usado tanto como cifrador de bloques (block cipher), como cifrador de flujo (stream cipher), como función resumen (hash function), y como generador de números pseudoaleatorios.
El elegido por AES fue el propuesto por Rijndael.
Los cifradores de flujo o stream ciphers, son usados donde se cuenta con un ancho de banda restringido (el número de bits que se transmiten a la vez), además de que se requiere independencia en los bloques transmitidos.
Entonces la mejor opción es cifrar bit por bit o byte por byte. Este tipo de cifradores tiene la característica además de ser muy rápidos.
Los algoritmos más conocidos de este tipo son RC-4, SEAL y WAKE.
Como colofón a estos ejemplos de algoritmos de cifrado de clave simétrica, hay que resaltar que es muy crítico en estos sistemas el hecho de la distribución de la clave, ya que es única y debe conocerla tanto el emisor como el receptor de la comunicación.
Para solucionar este problema se inventaron los sistemas de clave asimétrica o pública, como se verá en el siguiente apartado.
Además, el NIST en su documento del pasado mes de Agosto de 2007 considera que para 2011, los cifrados simétricos con seguridades de 80 bits en la clave, estarán fuera de juego al menos para la identificación personal, y los sistemas deberán haber migrado a una seguridad equivalente a 112 bits o hacia cotas más elevadas aún.
Técnicas de criptografía asimétrica
Hasta 1976, que fue el año en que Diffie y Hellman propusieron esta nueva técnica criptográfica, lo que se tenía era el cifrado simétrico convencional basado en sencillas operaciones de sustitución y permutación (o combinaciones de estas), y su problemática del intercambio de la única clave para cifrado y descifrado.
Originalmente idearon este nuevo sistema como un mecanismo para el intercambio de la clave simétrica por el consabido problema que tiene, aunque la aplicación más importante de la técnica de cifrado con clave pública será la firma digital.
El fundamento de esta técnica consiste en que se utilizan dos claves diferentes, una para cifrar y otra para descifrar.
En este punto se debe aclarar una cuestión, y es que la criptografía asimétrica no necesariamente es de clave pública, pero sí en el sentido contrario de la expresión.
Por ejemplo el algoritmo de encriptación de Pohlig – Hellman es asimétrico pero no posee información pública.
Dicho esto, conviene aclarar que en adelante se utilizarán ambas expresiones indistintamente, como sinónimas, ya que en más de un 90% de los casos se tratan con algoritmos asimétricos y públicos (como el RSA).
Descripción de los sistemas de clave pública
Como se ha dicho anteriormente, estos algoritmos de cifrado asimétrico utilizan un par de claves diferentes en la comunicación, una para cifrar y otra para descifrar.
Ambas claves están matemáticamente relacionadas entre sí y es prácticamente imposible deducir una a partir de la otra.
El par de claves se genera según el algoritmo de cifrado asimétrico que se utilice, quedando una como secreta (privada) y otra como conocida para terceros (clave pública).
La seguridad de este sistema se basa en la imposibilidad de calcular una clave a partir de la otra, además, claro está, de mantener la clave privada en secreto.
Componentes fundamentales del sistema criptográfico de clave pública:
– Claves pública y privada. Pareja de claves seleccionadas por los participantes de la comunicación, estos son el emisor y el receptor.
Cada algoritmo de cifrado determina cómo son esas claves y su proceso de selección.
Una permanecerá oculta (privada) y otra se hará pública.
Una descifra lo que la otra cifra, y es recíproco.
– Texto en claro o mensaje a enviar. Es el mensaje o los datos de entrada.
– Algoritmo de cifrado. Realizará las operaciones o transformaciones matemáticas sobre el texto en claro.
Dependerá de la clave (habitualmente la privada) que recibe como entrada el algoritmo.
– Texto cifrado. Es el mensaje producido como consecuencia de efectuar las operaciones de cifrado sobre el texto en claro.
Depende del texto en claro y de la clave de cifrado, entonces
para un mensaje dado, dos claves distintas producirán dos cifrados distintos.
– Algoritmo de descifrado. Realiza las transformaciones (operaciones matemáticas) sobre el texto cifrado con la clave pública que recibe como entrada.
Con estos componentes, las condiciones que debe verificar todo algoritmo de clave pública son las siguientes:
1. Debe ser computacionalmente fácil para cada parte generar un par de claves (pública / privada).
2. Debe ser computacionalmente fácil para un emisor cifrar un mensaje, conociendo la clave pública del receptor y el mensaje.
Esto es lo que se conoce como funciones unidireccionales (one-way functions).
3. Debe ser computacionalmente fácil para el destino descifrar un texto cifrado conociendo la clave privada.
La inversión de lo hecho por la función unidireccional es sencilla si se conoce cierta información adicional (la clave privada). Esto es posible ya que las funciones unidireccionales tienen una puerta trampa secreta (trap-door).
4. Debe ser computacionalmente impracticable para un oponente determinar la clave privada conociendo la clave pública.
5. Debe ser computacionalmente impracticable para un oponente determinar el mensaje original a partir de la clave pública y del texto cifrado.
6. Cualquiera de las 2 claves puede usarse para cifrar, y la otra para descifrar.
Tras citar brevemente las condiciones que enumeraron Diffie y Hellman para los sistemas asimétricos, se van a analizar algunos ataques que podrían pensarse como factibles en el entorno de seguridad del cifrado de clave pública.
Y es que aunque un sistema de cifrado con clave asimétrica cumpla esos requisitos, como todo sistema de seguridad, puede ser vulnerable a los ataques por fuerza bruta (como en el cifrado simétrico).
Como solución a este posible problema se tiene el uso de claves largas, de 512 o 1024 bits. No obstante surge un problema adicional, y es que, al estar el sistema basado en el uso de funciones invertibles, la clave debe ser grande para evitar ataques por fuerza bruta como se ha comentado anteriormente; pero también debe ser lo suficientemente pequeña como para permitir que las operaciones de cifrado y descifrado se realicen de una forma eficiente.
Otro ataque posible, que surge siempre que se habla de la “relación” matemática que existe entre las claves pública y privada, consiste en poder encontrar una a partir de la otra.
No se ha probado que matemáticamente sea imposible de realizar este tipo de ataque, si bien los algoritmos de
cifrado asimétrico están diseñados para que sea un problema computacionalmente costosísimo.
Por todo esto se puede decir que no es comprometido para la seguridad este tipo de ataques.
Por último, citar el ataque conocido como “de mensaje probable” que es exclusivo de los métodos asimétricos.
El ataque consiste en que dado un mensaje corto, esto es de pocos bits de longitud (56 bits por ejemplo), un oponente podría descifrar el mensaje original encontrando aquel que coincida con el texto cifrado transmitido, ya que no importa la longitud de la clave puesto que sería un ataque por
fuerza bruta de 56 bits.
Si bien parece realizable, es muy sencilla su solución ya que los algoritmos añaden bits aleatorios cuando los mensajes son simples.
El algoritmo RSA
Si hay que destacar un algoritmo de entre todos los que existen en los criptosistemas de clave pública, el que mayor interés tiene para este Proyecto y para el mundo de la Firma Digital, ése es sin duda el RSA del que se puede decir que es el estándar de facto.
Es el más usado y también el más sencillo de entender e implementar, y debe su nombre a sus tres inventores: Ronald Rivest, Adi Shamir y Leonard Adleman, que lo publicaron por primera vez en 1977.
Ha estado bajo patente de los Laboratorios RSA hasta el año 2000 por lo que su uso comercial estuvo restringido hasta esa fecha.
Antes de comenzar con el análisis del algoritmo RSA, se procede a comentar algunos algoritmos de clave pública que también tienen cierto interés:
– Algoritmo de Rabin. Publicado en 1979 por Michael O. Rabin; este criptosistema basa su seguridad, al igual que RSA, en la complejidad de la factorización. Sin embargo, la ventaja del criptosistema de Rabin es que se ha demostrado que la complejidad del problema en el que se basa es tan duro como la factorización de enteros, cosa que se desconoce si es cierto en el caso del RSA simple.
El inconveniente que tiene es que cada salida de la función de Rabin puede ser generada por 4 posibles entradas, y si cada salida es un texto cifrado se requiere un tiempo extra en el descifrado para identificar cual de las 4 posibles entradas era el correcto texto en claro.
– Algoritmo DSA (Digital Signature Algorythm). Es un estándar del gobierno federal de los Estados Unidos de América para firmas digitales. DSA se hizo público en 1991y sirve tan solo para firmar y no para cifrar información.
Además, una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA.
– Algoritmo de El Gamal. Se basa en problemas matemáticos de algoritmos discretos y cuya seguridad se fundamenta en la suposición de que la función utilizada es de un sólo sentido y la dificultad de calcular un logaritmo discreto es elevada.
El procedimiento de cifrado y descifrado está basado en cálculos sobre un grupo cíclico cualquiera, lo que lleva a que la seguridad del algoritmo dependa de la dificultad de calcular logaritmos discretos.
– Algoritmos de Curva Elíptica (EC). Es una variante de la criptografía asimétrica. Se basa en las matemáticas de las curvas elípticas. Sus autores argumentan que la Criptografía de Curvas Elítpicas puede ser más rápida y puede usar claves más cortas que los métodos anteriores, como RSA, al tiempo que proporcionan un nivel de seguridad equivalente.
Su fundamento matemático se basa en que una curva elíptica puede ser descrita mediante la expresión: y2 = x3 + ax + b, y con el conjunto de puntos G que forman la curva (por ejemplo, todas las soluciones de la ecuación más un punto O, llamado punto en el infinito) más una operación aditiva de suma, se
forma un grupo conmutativo.
Si las coordenadas x e y se escogen desde un campo finito,
entonces estamos en presencia de un grupo abeliano o conmutativo finito.
El problema del logaritmo discreto sobre este conjunto de puntos se cree que es más difícil de resolver que el correspondiente a los campos finitos.
De esta manera, las longitudes de claves en criptografía de curva elíptica pueden ser más cortas con un nivel de seguridad comparable.
La utilización de curvas elípticas en criptografía fue propuesta de forma independiente por Neal Koblitz y Victor Miller en 1985.
Retomando el algoritmo RSA, como ya se ha indicado, se basa en la dificultad que presenta la factorización de números grandes.
Los mensajes enviados usando el algoritmo RSA se representan
mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100 ) elegidos al azar para conformar la clave de descifrado.
El método emplea expresiones exponenciales en aritmética modular y su seguridad radica en que no hay maneras rápidas
de factorizar un número grande en sus factores primos utilizando computadores convencionales.
A continuación se va a proceder a explicar el funcionamiento básico del algoritmo:
1. Generación del par de claves. El usuario que desea generar sus claves privada y pública elige 2
números primos grandes p y q (con gran cantidad de cifras decimales). Esos dos números
primos se multiplican entre sí y se tiene el número N, que será público.
N = pq
A ese número N, se le aplica la función phi de Euler:
φ(N) = (p-1) (q-1)
Tras ello, se elige otro número e que no tenga factores en común con φ(N). El número e también
es público. Con él se obtiene otro número d que cumple que
ed ≡ 1 módulo φ(N),
esto es, el inverso de e en la aritmética módulo φ(N). Y este número d, es privado.
Una vez hecho lo anterior, ya se tiene el par de claves generado. Siendo N y e la clave pública y
p, q y d la clave privada. Cada usuario del sistema deberá seguir esos pasos para obtener un par
de claves asociadas a su identidad.
2. Cifrado y descifrado de mensajes. Si ahora al usuario que ha generado el par de claves anterior
se le desea enviar un mensaje que sólo pueda leer él, se debe conocer primero su clave pública
(N,e) que por ser pública no compromete su seguridad.
El mensaje que se desea transmitir tiene un equivalente en código numérico (normalmente
binario) que se nombra como m. Entonces se calcula el número
m e módulo N
y se envía.
El usuario cuya clave pública es (N,e) recibe me (módulo N), y con su clave secreta (privada)
toma de ella el número d y calcula, siempre módulo N, lo siguiente:
(m e
)d = m ed
y como e y d son números inversos módulo φ(N), el resultado es m, el mensaje original que se
quería enviar.
3. Seguridad del algoritmo. En los años 60 se podían factorizar de manera relativamente sencilla
números de unas 40 cifras decimales. A finales de los 80, el récord estaba en unas 100 cifras. A
lo largo de los 90 se han llegado a factorizar números cada vez más grandes: en 1994 cayó el
sistema RSA129 (clave de 129 cifras decimales) y dos años después, el RSA130. También han
caído otros como el RSA-576, en 2003. Actualmente la empresa RSA ofrece una recompensa de
200.000 dólares por encontrar la factorización del sistema RSA-2048
En este sentido hay que destacar que una de las ventajas de RSA con respecto a otros criptosistemas,
es que el tamaño de las claves no es fijo, es decir que a medida que pueda comprometerse la
factorización de los módulos RSA empleados (incluso con el desarrollo de nuevos dispositivos
hardware), se puedan elegir claves de longitudes mayores que mantengan la seguridad del
criptosistema. En los años 80 la recomendación habitual era usar claves de 512 bits; mientras que
hoy día se recomiendan claves de 768 bits para usuarios, de 1024 bits para empresas y organismos,
y de 2048 bits para Autoridades de Certificación.
En la siguiente tabla se puede observar la complejidad computacional que conllevaría el intento de
factorizar los números que se manejan en este algoritmo, lo que hace que la seguridad sea elevada,
si bien también implica que a mayor longitud de claves, mayor tiempo de cálculo en el algoritmo.
Aplicaciones de los sistemas de clave pública
Como colofón, hay que resaltar las aplicaciones más importantes de la criptografía de clave pública:
• Confidencialidad en la comunicación. El origen puede cifrar el mensaje con la clave pública del
destino. Así solo lo puede leer el que posea la clave privada asociada a esa clave pública, o lo
que es lo mismo, el receptor deseado.
• Distribución de claves. Se utiliza el cifrado para negociar una clave de sesión entre las partes.
Así esta clave de sesión se puede enviar cifrada con la clave pública de la otra parte para que no
haya compromiso en la distribución.
• Firma Digital. El origen firma un mensaje con su clave privada. Es la aplicación más importante
para este Proyecto, y la que se va a ampliar a continuación.
El Certificado Digital
Un certificado es un documento emitido y firmado digitalmente por una Autoridad de Certificación que
asocia el nombre distintivo de una persona física o entidad con su clave pública durante un periodo de
tiempo. Son documentos digitales que sirven para asegurar la veracidad de la clave pública
perteneciente al propietario del certificado o de la entidad, con la que se firman digitalmente
documentos que puedan proporcionar las más absolutas garantías de seguridad.
En definitiva, los certificados digitales son el equivalente digital del DNI, en lo que a la autentificación
de individuos se refiere, ya que permiten que un individuo demuestre que es quien dice ser, es decir,
que está en posesión de la clave privada o secreta asociada a su certificado. Para los usuarios
proporcionan un mecanismo para verificar la autenticidad de programas y documentos obtenidos a
través de la red, el envío de correo encriptado y/o firmado digitalmente, el control de acceso a
recursos, etc.
Como se ha dejado ya entrever, los certificados digitales sólo son útiles si existe alguna Autoridad
Certificadora que los valide, ya que si uno se certifica a sí mismo no hay ninguna garantía de que su
identidad sea la que anuncia, y por lo tanto, no debe ser aceptada por un tercero que no lo conozca.
Es importante ser capaz de verificar que una autoridad certificadora ha emitido un certificado
determinado, y detectar si un certificado no es válido. Para evitar la falsificación de certificados, la
entidad certificadora después de autentificar la identidad de un sujeto, firma el certificado digitalmente.
De esta forma, los certificados digitales proporcionan un mecanismo criptográfico para implementar la
autentificación; como también proporcionan un mecanismo seguro y escalable para distribuir claves
públicas en comunidades grandes y potencialmente inseguras.
Existen varios formatos de certificados, siendo el más extendido el X.509 versión 3. Este formato es un
estándar del ITU-T (International Telecommunication Union-Telecommunication Standarization Sector) y el
ISO/IEC (International Standards Organization / International Electrotechnical Commission) que se publicó
por primera vez en 1988. El formato de la versión 1 fue extendido en 1993 para incluir dos nuevos
campos que permiten soportar el control de acceso a directorios. Después de emplear el X.509 v2 para
intentar desarrollar un estándar de correo electrónico seguro, el formato fue revisado para permitir la
extensión con campos adicionales, dando lugar al X.509 v3, publicado en 1996.
El formato de certificados X.509 se especifica en un sistema de notación denominado sintaxis abstracta
uno (Abstract Syntax One o ASN.1). Para la transmisión de los datos se aplica el DER (Distinguished
Encoding Rules o reglas de codificación distinguible), que transforma el certificado ASN.1 en una
secuencia de octetos apropiada para la transmisión en redes reales.