Criptografía de clave asimétrica
En esta lección veremos la criptografía de clave asimétrica, que constituye la base de muchas interacciones de red seguras en la actualidad.
Al finalizar la lección habremos cubierto:
- Qué es la criptografía de clave asimétrica
- Usos de la criptografía de clave asimétrica, incluyendo el intercambio de claves y las firmas digitales
- Seguridad de la criptografía de clave asimétrica en general
- Más detalles sobre los algoritmos RSA, DSA y de curvas elípticas, y su seguridad
- Algunos ejemplos de código Python que muestran cómo funcionan los algoritmos en la práctica
- Amenazas a estos algoritmos provenientes tanto de computadoras clásicas como cuánticas
Introducción a la criptografía de clave asimétrica
Como aprendimos en la lección anterior, la criptografía de clave simétrica es muy rápida y eficiente para proteger información, pero tiene algunas limitaciones:
- A medida que aumenta el número de partes que desean intercambiar información de forma segura, la cantidad de claves necesarias crece de manera combinatoria. No ofrece ningún mecanismo para distribuir esas claves de forma segura entre emisores y receptores.
- No contempla la no-repudiación. Cualquier parte puede descifrar o cifrar mensajes sin que haya forma de garantizar que un mensaje fue recibido ni de dónde proviene.
La solución a ambos problemas la ofrece la criptografía de clave asimétrica (AKC, por sus siglas en inglés), también conocida como criptografía de clave pública (PKC), que por ello constituye un pilar fundamental de la seguridad digital moderna.
La criptografía de clave asimétrica (AKC) implica el uso de un par de claves: una pública y una privada. Las claves pública y privada están vinculadas criptográficamente y generalmente se generan al mismo tiempo como un par de claves mediante un algoritmo matemático especializado. La clave pública, como su nombre indica, está destinada a distribuirse libremente, mientras que la clave privada la mantiene en secreto la parte que generó el par. La seguridad de las comunicaciones que emplean pares de claves asimétricas está garantizada siempre que la clave privada permanezca confidencial.

Figura 1. Cifrado de clave asimétrica
La AKC ofrece varias funciones útiles, como:
- Cifrado y descifrado para garantizar la confidencialidad de las comunicaciones.
- Firmas digitales para asegurar la autenticidad, la integridad y la no-repudiación.
- Intercambio seguro de claves para facilitar el uso posterior de criptosistemas simétricos.
En las aplicaciones modernas, la AKC se utiliza principalmente para firmas digitales e intercambio seguro de claves. En esta lección presentamos estas dos funciones clave y luego analizamos diversas variantes de protocolos criptográficos para estas funciones.
Intercambio de claves con criptografía de clave asimétrica
Uno de los problemas fundamentales en criptografía es el intercambio de claves de forma segura. Por ejemplo, si dos partes quieren usar cifrado simétrico, ambas necesitan la misma clave para cifrar y descifrar mensajes. ¿Pero cómo intercambian esa clave de forma segura? La criptografía de clave asimétrica aborda esto mediante mecanismos de intercambio de claves interactivos y no interactivos.
Intercambio de claves interactivo
Un protocolo de intercambio de claves interactivo es un método en el que dos partes colaboran para crear una clave secreta compartida a través de un canal de comunicación inseguro. Esta clave secreta compartida puede usarse después para tareas de cifrado y descifrado simétrico.
El más conocido de estos protocolos es el algoritmo Diffie-Hellman (DH), diseñado específicamente para facilitar el intercambio de claves. En este protocolo, cada parte genera un par de claves (pública y privada) y difunde su clave pública. Luego, cada parte usa su propia clave privada y la clave pública de la otra parte para generar una clave secreta compartida. DH emplea los principios de la aritmética modular para asegurar que ambas partes obtengan el mismo secreto compartido, aunque cada parte solo tenga acceso a la clave pública de la otra.
Los criptosistemas modernos basados en criptografía de curva elíptica (ECC) amplían este concepto con el intercambio de claves Diffie-Hellman de curva elíptica (ECDH). ECDH funciona de manera similar a DH pero aprovecha las propiedades de las curvas elípticas, lo que resulta en un sistema más seguro y eficiente.

Figura 2. Protocolo de intercambio de claves
Intercambio de claves no interactivo
A diferencia de los protocolos de intercambio de claves como DH y ECDH, que son interactivos y requieren comunicación de ida y vuelta para acordar la clave simétrica, la AKC también ofrece formas no interactivas de establecer una clave secreta compartida. En estos esquemas, una parte genera un par de claves (pública y privada) y comparte la clave pública con la otra parte. Esta segunda parte genera entonces una clave simétrica aleatoria, la cifra con la clave pública recibida y se la envía a la primera parte. La primera parte usa su clave privada para descifrar el mensaje recibido y así obtiene la clave simétrica compartida. Este esquema es no interactivo en el sentido de que la clave simétrica la determina una parte y simplemente se comunica de forma segura a la otra en forma cifrada.
Una consideración importante en el intercambio de claves no interactivo tiene que ver con la diferencia en bits entre la clave simétrica que las partes desean intercambiar y los tamaños de mensaje recomendados en AKC. Típicamente, las claves simétricas modernas tienen entre 128 y 256 bits de longitud, mientras que los criptosistemas de clave asimétrica como RSA trabajan con tamaños de mensaje de alrededor de 1024 a 4096 bits. Por lo tanto, al usar AKC para transmitir una clave simétrica, por seguridad esta debe codificarse en un mensaje más largo de 1024 a 4096 bits. Esto puede lograrse mediante dos enfoques:
-
Intercambio de claves basado en relleno: En este enfoque, primero se genera la clave simétrica más corta (128-256 bits) y luego se usa un esquema de relleno reversible acordado, como OAEP, para insertarla en un mensaje más largo (1024-4096 bits). Este mensaje más largo se cifra con AKC y se difunde como texto cifrado. El destinatario primero descifra el texto cifrado y luego elimina el relleno para extraer la clave simétrica más corta.
-
Mecanismos de encapsulación de claves (KEM): Con el intercambio de claves basado en KEM, primero se genera un mensaje de texto plano largo y aleatorio (1024-4096 bits), del cual se puede extraer una clave simétrica más corta (128-256 bits) mediante una función de derivación de claves (KDF) acordada. El texto plano más largo se cifra con AKC y se difunde al destinatario como texto cifrado. El destinatario decodifica el texto cifrado usando su clave privada y luego utiliza la KDF para extraer la clave simétrica más corta (128-256 bits). Criptosistemas populares como RSA, con su capacidad para cifrar datos directamente, pueden usarse para implementar KEMs.

Figura 3. Mecanismo de encapsulación de claves
Firmas digitales con criptografía de clave asimétrica
Las firmas digitales son otra poderosa aplicación de la criptografía de clave asimétrica. Proporcionan autenticación, integridad y no-repudiación, posibles gracias al hecho de que en AKC cada entidad posee claves privadas únicas. La idea básica que subyace a los protocolos de firma es que los emisores de mensajes seguros firmarán digitalmente los mensajes con su clave privada única. El receptor verificará entonces la firma digital usando la clave pública del emisor. En AKC, las firmas digitales pueden implementarse usando algoritmos diseñados específicamente para ese propósito o mediante criptosistemas genéricos.

Figura 4. Firmas digitales con criptografía de clave asimétrica
Algoritmos dedicados de firma digital
Actualmente, el estándar estadounidense de procesamiento de información federal (FIPS) para firmas digitales es un esquema dedicado titulado simplemente Algoritmo de firma digital (DSA). De manera algo similar al protocolo Diffie-Hellman, el DSA utiliza las propiedades algebraicas de la exponenciación modular y los inversos multiplicativos para la generación y verificación de firmas.
El algoritmo de firma digital de curva elíptica (ECDSA) es una variante del DSA basada en ECC que ofrece la misma funcionalidad pero con claves significativamente más cortas. Esto resulta en una mayor eficiencia, lo que lo convierte en una opción popular para sistemas con restricciones de recursos.
Tanto DSA como ECDSA se ilustrarán con más detalle más adelante.
Esquemas de firma digital con criptosistemas genéricos
Además de los algoritmos dedicados, las firmas digitales también pueden generarse usando criptosistemas asimétricos genéricos, como RSA.
RSA, que se analizará en detalle en una sección posterior, también explota los inversos multiplicativos modulares y la exponenciación modular como operaciones fundamentales, pero las combina en una secuencia diferente a la de DSA. En RSA, el firmante normalmente crea un hash del mensaje y luego cifra ese hash con su clave privada, creando así la firma digital. Cualquier parte puede verificar esta firma descifrándola con la clave pública del firmante y comparándola con el mensaje hasheado.
Aplicaciones de la criptografía de clave asimétrica
La criptografía de clave asimétrica es ubicua en las aplicaciones de tecnología digital modernas. Las funcionalidades básicas de la AKC descritas anteriormente son los bloques de construcción de muchos protocolos de aplicación de alto nivel, entre ellos:
-
Comunicación por internet: La comunicación segura por internet, como HTTPS, depende en gran medida de la criptografía de clave asimétrica. La seguridad de la capa de transporte (TLS) y su predecesora, la capa de sockets seguros (SSL), utilizan criptografía de clave asimétrica durante el proceso de negociación inicial para establecer una clave simétrica, que luego se usa durante el resto de la sesión de comunicación.
-
Autenticación: La criptografía de clave asimétrica se usa para crear firmas digitales, lo que permite a una entidad autenticar un documento o mensaje digital como proveniente de un emisor específico. Esto se utiliza en muchos escenarios, desde la verificación de actualizaciones de software hasta contratos digitales con validez legal.
-
Cifrado de correo electrónico: Los protocolos de cifrado de correo electrónico como PGP (Pretty Good Privacy) y su alternativa de código abierto GPG (GNU Privacy Guard) utilizan criptografía de clave asimétrica para garantizar que solo el destinatario previsto pueda leer el contenido del correo.
-
Shell seguro (SSH): SSH es un protocolo para el inicio de sesión remoto seguro y otros servicios de red seguros sobre una red insegura. Utiliza criptografía de clave asimétrica para autenticar el servidor ante el cliente y, opcionalmente, el cliente ante el servidor.
-
VPN (red privada virtual): El cifrado de clave asimétrica se usa para establecer conexiones seguras en las VPN, garantizando una comunicación segura a través de redes públicas.
-
Blockchain y criptomonedas: Las tecnologías blockchain, incluyendo Bitcoin y Ethereum, usan criptografía de clave asimétrica. Por ejemplo, la propiedad de Bitcoin se establece mediante firmas digitales que emplean criptografía de clave asimétrica.
-
Autoridades de certificación: La criptografía de clave asimétrica es utilizada por las autoridades de certificación (CA) para emitir y firmar certificados digitales, que se usan en comunicaciones TLS, firma de código, cifrado de correo electrónico y más. Un certificado digital vincula una clave pública a una entidad específica (por ejemplo, una persona o un servidor).

