La criptografía de clave pública , o criptografía asimétrica , es el campo de los sistemas criptográficos que utilizan pares de claves relacionadas. Cada par de claves consta de una clave pública y una clave privada correspondiente . [1] [2] Los pares de claves se generan con algoritmos criptográficos basados en problemas matemáticos denominados funciones unidireccionales . La seguridad de la criptografía de clave pública depende de mantener en secreto la clave privada; la clave pública se puede distribuir abiertamente sin comprometer la seguridad. [3]
En un sistema de cifrado de clave pública , cualquiera con una clave pública puede cifrar un mensaje, produciendo un texto cifrado , pero sólo aquellos que conocen la clave privada correspondiente pueden descifrar el texto cifrado para obtener el mensaje original. [4]
Por ejemplo, un periodista puede publicar la clave pública de un par de claves de cifrado en un sitio web para que las fuentes puedan enviar mensajes secretos a la organización de noticias en texto cifrado. Sólo el periodista que conoce la clave privada correspondiente puede descifrar los textos cifrados para obtener los mensajes de las fuentes; un espía que lea el correo electrónico en camino hacia el periodista no puede descifrar los textos cifrados.
En un sistema de firma digital , un remitente puede utilizar una clave privada junto con un mensaje para crear una firma . Cualquiera que tenga la clave pública correspondiente puede verificar si la firma coincide con el mensaje, pero un falsificador que no conozca la clave privada no puede encontrar ningún par de mensaje/firma que pase la verificación con la clave pública. [5] [6]
Por ejemplo, un editor de software puede crear un par de claves de firma e incluir la clave pública en el software instalado en los ordenadores. Más tarde, el editor puede distribuir una actualización del software firmada con la clave privada, y cualquier ordenador que reciba una actualización puede confirmar que es auténtica verificando la firma con la clave pública. Mientras el editor de software mantenga en secreto la clave privada, incluso si un falsificador puede distribuir actualizaciones maliciosas a los ordenadores, no puede convencer a los ordenadores de que las actualizaciones maliciosas son auténticas.
Los algoritmos de clave pública son primitivos de seguridad fundamentales en los criptosistemas modernos , incluidas las aplicaciones y protocolos que ofrecen garantía de confidencialidad, autenticidad e irrepudiabilidad de las comunicaciones electrónicas y el almacenamiento de datos. Son la base de numerosos estándares de Internet, como Transport Layer Security (TLS) , SSH , S/MIME y PGP . Algunos algoritmos de clave pública proporcionan distribución de claves y confidencialidad (por ejemplo, intercambio de claves Diffie-Hellman ), algunos proporcionan firmas digitales (por ejemplo, Digital Signature Algorithm ) y algunos proporcionan ambas (por ejemplo, RSA ). En comparación con el cifrado simétrico , el cifrado asimétrico puede ser demasiado lento para muchos propósitos. [7] Los criptosistemas actuales (como TLS , Secure Shell ) utilizan tanto el cifrado simétrico como el asimétrico, a menudo mediante el uso del cifrado asimétrico para intercambiar de forma segura una clave secreta, que luego se utiliza para el cifrado simétrico.
Antes de mediados de los años 1970, todos los sistemas de cifrado utilizaban algoritmos de clave simétrica , en los que tanto el emisor como el receptor utilizan la misma clave criptográfica junto con el algoritmo subyacente, y ambos deben mantenerla en secreto. Por necesidad, la clave en todos estos sistemas tenía que intercambiarse entre las partes que se comunicaban de alguna manera segura antes de cualquier uso del sistema, por ejemplo, a través de un canal seguro . Este requisito nunca es trivial y muy rápidamente se vuelve inmanejable a medida que aumenta el número de participantes, o cuando no hay canales seguros disponibles, o cuando (como es una práctica criptográfica sensata), las claves se cambian con frecuencia. En particular, si se pretende que los mensajes sean seguros para otros usuarios, se requiere una clave separada para cada posible par de usuarios.
Por el contrario, en un sistema de clave pública, las claves públicas pueden difundirse amplia y abiertamente, y sólo las claves privadas correspondientes necesitan ser mantenidas en secreto por su propietario.
Dos de los usos más conocidos de la criptografía de clave pública son:
Una cuestión importante es la confianza/prueba de que una clave pública en particular es auténtica, es decir, que es correcta y pertenece a la persona o entidad que se afirma que es, y que no ha sido alterada ni reemplazada por un tercero (quizás malintencionado). Existen varios enfoques posibles, entre ellos:
Una infraestructura de clave pública (PKI), en la que uno o más terceros (conocidos como autoridades de certificación ) certifican la propiedad de pares de claves. TLS se basa en esto. Esto implica que el sistema PKI (software, hardware y administración) es confiable para todos los involucrados.
Una " red de confianza " descentraliza la autenticación mediante el uso de respaldos individuales de vínculos entre un usuario y la clave pública que pertenece a ese usuario. PGP utiliza este enfoque, además de la búsqueda en el sistema de nombres de dominio (DNS). El sistema DKIM para firmar digitalmente correos electrónicos también utiliza este enfoque.
La aplicación más obvia de un sistema de cifrado de clave pública es cifrar la comunicación para proporcionar confidencialidad : un mensaje que un remitente cifra utilizando la clave pública del destinatario, que solo puede descifrarse con la clave privada asociada del destinatario.
Otra aplicación de la criptografía de clave pública es la firma digital . Los esquemas de firma digital se pueden utilizar para la autenticación del remitente .
Los sistemas de no repudio utilizan firmas digitales para garantizar que una parte no pueda disputar con éxito su autoría de un documento o comunicación.
Otras aplicaciones construidas sobre esta base incluyen: dinero digital , acuerdos de clave autenticados por contraseña , servicios de sellado de tiempo y protocolos de no repudio.
Debido a que los algoritmos de clave asimétrica son casi siempre mucho más intensivos computacionalmente que los simétricos, es común usar un algoritmo de intercambio de clave asimétrica público/privado para cifrar e intercambiar una clave simétrica , que luego es utilizada por la criptografía de clave simétrica para transmitir datos utilizando la clave simétrica ahora compartida para un algoritmo de cifrado de clave simétrica. PGP , SSH y la familia de esquemas SSL/TLS utilizan este procedimiento; por lo tanto, se denominan criptosistemas híbridos . El intercambio de claves inicial basado en criptografía asimétrica para compartir una clave simétrica generada por el servidor desde el servidor al cliente tiene la ventaja de no requerir que una clave simétrica se comparta previamente de forma manual, como en papel impreso o discos transportados por un mensajero, al tiempo que proporciona el mayor rendimiento de datos de la criptografía de clave simétrica sobre la criptografía de clave asimétrica para el resto de la conexión compartida.
Como ocurre con todos los sistemas relacionados con la seguridad, la criptografía de clave pública presenta diversas debilidades potenciales. Aparte de una mala elección de un algoritmo de clave asimétrica (hay pocos que se consideren satisfactorios en general) o de una longitud de clave demasiado corta, el principal riesgo de seguridad es que se conozca la clave privada de un par de claves. En ese caso, se perdería toda la seguridad de los mensajes, la autenticación, etc.
Además, con el advenimiento de la computación cuántica , muchos algoritmos de clave asimétrica se consideran vulnerables a ataques, y se están desarrollando nuevos esquemas resistentes a la computación cuántica para superar el problema. [10] [11]
En teoría, todos los esquemas de clave pública son susceptibles a un " ataque de búsqueda de clave por fuerza bruta ". [12] Sin embargo, un ataque de este tipo no es práctico si la cantidad de cálculo necesaria para tener éxito (denominada "factor de trabajo" por Claude Shannon ) está fuera del alcance de todos los atacantes potenciales. En muchos casos, el factor de trabajo se puede aumentar simplemente eligiendo una clave más larga. Pero otros algoritmos pueden tener inherentemente factores de trabajo mucho más bajos, lo que hace que la resistencia a un ataque de fuerza bruta (por ejemplo, de claves más largas) sea irrelevante. Se han desarrollado algunos algoritmos especiales y específicos para ayudar a atacar algunos algoritmos de cifrado de clave pública; tanto el cifrado RSA como el ElGamal tienen ataques conocidos que son mucho más rápidos que el enfoque de fuerza bruta. [ cita requerida ] Sin embargo, ninguno de ellos ha mejorado lo suficiente como para ser realmente práctico.
Se han descubierto importantes debilidades en varios algoritmos de clave asimétrica que antes eran prometedores. El algoritmo de "empaquetado en mochila" resultó ser inseguro después del desarrollo de un nuevo ataque. [13] Como sucede con todas las funciones criptográficas, las implementaciones de clave pública pueden ser vulnerables a ataques de canal lateral que aprovechan la fuga de información para simplificar la búsqueda de una clave secreta. Estos ataques suelen ser independientes del algoritmo que se esté utilizando. Se están realizando investigaciones para descubrir nuevos ataques y protegerse contra ellos.
Otra vulnerabilidad de seguridad potencial en el uso de claves asimétricas es la posibilidad de un ataque de tipo "man-in-the-middle" , en el que la comunicación de claves públicas es interceptada por un tercero (el "man in the middle") y luego modificada para proporcionar claves públicas diferentes en su lugar. Los mensajes y respuestas cifrados deben, en todos los casos, ser interceptados, descifrados y vueltos a cifrar por el atacante utilizando las claves públicas correctas para los diferentes segmentos de comunicación a fin de evitar sospechas. [ cita requerida ]
Se dice que una comunicación es insegura cuando los datos se transmiten de una manera que permite la interceptación (también llamada " sniffing "). Estos términos se refieren a la lectura de los datos privados del remitente en su totalidad. Una comunicación es particularmente insegura cuando las interceptaciones no pueden ser prevenidas o monitoreadas por el remitente. [14]
Un ataque de intermediario puede resultar difícil de implementar debido a las complejidades de los protocolos de seguridad modernos. Sin embargo, la tarea se vuelve más sencilla cuando un remitente utiliza medios inseguros, como redes públicas, Internet o comunicaciones inalámbricas. En estos casos, un atacante puede comprometer la infraestructura de comunicaciones en lugar de los datos en sí. Un hipotético miembro malintencionado del personal de un proveedor de servicios de Internet (ISP) podría considerar que un ataque de intermediario es relativamente sencillo. Capturar la clave pública solo requeriría buscar la clave a medida que se envía a través del hardware de comunicaciones del ISP; en esquemas de clave asimétrica implementados correctamente, esto no es un riesgo significativo. [ cita requerida ]
En algunos ataques avanzados de intermediario, un lado de la comunicación verá los datos originales mientras que el otro recibirá una variante maliciosa. Los ataques de intermediario asimétricos pueden impedir que los usuarios se den cuenta de que su conexión está comprometida. Esto sigue siendo así incluso cuando se sabe que los datos de un usuario están comprometidos porque los datos parecen estar bien para el otro usuario. Esto puede dar lugar a desacuerdos confusos entre usuarios como "¡debe ser de tu lado!" cuando ninguno de los usuarios tiene la culpa. Por lo tanto, los ataques de intermediario solo se pueden prevenir por completo cuando la infraestructura de comunicaciones está controlada físicamente por una o ambas partes; como a través de una ruta cableada dentro del propio edificio del remitente. En resumen, las claves públicas son más fáciles de alterar cuando el hardware de comunicaciones utilizado por un remitente está controlado por un atacante. [15] [16] [17]
Una estrategia para prevenir este tipo de ataques consiste en utilizar una infraestructura de clave pública (PKI), un conjunto de funciones, políticas y procedimientos necesarios para crear, gestionar, distribuir, utilizar, almacenar y revocar certificados digitales y gestionar el cifrado de clave pública. Sin embargo, esta técnica tiene posibles debilidades.
Por ejemplo, todas las partes participantes deben confiar en que la autoridad de certificación que emite el certificado ha comprobado correctamente la identidad del titular de la clave, ha garantizado la exactitud de la clave pública cuando emite un certificado, está protegida contra la piratería informática y ha llegado a acuerdos con todos los participantes para comprobar todos sus certificados antes de que puedan comenzar las comunicaciones protegidas. Los navegadores web , por ejemplo, cuentan con una larga lista de "certificados de identidad autofirmados" de los proveedores de PKI; estos se utilizan para comprobar la buena fe de la autoridad de certificación y, luego, en un segundo paso, los certificados de los posibles comunicadores. Un atacante que pudiera subvertir una de esas autoridades de certificación para que emitiera un certificado para una clave pública falsa podría entonces montar un ataque de "man-in-the-middle" con la misma facilidad que si el esquema de certificados no se utilizara en absoluto. Un atacante que penetre en los servidores de una autoridad y obtenga su almacén de certificados y claves (públicas y privadas) podría falsificar, enmascarar, descifrar y falsificar transacciones sin límite, suponiendo que pudiera ubicarse en el flujo de comunicación.
A pesar de sus problemas teóricos y potenciales, la infraestructura de clave pública se utiliza ampliamente. Algunos ejemplos son TLS y su predecesor SSL , que se utilizan habitualmente para proporcionar seguridad a las transacciones de los navegadores web (por ejemplo, la mayoría de los sitios web utilizan TLS para HTTPS ).
Además de la resistencia a los ataques de un par de claves en particular, al implementar sistemas de claves públicas se debe tener en cuenta la seguridad de la jerarquía de certificación. Algunas autoridades de certificación (normalmente un programa creado especialmente para ello y que se ejecuta en un servidor) avalan las identidades asignadas a claves privadas específicas mediante la producción de un certificado digital. Los certificados digitales de clave pública suelen ser válidos durante varios años, por lo que las claves privadas asociadas deben conservarse de forma segura durante ese tiempo. Cuando una clave privada utilizada para la creación de certificados en un nivel superior de la jerarquía del servidor PKI se ve comprometida o se divulga accidentalmente, es posible que se produzca un " ataque de intermediario ", lo que hace que cualquier certificado subordinado sea totalmente inseguro.
La mayoría de los programas de cifrado de clave pública disponibles no ocultan metadatos en el encabezado del mensaje, que pueden incluir la identidad del remitente y el destinatario, la fecha de envío, el campo de asunto y el software que utilizan, etc. En cambio, solo se oculta el cuerpo del mensaje y solo se puede descifrar con la clave privada del destinatario previsto. Esto significa que un tercero podría construir un modelo bastante detallado de los participantes en una red de comunicación, junto con los temas que se están discutiendo, incluso si el cuerpo del mensaje en sí está oculto.
Sin embargo, recientemente se ha demostrado que se puede enviar mensajes con encabezados cifrados, lo que oculta la identidad del remitente y del destinatario y reduce significativamente los metadatos disponibles para un tercero. [18] El concepto se basa en un repositorio abierto que contiene bloques de metadatos cifrados por separado y mensajes cifrados. Solo el destinatario previsto puede descifrar el bloque de metadatos y, una vez hecho esto, puede identificar y descargar sus mensajes y descifrarlos. Este sistema de mensajería se encuentra actualmente en una fase experimental y aún no se ha implementado. La ampliación de este método revelaría al tercero solo el servidor de bandeja de entrada que utiliza el destinatario y la marca de tiempo de envío y recepción. El servidor podría ser compartido por miles de usuarios, lo que dificultaría mucho el modelado de redes sociales.
En los inicios de la criptografía , dos partes dependían de una clave que intercambiaban mediante un método seguro, pero no criptográfico, como una reunión cara a cara o un mensajero de confianza. Esta clave, que ambas partes deben mantener en absoluto secreto, podría utilizarse para intercambiar mensajes cifrados. Este enfoque de distribución de claves plantea varias dificultades prácticas importantes .
En su libro de 1874 Los principios de la ciencia , William Stanley Jevons escribió: [19]
¿Puede el lector decir qué dos números multiplicados entre sí darán como resultado 8616460799 ? [20] Creo que es poco probable que alguien más que yo lo sepa alguna vez. [19]
En este artículo, describió la relación entre las funciones unidireccionales y la criptografía, y luego analizó específicamente el problema de factorización utilizado para crear una función de trampilla . En julio de 1996, el matemático Solomon W. Golomb dijo: "Jevons anticipó una característica clave del algoritmo RSA para la criptografía de clave pública, aunque ciertamente no inventó el concepto de criptografía de clave pública". [21]
En 1970, James H. Ellis , un criptógrafo británico de la Sede de Comunicaciones del Gobierno del Reino Unido (GCHQ), concibió la posibilidad de un "cifrado no secreto" (ahora llamado criptografía de clave pública), pero no veía ninguna forma de implementarlo. [22] [23]
En 1973, su colega Clifford Cocks implementó lo que se conoce como el algoritmo de cifrado RSA , que proporcionaba un método práctico de "cifrado no secreto", y en 1974 otro matemático y criptógrafo del GCHQ, Malcolm J. Williamson , desarrolló lo que ahora se conoce como intercambio de claves Diffie-Hellman . El esquema también se pasó a la Agencia de Seguridad Nacional de los EE. UU . [24] Ambas organizaciones tenían un enfoque militar y, en cualquier caso, solo se disponía de una potencia informática limitada; el potencial de la criptografía de clave pública permaneció sin explotar por ninguna de las dos organizaciones:
Consideré que era de suma importancia para el uso militar... si puedes compartir tu clave rápidamente y electrónicamente, tienes una gran ventaja sobre tu oponente. Sólo al final de la evolución desde el diseño de Berners-Lee de una arquitectura de Internet abierta para el CERN , su adaptación y adopción para Arpanet ... la criptografía de clave pública alcanzó su máximo potencial.
—Ralph Benjamin [24]
Estos descubrimientos no fueron reconocidos públicamente durante 27 años, hasta que la investigación fue desclasificada por el gobierno británico en 1997. [25]
En 1976, Whitfield Diffie y Martin Hellman publicaron un criptosistema de clave asimétrica, quienes, influenciados por el trabajo de Ralph Merkle sobre la distribución de claves públicas, revelaron un método de acuerdo de clave pública. Este método de intercambio de claves, que utiliza la exponenciación en un campo finito , llegó a conocerse como intercambio de claves Diffie-Hellman . [26] Este fue el primer método práctico publicado para establecer una clave secreta compartida sobre un canal de comunicaciones autenticado (pero no confidencial) sin utilizar un secreto compartido previo. La "técnica de acuerdo de clave pública" de Merkle se conoció como los Rompecabezas de Merkle , y se inventó en 1974 y se publicó recién en 1978. Esto hace que el cifrado asimétrico sea un campo bastante nuevo en la criptografía, aunque la criptografía en sí misma data de hace más de 2000 años. [27]
En 1977, Ron Rivest , Adi Shamir y Leonard Adleman , todos ellos en el MIT , inventaron independientemente una generalización del esquema de Cocks . Los últimos autores publicaron su trabajo en 1978 en la columna Scientific American de Martin Gardner , y el algoritmo pasó a conocerse como RSA , por sus iniciales. [28] RSA utiliza la exponenciación módulo un producto de dos primos muy grandes , para cifrar y descifrar, realizando tanto cifrado de clave pública como firmas digitales de clave pública. Su seguridad está relacionada con la extrema dificultad de factorizar números enteros grandes , un problema para el que no se conoce una técnica general eficiente. Una descripción del algoritmo se publicó en la columna Mathematical Games en la edición de agosto de 1977 de Scientific American . [29]
Desde la década de 1970, se han desarrollado una gran cantidad y variedad de técnicas de cifrado, firma digital, acuerdo de claves y otras, incluido el criptosistema Rabin , el cifrado ElGamal , DSA y ECC .
Algunos ejemplos de técnicas de clave asimétrica bien consideradas para diversos propósitos incluyen:
Algunos ejemplos de algoritmos de clave asimétrica que aún no se han adoptado ampliamente incluyen:
Algunos ejemplos de algoritmos de clave asimétrica notables, aunque inseguros, incluyen:
Algunos ejemplos de protocolos que utilizan algoritmos de clave asimétrica incluyen: