El protocolo Diffie -Hellman ( Ing. Diffie-Hellman key exchange protocol, DH ) es un protocolo criptográfico que permite que dos o más partes obtengan una clave secreta compartida utilizando un canal de comunicación que no está protegido contra la escucha. La clave resultante se utiliza para cifrar más intercambios utilizando algoritmos de cifrado simétricos .
El esquema de distribución de claves públicas propuesto por Diffie y Hellman hizo una verdadera revolución en el mundo del cifrado, ya que eliminó el principal problema de la criptografía clásica: el problema de la distribución de claves.
En su forma pura, el algoritmo Diffie-Hellman es vulnerable a la modificación de datos en el canal de comunicación, incluido el ataque " Man-in-the-middle (hombre en el medio) ", por lo que los esquemas que lo utilizan utilizan una o dos vías adicionales. Métodos de autenticación de vías .
La transmisión de la clave a través de canales abiertos fue un gran problema en la criptografía del siglo XX. Pero este problema se resolvió después del advenimiento del algoritmo Diffie-Hellman. Este algoritmo permitió responder a la pregunta principal: "¿Cómo, al intercambiar mensajes cifrados, evitar la necesidad de transmitir un código de descifrado secreto que, por regla general, no es menos que el mensaje mismo?" La distribución pública de claves Diffie-Hellman permite que un par de usuarios del sistema desarrollen una clave secreta compartida sin intercambiar datos secretos.
Los fundamentos de la criptografía de clave pública fueron avanzados por Whitfield Diffie y Martin Hellman , e independientemente por Ralph Merkle .
Su contribución a la criptografía fue la afirmación de que las claves se pueden usar en pares, una clave de cifrado y una clave de descifrado, siempre que sea imposible determinar el contenido de la clave de descifrado a partir del contenido de la clave de cifrado transmitida públicamente. Diffie y Hellman presentaron esta idea por primera vez en la Conferencia Nacional de Informática en 1976, y unos meses más tarde se publicó su artículo seminal New Directions in Cryptography [1] .
Un año después, se inventó el primer algoritmo de encriptación asimétrica RSA , que resolvió el problema de comunicarse por un canal inseguro.
En 2002, Martin Hellman escribió :
Este sistema ... desde entonces se conoce como el algoritmo Diffie-Hellman. Sin embargo, cuando el sistema fue descrito por primera vez en papel por Diffie y yo, era un sistema de distribución de clave pública conceptualizado por Merkle y, por lo tanto, debería llamarse "algoritmo Diffie-Hellman-Merkle" si está asociado con nombres. Espero que este pequeño cambio ayude a reconocer la contribución equitativa de Merkle a la invención de la criptografía de clave pública.
En la patente estadounidense 4.200.770, ahora vencida, se enumeran tres autores como los creadores de este algoritmo: Hellman, Diffie y Merkle.
Recién en diciembre de 1997 apareció información actualizada de que Malcolm Williamson ya en 1974 inventó un algoritmo matemático basado en la conmutatividad de los exponentes cuando se exponen sucesivamente ( ). Este método puede llamarse un análogo del algoritmo Diffie-Hellman.
Supongamos que hay dos suscriptores: Alice y Bob. Ambos suscriptores conocen unos dos números y , que no son secretos y también pueden ser conocidos por otros interesados. Para crear una clave secreta desconocida para los demás, ambos suscriptores generan grandes números aleatorios: Alice - número , Bob - número . Alicia luego calcula el resto de la división [3] (1):
(una)y se lo envía a Bob, y Bob calcula el resto de la división (2):
(2)y se lo da a Alicia. Se supone que un atacante puede obtener ambos valores, pero no modificarlos (es decir, no tiene forma de interferir con el proceso de transferencia).
En la segunda etapa, Alice, basándose en lo que tiene y recibió a través de la red , calcula el valor (3):
(3)Bob, basándose en lo que tiene y recibió a través de la red , calcula el valor (4):
(cuatro)Como puede ver, Alice y Bob obtuvieron el mismo número (5):
(5)Pueden usarlo como clave secreta, ya que aquí el atacante se enfrentará a un problema prácticamente irresoluble (en un tiempo razonable) de calcular (3) o (4) de interceptado y , si los números , se eligen lo suficientemente grandes. El funcionamiento del algoritmo se muestra en la Figura [4] .
Cuando el algoritmo se está ejecutando, cada lado:
En implementaciones prácticas , se utilizan para a y b números del orden de 10100 y p del orden de 10300 . El número g no tiene que ser grande y por lo general tiene un valor dentro de los diez primeros.
Eva es criptoanalista. Lee el reenvío de Bob y Alice, pero no cambia el contenido de sus mensajes [6] .
|
|
|
El uso del algoritmo Diffie-Hellman no se limita a dos participantes. Se puede aplicar a un número ilimitado de usuarios. Considere una situación en la que Alice, Bob y Carol generan juntos una clave inicial. En este caso, la secuencia de acciones será la siguiente [7] :
Todos los cálculos se realizan módulo p
Si alguien escucha el canal de comunicación, podrá ver g a mod p , g b mod p , g c mod p , g ab mod p , g ac mod p y g bc mod p , pero no lo hará. ser capaz de reproducir g abc mod p usando cualquier combinación de estos números.
Para que este algoritmo se aplique de manera efectiva a un gran grupo de personas, se deben observar dos principios básicos:
El algoritmo Diffie-Hellman también se puede utilizar en el cifrado de clave pública. En este caso, el esquema general sigue siendo similar al anterior, pero con ligeras diferencias. Alice no pasa los valores de p, g y A directamente a Bob, sino que los publica por adelantado como su clave pública. Bob hace su parte del cálculo, luego cifra el mensaje con un algoritmo simétrico utilizando K como clave y envía el texto cifrado a Alice junto con el valor de B.
En la práctica, el algoritmo de Diffie-Hellman no se usa de esta manera. En esta área, el algoritmo de clave pública dominante es RSA. Esto se debe más a consideraciones comerciales, ya que fue RSA Data Security quien creó la autoridad de certificación. Además, el algoritmo Diffie-Hellman no se puede utilizar al firmar certificados [4] .
Si existe una comunidad de usuarios, cada uno de los usuarios puede publicar la clave pública X= mod n en una base de datos común. Si Alice quiere comunicarse con Bob, necesita obtener la clave pública de Bob y generar su secreto compartido. Alice puede cifrar el mensaje con la clave privada generada y enviárselo a Bob. Bob extraerá la clave pública de Alice y encontrará el secreto compartido.
Cada par de usuarios puede usar su propia clave secreta única sin requerir ningún intercambio de datos entre usuarios. En este caso, todas las claves públicas deben autenticarse para excluir al "hombre en el medio" [4] .
La fuerza criptográfica del algoritmo Diffie-Hellman (es decir, la complejidad de calcular p, g y ) se basa en la complejidad esperada del problema del logaritmo discreto.
El Protocolo Diffie-Hellman es excelente para resistir un ataque pasivo, pero si se implementa un ataque de intermediario, no resistirá. De hecho, en el protocolo, ni Alice ni Bob pueden determinar de forma fiable quién es su interlocutor, por lo que es muy posible imaginar un caso en el que Bob y Alice establecieran una relación con Mallory, que finge ser Bob para Alice, y Alice se presenta. a Bob Y luego, en lugar del protocolo Diffie-Hellman, obtenemos algo similar a lo siguiente:
Paso | Alicia | Mallory | Frijol |
---|---|---|---|
una | g un → | g un | |
2 | g norte ← | gn_ _ | |
g un | g un | ||
3 | gramo metro → | g m | |
cuatro | g b ← | gb_ _ | |
gmb _ | gmb _ |
Es decir, Mallory obtiene una clave compartida con Alice (que cree que es Bob) y una clave compartida con Bob (que cree que es Alice). Y, por lo tanto, puede recibir de Alice cualquier mensaje para Bob, descifrarlo con una clave, leerlo, cifrarlo con una clave y enviárselo a Bob. Por lo tanto, la falsificación puede pasar desapercibida durante mucho tiempo [3] .
La fuerza de la clave compartida en el protocolo Diffie-Hellman se asegura calculando el valor de los números dados y . Este problema se denomina problema computacional de Diffie-Hellman [8] .
Tal formulación es una formulación general del problema en un campo finito ; representa el caso general; para Diffie-Hellman, se usa un caso especial. Si el problema de Diffie-Hellman fuera fácil de resolver, entonces el valor se podría encontrar conociendo los números , y , que son parte del protocolo. Suponiendo que el enemigo tiene la capacidad de interceptar información, se debe suponer que estos números no son un secreto para él. El problema de Diffie-Hellman se basa en la complejidad de calcular el logaritmo discreto [1] .
El logaritmo discreto es similar al logaritmo habitual en el campo de los números reales. Sin embargo, a diferencia del último problema, en el que la solución es aproximada, el problema de cálculo del logaritmo discreto tiene solución exacta.
Como ya ha quedado claro, la teoría de la complejidad computacional está en el corazón de la criptografía moderna. Esto significa que la fortaleza de los criptosistemas de clave pública es condicional y depende de la complejidad de resolver ciertos problemas. Todo esto lleva al hecho de que el problema de Diffie-Hellman y el problema del logaritmo discreto se consideran intratables.
Es intuitivamente claro que la complejidad de resolver estos problemas depende tanto del tamaño del campo Fq como de la elección de los parámetros (parámetro público g y números secretos a y b). Obviamente, las versiones pequeñas de estos problemas tienen solución. La información obtenida nos permite formular supuestos exactos sobre la insolubilidad del problema de Diffie-Hellman y el problema del logaritmo discreto.
Supuesto 1 - Condiciones para la insolubilidad del problema de Diffie-Hellman
Un algoritmo para resolver el problema de Diffie-Hellman es un algoritmo polinomial probabilístico A con ventaja ε > 0:
ε = Prob[ A(desc( ), g, , )].donde los datos de entrada A se especifican en la definición (problema computacional de Diffie-Hellman) (en el campo final).
Sea IG un generador de variantes que recibe como entrada un número , cuyo tiempo de ejecución es un polinomio en el parámetro k, y el resultado es 1) desq( ), donde |q| = k, y 2) el elemento generador g ∈ .
Diremos que el generador IG cumple las condiciones de insolubilidad del problema de Diffie-Hellman si, para variantes de IG( ), no existe un algoritmo de solución con ventaja ε > 0 que no sea despreciable frente a todos los números suficientemente grandes k.
Supuesto 2 - Condiciones para la insolubilidad del problema del logaritmo discreto
Un algoritmo para resolver el problema del logaritmo discreto es un algoritmo polinomial probabilístico A con ventaja ε > 0:
donde los datos de entrada A se especifican en la definición (problema computacional de Diffie-Hellman) (en el campo final).
Sea IG un generador de variantes que recibe como entrada un número , cuyo tiempo de ejecución es un polinomio en el parámetro k, y el resultado es 1) desq( ), donde |q| = k, y 2) el elemento generador g ∈ y 3) el elemento h ∈
Diremos que el generador IG cumple las condiciones de insolubilidad del problema de Diffie-Hellman si, para variantes de IG( ), no existe un algoritmo de solución con ventaja ε > 0 que no sea despreciable frente a todos los números suficientemente grandes k.
En otras palabras, aquí se asume que casi todas las variantes suficientemente grandes de estos problemas en campos finitos no tienen un algoritmo de solución eficiente. La proporción de variantes débiles de estos problemas que pueden resolverse es insignificante.
La elección de los parámetros es importante para la seguridad del protocolo. Muchas implementaciones usan una pequeña cantidad de conjuntos de parámetros de algoritmos populares. En 2016 se presentó un trabajo que mostraba la posibilidad de preparar campos finitos especiales para el algoritmo Diffie-Hellman (DH). El número primo p de una forma especial elegida por los investigadores (1024 bits de tamaño) parece normal para los usuarios, pero simplifica la complejidad de los cálculos utilizando el método SNFS para resolver el problema del logaritmo discreto en varios órdenes de magnitud. Para combatir el ataque, se propone aumentar el tamaño del módulo a 2048 bits [9] [10] .