Sistema criptográfico de clave pública (un tipo de cifrado asimétrico , cifrado asimétrico ): un sistema de cifrado y/o firma electrónica (ES) en el que la clave pública se transmite a través de un canal abierto (es decir, desprotegido, observable) y se utiliza para verificar el ES y para el cifrado de mensajes. Para generar un ES y descifrar el mensaje, se utiliza una clave privada [1] . Los sistemas criptográficos de clave pública son actualmente muy utilizados en diversos protocolos de red , en particular, en los protocolos TLS y su antecesor SSL (subyacenteHTTPS ), a SSH . También se utiliza en PGP , S/MIME .
El cifrado de clave pública asimétrica se basa en los siguientes principios:
Si es necesario transmitir un mensaje cifrado al propietario de las claves, el remitente debe recibir la clave pública. El remitente cifra su mensaje con la clave pública del destinatario y lo transmite al destinatario (el propietario de las claves) a través de canales abiertos. Al mismo tiempo, nadie puede descifrar el mensaje excepto el propietario de la clave privada.
Como resultado, los mensajes se pueden cifrar de forma segura manteniendo la clave de descifrado en secreto para todos, incluso para los remitentes del mensaje.
Este principio se puede explicar a través de la analogía cotidiana "cerradura - llave de la cerradura" para enviar un paquete. El participante A tiene un candado personal y una llave. Si el participante A quiere recibir un paquete secreto del participante B, entonces le da públicamente su castillo. El participante B cierra la cerradura del paquete secreto y lo envía al participante A. Habiendo recibido el paquete, el participante A abre la cerradura con la llave y recibe el paquete.
Saber sobre la transferencia de la cerradura e interceptar el paquete no le dará nada a un atacante potencial: solo el participante A tiene la llave de la cerradura, por lo que el paquete no se puede abrir.
La idea de la criptografía de clave pública está muy relacionada con la idea de las funciones unidireccionales , es decir, aquellas funciones en las que es bastante fácil encontrar un valor a partir de un valor conocido , mientras que la determinación de es imposible en un tiempo razonable.
Pero la función unidireccional en sí misma es inútil en la aplicación: puede cifrar un mensaje, pero no puede descifrarlo. Por lo tanto, la criptografía de clave pública utiliza funciones unidireccionales con una laguna. Una escapatoria es un secreto que ayuda a descifrar. Es decir, existe tal que, conociendo y , podemos calcular . Por ejemplo, si desmonta un reloj en muchas partes, es muy difícil volver a montar un reloj que funcione de nuevo. Pero si hay una instrucción de ensamblaje (laguna), entonces este problema se puede resolver fácilmente.
El destinatario de la información genera una clave pública y una "trampilla" (en otras palabras, la parte pública y privada de la clave), luego transfiere la clave pública al remitente y se queda con la "trampilla". El remitente cifra la información en función de la clave pública: dicha información cifrada es fácil de descifrar si tiene la clave pública y una "puerta trasera" al mismo tiempo. En términos de una función, el receptor se forma con una puerta trasera , luego pasa información sobre los parámetros de la función al remitente (incluso conociendo los parámetros de la función , es imposible detectar la "puerta trasera" en un tiempo razonable). Después de eso, el remitente forma un mensaje encriptado y el destinatario lo extrae , sabiendo .
El siguiente ejemplo ayuda a comprender las ideas y los métodos de la criptografía de clave pública: almacenar contraseñas en una computadora remota a la que los usuarios deben conectarse. Cada usuario de la red tiene una contraseña diferente. En la entrada, indica el nombre e ingresa una contraseña secreta. Pero si almacena la contraseña en el disco de una computadora remota, entonces alguien puede leerla (es especialmente fácil para el administrador de esta computadora hacerlo) y obtener acceso a información secreta. Para resolver el problema, se utiliza una función unidireccional. Al crear una contraseña secreta, la computadora no almacena la contraseña en sí, sino el resultado de calcular la función a partir de esta contraseña y nombre de usuario. Por ejemplo, al usuario Alice se le ocurrió la contraseña "Gladiolus". Al guardar estos datos, se calcula el resultado de la función ( ALICE_GLADIOLUS ), deje que el resultado sea la cadena CAMOMILE , que se guardará en el sistema. Como resultado, el archivo de contraseña tomará la siguiente forma:
Nombre | (Nombre: Contraseña) |
---|---|
ALICIA | MANZANILLA |
FRIJOL | NARCISO |
El inicio de sesión ahora se ve así:
Nombre: | ALICIA |
---|---|
Clave: | GLADIOLO |
Cuando Alice ingresa la contraseña "secreta", la computadora verifica si la función aplicada a ALICE_GLADIOLUS da el resultado correcto CAMOMILE almacenado en el disco de la computadora. Vale la pena cambiar al menos una letra en el nombre o en la contraseña, y el resultado de la función será completamente diferente. La contraseña "secreta" no se almacena en la computadora de ninguna forma. El archivo de contraseñas ahora puede ser visto por otros usuarios sin pérdida de privacidad, ya que la función es casi irreversible.
El ejemplo anterior utiliza una función unidireccional sin lagunas, ya que no es necesario obtener el mensaje original del mensaje cifrado. En el siguiente ejemplo, se considera un esquema con la capacidad de restaurar el mensaje original utilizando una "puerta trasera", es decir, información que es difícil de encontrar. Para cifrar el texto, puede tomar un directorio de suscriptores grande, que consta de varios volúmenes gruesos (es muy fácil encontrar el número de cualquier residente de la ciudad que lo use, pero es casi imposible encontrar un suscriptor que use un número conocido) . Para cada letra del mensaje encriptado, se selecciona un nombre que comienza con la misma letra. Por lo tanto, la letra se asigna al número de teléfono del suscriptor. El mensaje que se envía, por ejemplo " BOX ", se codificará de la siguiente manera:
Mensaje | Nombre elegido | criptotexto |
---|---|---|
A | Korolev | 5643452 |
O | Orejov | 3572651 |
R | Ruzaeva | 4673956 |
O | Osipov | 3517289 |
B | Baturín | 7755628 |
A | Kirsanova | 1235267 |
PERO | Arseniev | 8492746 |
El criptotexto será una cadena de números escritos en el orden de su elección en el directorio. Para que sea difícil de descifrar, debe elegir nombres aleatorios que comiencen con la letra deseada. Por lo tanto, el mensaje original se puede cifrar con muchas listas diferentes de números (criptotextos).
Ejemplos de tales criptotextos:
Criptotexto 1 | Criptotexto 2 | Criptotexto 3 |
---|---|---|
1235267 | 5643452 | 1235267 |
3572651 | 3517289 | 3517289 |
4673956 | 4673956 | 4673956 |
3517289 | 3572651 | 3572651 |
7755628 | 7755628 | 7755628 |
5643452 | 1235267 | 5643452 |
8492746 | 8492746 | 8492746 |
Para descifrar el texto, debe tener un libro de referencia compilado de acuerdo con los números ascendentes. Este directorio es una escapatoria (un secreto que ayuda a obtener el texto inicial) conocido solo por el destinatario. Sin datos de ambos directorios, generalmente es imposible descifrar el texto, pero solo el primer directorio es suficiente para el cifrado [2] . En este caso, el destinatario puede fácilmente formar ambos directorios por adelantado, transfiriendo solo el primero de ellos al remitente para el cifrado.
Sea el espacio de claves y las claves de cifrado y descifrado, respectivamente. es una función de cifrado para una clave arbitraria tal que . Aquí , dónde está el espacio de los textos cifrados, y , dónde está el espacio de los mensajes.
es una función de descifrado que se puede usar para encontrar el mensaje original dado el texto cifrado : , es el conjunto de cifrado y es el conjunto de descifrado correspondiente. Cada par tiene la siguiente propiedad: conociendo , es imposible resolver la ecuación , es decir, para un texto cifrado arbitrario dado, es imposible encontrar un mensaje . Esto significa que es imposible determinar la clave de descifrado correspondiente a partir de la dada . es una función unidireccional y es una escapatoria [3] .
A continuación se muestra un diagrama de la transferencia de información de la persona A a la persona B. Pueden ser tanto individuos como organizaciones, y así sucesivamente. Pero para facilitar la percepción, se acostumbra identificar a los participantes en el programa con personas, más a menudo conocidas como Alice y Bob. El participante que busca interceptar y descifrar los mensajes de Alice y Bob se conoce comúnmente como Eve.
Los cifrados asimétricos comenzaron en New Directions in Modern Cryptography de Whitfield Diffie y Martin Hellman , publicado en 1976 . Influenciados por el trabajo de Ralph Merkle sobre la distribución de claves públicas, propusieron un método para obtener claves privadas utilizando un canal público. Este método exponencial de intercambio de claves, que se conoció como el intercambio de claves Diffie-Hellman , fue el primer método práctico publicado para establecer el intercambio de claves secretas entre usuarios autenticados de un canal. En 2002, Hellman propuso llamar al algoritmo "Diffie-Hellman-Merkle", reconociendo la contribución de Merkle a la invención de la criptografía de clave pública. El mismo esquema fue desarrollado por Malcolm Williamson ( ing. Malcolm J. Williamson ) en la década de 1970, pero se mantuvo en secreto hasta 1997 . El método de distribución de claves públicas de Merkle se inventó en 1974 y se publicó en 1978 y también se conoce como el acertijo de Merkle.
En 1977, los científicos del MIT Ronald Rivest , Adi Shamir y Leonard Adleman desarrollaron un algoritmo de cifrado basado en el problema de la factorización. El sistema recibió el nombre de las primeras letras de sus apellidos ( RSA - Rivest, Shamir, Adleman). El mismo sistema fue inventado en 1973 por Clifford Cocks , quien trabajaba en el Centro de Comunicaciones Gubernamentales ( GCHQ ), pero esta labor se conservó únicamente en los documentos internos del centro, por lo que no se conoció su existencia hasta 1977 . RSA fue el primer algoritmo adecuado tanto para el cifrado como para la firma digital.
En general, los criptosistemas asimétricos conocidos se basan en uno de los problemas matemáticos complejos, que le permite construir funciones unidireccionales y funciones de puerta trasera. Por ejemplo, los criptosistemas Merkle-Hellman y Hoare-Rivest se basan en el llamado problema del mochilero .
Sean 3 claves , , , distribuidas como se muestra en la tabla.
Cara | Llave |
---|---|
Alicia | |
Frijol | |
Villancico | |
dave | , |
elena | , |
Franco | , |
Luego, Alice puede cifrar el mensaje con la clave y Ellen puede descifrar con las claves , Carol puede cifrar con la clave y Dave puede descifrar con las claves . Si Dave encripta el mensaje con la clave , entonces Ellen puede leer el mensaje, si tiene la clave , entonces Frank puede leerlo, si tiene ambas claves y entonces Carol leerá el mensaje. Otros participantes actúan de manera similar. Por lo tanto, si se usa un subconjunto de claves para el cifrado, entonces se requieren las claves restantes del conjunto para el descifrado. Este esquema se puede utilizar para n claves.
Cifrado con una clave | Descifrado por clave |
---|---|
y | |
y | |
y | |
, | |
, | |
, |
Considere primero un conjunto que consta de tres agentes: Alice, Bob y Carol. Alice recibe llaves y , Bob - y , Carol - y . Ahora, si el mensaje que se envía está encriptado con la clave , solo Alice puede leerlo aplicando secuencialmente las claves y . Si desea enviar un mensaje a Bob, el mensaje está encriptado con la clave , Carol, con la clave . Si desea enviar un mensaje tanto a Alice como a Carol, las claves y se utilizan para el cifrado .
La ventaja de este esquema es que solo se necesita un mensaje y n claves para implementarlo (en un esquema con n agentes). Si se envían mensajes individuales, es decir, se usan claves separadas para cada agente (un total de n claves) y cada mensaje, entonces se requieren claves para enviar mensajes a todos los subconjuntos diferentes.
La desventaja de este esquema es que también necesita transmitir un subconjunto de agentes (la lista de nombres puede ser larga) a los que desea transmitir el mensaje. De lo contrario, cada uno de ellos tendrá que pasar por todas las combinaciones de teclas en busca de una adecuada. Además, los agentes tendrán que almacenar una cantidad considerable de información sobre las claves [4] .
Parecería que un criptosistema de clave pública es un sistema ideal que no requiere un canal seguro para transmitir la clave de cifrado. Esto implicaría que dos usuarios legítimos podrían comunicarse a través de un canal abierto sin tener que reunirse para intercambiar claves. Desafortunadamente, no lo es. La figura ilustra cómo Eve, actuando como un interceptor activo, puede hacerse cargo del sistema (descifrar el mensaje destinado a Bob) sin romper el sistema de cifrado.
En este modelo, Eve intercepta la clave pública enviada por Bob a Alice. Luego genera un par de claves y se "disfraza" de Bob enviando a Alice la clave pública , que Alice cree que es la clave pública que Bob le envió. Eve intercepta los mensajes cifrados de Alice a Bob, los descifra con la clave secreta , los vuelve a cifrar con la clave pública de Bob y envía el mensaje a Bob. Por lo tanto, ninguno de los participantes se da cuenta de que hay un tercero que puede simplemente interceptar el mensaje o reemplazarlo por un mensaje falso . Esto destaca la necesidad de autenticación de clave pública . Para ello se suelen utilizar certificados . La gestión de claves distribuidas en PGP resuelve el problema con la ayuda de garantes [5] .
Otra forma de ataque es calcular la clave privada a partir de la clave pública (Figura inferior). El criptoanalista conoce el algoritmo de encriptación , lo analiza, trata de encontrarlo . Este proceso se simplifica si el criptoanalista ha interceptado varios criptotextos c enviados por la persona A a la persona B.
La mayoría de los criptosistemas de clave pública se basan en el problema de factorización de números grandes. Por ejemplo, RSA utiliza el producto de dos números grandes como clave pública n. La complejidad de descifrar dicho algoritmo radica en la dificultad de factorizar el número n. Pero este problema se puede resolver de manera realista. Y cada año el proceso de descomposición se vuelve más y más rápido. A continuación se muestran los datos de factorización utilizando el algoritmo "Quadratic Sieve".
Año | Número de lugares decimales en número expandido |
¿Cuántas veces más difícil es factorizar un número de 512 bits? |
---|---|---|
1983 | 71 | > 20 millones |
1985 | 80 | > 2 millones |
1988 | 90 | 250 mil |
1989 | 100 | 30 mil |
1993 | 120 | 500 |
1994 | 129 | 100 |
Además, el problema de la descomposición puede resolverse potencialmente utilizando el algoritmo de Shor cuando se utiliza una computadora cuántica lo suficientemente potente .
Para muchos métodos de encriptación asimétrica, la fuerza criptográfica obtenida como resultado del criptoanálisis difiere significativamente de los valores declarados por los desarrolladores de algoritmos basados en estimaciones teóricas. Por lo tanto, en muchos países, el tema del uso de algoritmos de encriptación de datos está en el campo de la regulación legislativa. En particular, en Rusia, solo aquellas herramientas de software de encriptación de datos que han pasado la certificación estatal en organismos administrativos, en particular, en el FSB , FSTEC , están permitidas para su uso en organizaciones estatales y comerciales [6] .
Se pueden utilizar algoritmos de criptosistema de clave pública [7] :
Ventajas de los cifrados asimétricos sobre los simétricos :
Desventajas del algoritmo de cifrado asimétrico en comparación con el simétrico:
Longitud de clave simétrica, bit | Longitud de la clave RSA, bits |
---|---|
56 | 384 |
64 | 512 |
80 | 768 |
112 | 1792 |
128 | 2304 |