si los participantes tienen su propia clave privada y una clave pública generada
Diffie-Hellman no tiene una clave pública y privada. Imaginemos que estás en una habitación con al menos tres personas: Alice, Bob y Eve. Alice y Bob quieren hablar en privado (y entrar en una habitación diferente es demasiado fácil), por lo que Alice propone usar Diffie-Hellman:
Alice: Hagamos un intercambio de claves DH. Elige un número al azar y aumenta 5 a la potencia de ese número. Divide el resultado por 23 y dime el resto.
Alice elige 16, 5**16=152587890625
, y el resto cuando se divide por 23 es 3.
Bob elige 25, 5**25=298023223876953125
, y el resto cuando se divide por 23 es 10.
Bob: 10.
Alice: obtuve 3. Ahora subo mi número a la potencia de ese número de nuevo, y divídelo entre 23 nuevamente, y toma el resto.
Alice eleva los 10 de Bob al poder 16, 10**16=10000000000000000
, y toma el resto cuando divide por 23, 10000000000000000%23=4
Bob eleva el Alice 3 al poder 25, 3**25=847288609443
, y toma el resto cuando divide por 23, 847288609443%23=4
Obtuvieron el mismo resultado. Tienen un número común que Eva no conoce. Eve solo escuchó que Alice le envió 3 a Bob y que Bob le envió 10 a Alice. Ella no puede calcular el número 4.
Alice: ¡Ahora usa esta clave para AES y hablemos encriptados!
Por supuesto, en el mundo real, los números son mucho más grandes. Adivinar que la contraseña para AES es "4" no es muy difícil.
¿Necesitamos especificarlo, poner una firma digital en los mensajes o podemos asumir la autenticación cuando hay una clave pública involucrada?
En el ejemplo anterior, Alice y Bob podrían verse entre sí. Si Alice habló, Bob pudo ver que era Alice. En Internet, este no es el caso. Es más como comunicarse por carta: cualquier persona que entregue correo podría inyectar cartas falsas.
Por lo tanto, aún debe firmar este intercambio digitalmente, para asegurarse de que un (wo) hombre en el medio no inyecte nada en la conversación. Diffie-Hellman no puede hacer esto, por lo que necesita un algoritmo adicional: uno que use claves públicas y privadas. Los sistemas más populares para hacer esto son el algoritmo RSA y la criptografía de curva elíptica.
El modo en que funcionan las firmas digitales se explica abundantemente en otros lugares. Simplemente aplique firmas digitales a la conversación anterior (donde Alice proporciona los parámetros 5 y 23, donde Bob dice 10 y donde Alice dice 3) y usted tiene un protocolo de intercambio de claves autenticado.
Pero para intercambiar claves públicas, tiene el mismo problema: ¿cómo sabe que nadie en el medio cambió la clave pública real por su propia clave pública? Para eso se usan las Autoridades de Certificación (CA): son un tercero de confianza y ponen una firma digital en la clave pública. Otra forma de resolver esto es TOFU: Trust On First Use. Esto tiene la desventaja de que, si su primera comunicación ya fue interceptada, entonces su comunicación se ve comprometida. Pero tiene la ventaja de que no se necesita un sistema de CA, y por lo tanto no hay un CA que pueda ser comprometido.