Figura 5. Emisión y firma de certificados digitales mediante criptografía de clave asimétrica
Seguridad de la criptografía de clave asimétrica
Varios conceptos criptográficos se combinan para hacer posible la criptografía de clave asimétrica segura, entre ellos:
Secreto de la clave privada: El requisito de seguridad más básico de la AKC es que la clave privada permanezca secreta. Sin embargo, dado que la clave privada debe estar matemáticamente vinculada a la clave pública, el secreto de la clave privada también requiere que sea computacionalmente inviable derivar la clave privada a partir del conocimiento de la clave pública. Los esquemas de generación de claves en AKC se apoyan en problemas matemáticos computacionalmente difíciles para satisfacer este requisito.
Funcionalidad de trampilla: En AKC, las operaciones de cifrado y descifrado involucran claves complementarias diferentes de un mismo par de claves. El texto cifrado generado mediante el cifrado con una de las claves (por ejemplo, la clave pública) debe ser incomprensible para terceros, aunque fácilmente descifrable por el titular de la clave complementaria (en este caso, la clave privada). En otras palabras, el cifrado debe parecerse a una función unidireccional con trampilla de manera que terceros no puedan invertir la operación y recuperar el texto plano, pero la clave privada proporcione una trampilla secreta que permita invertirla fácilmente. Los algoritmos AKC populares utilizan la exponenciación modular para crear este comportamiento de función unidireccional con trampilla.
Aleatoriedad: El proceso de generación de claves también debe explotar la aleatoriedad para garantizar que las claves sean impredecibles, ya que cualquier patrón o predictibilidad en la generación de claves podría ser explotado por un atacante. La aleatoriedad también se usa para el relleno durante el cifrado, con el fin de generar textos cifrados semánticamente seguros, y dentro de los esquemas de firma digital para producir firmas únicas incluso cuando el mismo mensaje se firma múltiples veces. Por esta razón, el uso de generadores de números aleatorios robustos es una parte importante de la AKC.
Tamaño de clave grande: Al igual que en el caso de la criptografía de clave simétrica (SKC), los tamaños de clave grandes aseguran protección contra ataques de fuerza bruta. Sin embargo, dado que los tamaños de clave grandes también aumentan el costo computacional del proceso de cifrado y descifrado, una solución óptima debe equilibrar las consideraciones de seguridad y eficiencia. La siguiente tabla muestra los tamaños de clave típicos para varios protocolos y aplicaciones de criptografía de clave asimétrica:
| Protocolo | Tamaños de clave típicos (en bits) | Aplicación |
|---|---|---|
| RSA | 1024 (obsoleto), 2048, 3072, 4096 | Cifrado, firmas digitales |
| DSA | 1024 (obsoleto), 2048, 3072 | Firmas digitales |
| DH | 2048, 3072, 4096 | Intercambio de claves |
| ECDH | 224, 256, 384, 521 | Intercambio de claves |
| ECDSA | 224, 256, 384, 521 | Firmas digitales |
Infraestructura de clave pública: En AKC, las claves privadas deben mantenerse en secreto por sus propietarios mientras que las claves públicas se comparten. Es necesario contar con un mecanismo seguro para gestionar y distribuir estas claves públicas entre usuarios. La infraestructura de clave pública (PKI) ofrece una forma de hacerlo mediante certificados digitales. Un certificado digital proporciona prueba de identidad del propietario de la clave pública y es emitido por una autoridad de confianza como una autoridad de certificación (que forma parte de una PKI). Por ello, la PKI desempeña un papel integral en la seguridad de las aplicaciones modernas que utilizan AKC, al habilitar la gestión de claves a gran escala (mediante la creación, gestión, distribución y revocación de certificados digitales).
Riesgos de seguridad para la criptografía de clave asimétrica
Como se indica en la tabla anterior, los algoritmos de clave asimétrica modernos como RSA suelen emplear tamaños de clave mucho más grandes que las contrapartes de clave simétrica de uso común, como AES-128. Incluso los protocolos basados en ECC (ECDH y ECDSA), que tienen claves más pequeñas, emplean un mínimo de al menos 224 bits para las claves. Esto implica a su vez que un ataque de fuerza bruta que involucre una búsqueda exhaustiva del espacio de claves privadas para identificar la clave correcta es computacionalmente inmanejable en el futuro previsible. Esto sigue siendo cierto incluso si se desplegaran computadoras cuánticas para esta tarea. Por ello, los ataques contra la AKC suelen centrarse en explotar otras debilidades potenciales de criptosistemas específicos. Algunos modos de ataque bien documentados apuntan a:
-
Debilidad algorítmica mediante el uso de medios matemáticos y computacionales sofisticados para socavar los supuestos de dificultad que fundamentan los algoritmos de clave asimétrica. Por ejemplo, la seguridad de RSA está basada en la dificultad de factorizar grandes números primos, y avances computacionales recientes han permitido factorizar con éxito claves RSA de 829 bits. Por ello, RSA de 1024 bits está actualmente obsoleto. Como se analizará más adelante, el principal riesgo que representan las computadoras cuánticas para la AKC también cae en esta categoría.
-
Aleatoriedad imperfecta, que puede generar debilidades en el proceso de generación de claves. Por ejemplo, si el generador de números aleatorios usado para crear las claves es defectuoso y genera claves que no son verdaderamente aleatorias, un atacante podría ser capaz de predecir las claves.
-
Fallos de implementación, como errores en la implementación de algoritmos criptográficos que revelan inadvertidamente información sobre las claves. Por ejemplo, un relleno incorrecto puede revelar detalles sobre las claves.
-
Canales laterales que se refieren a fugas de información del sistema físico que realiza la criptografía. Estas fugas pueden presentarse como información de temporización, consumo de energía o incluso sonido, los cuales pueden ser explotados en un llamado ataque de canal lateral. Por ejemplo, analizar cuánto tiempo tardan en ejecutarse las operaciones criptográficas podría revelar el número de «1» en una clave binaria. Esta fuga aparentemente inocente reduce significativamente el espacio de búsqueda, descubriendo posibles soluciones a problemas que inicialmente parecían insuperables.
-
Intercambio de claves mediante la interceptación de claves mientras se están intercambiando, como en un ataque de intermediario (MITM). El protocolo DH es susceptible a ataques MITM si no se incorporan pasos de autenticación adicionales.
-
Almacenamiento de claves apuntando a robar claves de almacenamientos con seguridad deficiente. Esto incluye ataques físicos como la manipulación o el robo de dispositivos de almacenamiento.
Asegurar los criptosistemas de clave asimétrica contra la variedad de ataques posibles es, por tanto, una tarea significativa que involucra consideraciones matemáticas, de hardware, de software, logísticas y legales.
RSA
El algoritmo RSA (Rivest-Shamir-Adleman) es uno de los primeros criptosistemas de clave pública y se utiliza ampliamente para la transmisión segura de datos. Es un criptosistema versátil en el sentido de que proporciona las operaciones necesarias para habilitar el cifrado, el descifrado, las firmas digitales y el intercambio de claves dentro de un marco común.
En esta sección ilustraremos la criptografía de clave asimétrica (AKC) usando RSA a través de ejemplos sencillos.
Usaremos el escenario estándar de dos partes, Alice y Bob, que desean comunicarse de forma segura usando AKC.
El algoritmo RSA
El algoritmo RSA básico involucra cuatro operaciones: generación de claves, distribución de claves, cifrado y descifrado:
-
Generación de claves:
Las claves pública y privada se generan basándose en principios matemáticos sobre números primos, donde calcularlos es fácil, pero el proceso inverso es difícil.
Nos referiremos a ellas como:
- Clave pública:
- Clave privada:
Observa que es común tanto a la clave pública como a la clave privada, y se conoce como el módulo. Lo necesitaremos más adelante.
Detalle matemático
- Elige dos números primos distintos, y .
- Elegidos al azar (por seguridad).
- Deben ser de magnitud similar, pero diferir en longitud por unos pocos dígitos, para dificultar la factorización.
- Los números primos pueden elegirse eficientemente usando una prueba de primalidad.
- Calcula .
- es el módulo tanto para la clave pública como para la privada.
- Calcula el totiente .
- El totiente debe mantenerse en secreto y típicamente se descarta tras la generación de claves.
- Elige un entero tal que y .
- Es decir, y deben ser coprimos.
- Este número forma el exponente de la clave pública y normalmente se elige como un número pequeño por eficiencia computacional.
- El número primo se usa con frecuencia.
- Calcula para satisfacer la relación de congruencia