| Artículos | 01 JUN 2007

Certificados y firmas digitales

Tags: Histórico
Curso de criptografía para la Web (y V)
Gonzalo Alvarez.
Esta última entrega explica cómo usar los certificados y las firmas digitales dentro de una aplicación web. Se presentan las clases que permiten leer los certificados desde archivos y desde almacenes y la manera como se utiliza el estándar PKCS #12 para facilitar el firmado.

Nivel de dificultad: Alto
Objetivo: Implantar de forma segura la criptografía de clave pública en una aplicación web
Herramientas: Las propias herramientas de desarrollo de aplicaciones web

En la vida real se utilizan distintos tipos de documentos para identificar a las personas o sus atributos en diferentes contextos: por ejemplo, el DNI, para identificarse ante las autoridades; el carnet de estudiante para pagar tarifa reducida en el tren; o el carnet de conducir para identificarse ante el agente de tráfico. Estos documentos contienen la identidad del titular junto con una serie de atributos y vienen firmados o sellados por una autoridad de confianza, a menudo en un formato que vuelve difícil su falsificación. Además de validar la identidad de las personas, en el mundo real también es necesario en ciertas ocasiones firmar documentos, con el fin de vincularlos a una persona: queda así demostrado que esa persona fue la autora del documento o que estaba conforme con su contenido. En el mundo electrónico, los certificados y las firmas digitales se corresponden con los dos conceptos anteriores.
En esta última entrega se aborda un tema muy importante desde el punto de vista de la seguridad de las aplicaciones web: los certificados y las firmas digitales. Estos elementos proporcionan varios servicios de seguridad que a menudo hay que ofrecer en una aplicación web: 1) la autenticación de las partes mediante la presentación de certificados digitales; 2) la garantía de la integridad mediante la adición de firmas digitales; 3) el no repudio de los mensajes; 4) el acuerdo de claves de sesión. La forma más frecuente como se utilizan estas tecnologías dentro de una aplicación web es a través de SSL, que permite cifrar los datos, asegurar su integridad y garantizar la identidad de las partes, tanto del servidor web como opcionalmente del cliente. La protección de las comunicación y la autenticación de las partes mediante SSL ha sido tratada en profundidad en “Protección del transporte de datos con SSL” (PC World nº 231), por lo que no se abordará nuevamente en este artículo. En cambio, se examinará cómo utilizar los certificados desde dentro del propio código de las páginas web para por ejemplo firmar contenidos.

Introducción a los certificados y firmas digitales
Para entender en toda su magnitud la importancia de los certificados digitales conviene remontarse a uno de los problemas históricos de la criptografía más difíciles de solventar: la distribución de las claves de cifrado. Como el lector sabe de sobra, existen algoritmos simétricos o de clave secreta, en los que se utiliza la misma clave tanto para la operación de cifrado como de descifrado. Estos algoritmos utilizan claves de una longitud típica de entre 128 y 256 bits, lo que se considera seguro para protegerse frente a los ataques de fuerza bruta o de búsqueda exhaustiva, habida cuenta de la potencia de cálculo actual y para el futuro próximo. Poseen además la cualidad de ser muy rápidos, lo que los hace adecuados para cifrar grandes volúmenes de datos o cuando la velocidad sea un requisito decisivo, como las comunicaciones en tiempo presente. Existen numerosos algoritmos dentro de esta categoría, de demostrada seguridad y robustez, siendo los más conocidos y utilizados DES, 3DES, AES, IDEA, RC4 o RC5. Así que, si el cifrado de la información ya está resuelto, ¿dónde reside el problema? Precisamente en la distribución de claves, es decir, cómo hacer para que el emisor y el destinatario de la información cifrada se pongan de acuerdo respecto a qué clave de sesión utilizar. Este acuerdo puede alcanzarse si ambos se conocen y están en contacto físico, pero ¿qué ocurre con los millones de servidores y clientes que se relacionan en Internet? En este caso resulta crucial contar con un mecanismo que permita hacer llegar la clave a ambos participantes de la comunicación de una forma segura.
Aquí es donde entra en escena la criptografía de clave pública o asimétrica, en la que se utiliza una pareja de claves de cifrado: una pública, conocida por todo el mundo, y otra privada, sólo conocida por su legítimo poseedor. Estos algoritmos utilizan claves de longitudes mucho mayores, como 1.024, 2.048 ó 4.096 bits, e incluso más. RSA es el algoritmo de clave pública más extendido. Debido a la complejidad de las operaciones aritméticas implicadas con números tan grandes, estos algoritmos alcanzan velocidades de cifrado muy bajas, por lo que sólo pueden utilizarse eficientemente para cifrar datos de escasa longitud. Valiéndose de la criptografía asimétrica resulta aparentemente sencillo solucionar el problema de la distribución segura de claves: uno de los participantes genera aleatoriamente una clave de cifrado para un algoritmo simétrico, por ejemplo AES, conocida como clave de sesión, ya que se utilizará para una única sesión y después se descartará. A continuación utiliza la clave pública de su interlocutor, que por ser pública es conocida por todo el mundo, y con ella cifra la clave de sesión recién creada. La manda a través del canal inseguro, sin miedo a que sea interceptada por un atacante, ya que sólo el destinatario, legítimo poseedor de la correspondiente clave privada, podrá descifrarlo.
Pero no acaba ahí la utilidad de la criptografía de clave pública. También sirve para crear firmas digitales. Los protocolos de firma digital se implantan junto con funciones unidireccionales de resumen (funciones hash), de manera que lo que en realidad se firma es un resumen, el hash del documento. Este mecanismo implica el cifrado, mediante la clave privada del emisor, del hash de los datos, que serán transferidos junto con el mensaje. Una vez en el receptor, el mensaje se procesa debidamente para verificar su integridad. El proceso de firma digital viene ilustrado en la Figura 1:
Paso 1. Alicia genera un hash del documento.
Paso 2. Alicia cifra el hash con su clave privada, firmando por tanto el documento, ya que nadie excepto Alicia conoce dicha clave privada y por consiguiente solamente ella podría haber realizado la operación de cifrado.
Paso 3. Alicia envía el documento junto con el hash firmado a Bernardo.
Paso 4. Bernardo genera un hash del documento recibido de Alicia, usando la misma función de hash.
Paso 5. Después Bernardo descifra el hash firmado utilizando para ello la clave pública de Alicia, que, como su nombre indica, es conocida por todos.
Paso 6. Si el hash firmado coincide con el hash que Bernardo ha calculado, entonces la firma se da por válida.
Las funciones de hash, tratadas en la entrega anterior, reducen el mensaje de partida a un valor de menor longitud, de forma que éste sirve como representación compacta del mensaje original, pudiendo aplicársele el correspondiente cifrado sin problemas graves de rendimiento. El hash siempre tiene la misma longitud (por ejemplo, 128 bits para MD5 y 160 bits para SHA-1), mientras que el documento cuyo hash se calcula puede tener una longitud arbitraria. Ahora bien, para que una función hash sea criptográficamente segura es necesari

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información