"Diffie-Hellman Key Exchange" en un lenguaje sencillo

226

¿Puede alguien explicarme qué Diffie-Hellman Key Exchange está en un lenguaje sencillo? He leído en una página de noticias no tecnológicas que Twitter acaba de implementar esta tecnología que permite a dos personas intercambiar mensajes cifrados por encima de un canal no seguro. ¿Cómo es eso (si esto es cierto)?

    
pregunta Elias Zamaria 24.11.2013 - 02:10
fuente

8 respuestas

326

Diffie-Hellman es una forma de generar un secreto compartido entre dos personas de tal manera que el secreto no se puede ver al observar la comunicación. Esa es una distinción importante: No estás compartiendo información durante el intercambio de claves, estás creando una clave juntos.

Esto es particularmente útil porque puedes usar esta técnica para crear una clave de cifrado con alguien y luego comenzar a cifrar tu tráfico con esa clave. E incluso si el tráfico se registra y luego se analiza, no hay absolutamente ninguna forma de averiguar cuál fue la clave, a pesar de que los intercambios que la crearon pudieron haber sido visibles. Aquí es de donde proviene el secreto hacia adelante perfecto . Nadie que analice el tráfico en una fecha posterior puede ingresar porque la clave nunca se guardó, nunca se transmitió y nunca se hizo visible en ningún lugar.

La forma en que funciona es razonablemente simple. Gran parte de las matemáticas son las mismas que se ven en criptografía de clave pública en que se utiliza una función de trampilla . Y mientras que el problema del logaritmo discreto se usa tradicionalmente (el negocio x y mod p ), el proceso general se puede modificar a use también la criptografía de curva elíptica .

Pero a pesar de que utiliza los mismos principios subyacentes que la criptografía de clave pública, esta no es una criptografía asimétrica no porque nada se encripta ni descifra durante el intercambio. Sin embargo, es un componente esencial, y de hecho fue la base sobre la cual se construyó el criptográfico asimétrico.

La idea básica funciona así:

  1. Se me ocurren dos números primos g y p y te digo cuáles son.
  2. A continuación, elige un número secreto ( a ), pero no se lo dice a nadie. En su lugar, calcula ga mod p y me envías ese resultado. (Lo llamaremos A ya que proviene de a ).
  3. Hago lo mismo, pero llamaremos a mi número secreto b y al número calculado B . Entonces calculo gb mod p y te envío el resultado (llamado " B ")
  4. Ahora, tome el número que le envié y realice exactamente la misma operación con it . Así que eso es Ba mod p .
  5. Hago la misma operación con el resultado que me enviaste, así que: Ab mod p .

La "magia" aquí es que la respuesta que obtengo en el paso 5 es el mismo número que obtuviste en el paso 4. Ahora no es realmente mágico, solo son matemáticas, y todo se reduce a Propiedad de lujo de los exponentes de módulo. Específicamente:

  

(ga mod p)b mod p = gab mod p
(g b mod p)a mod p = gba mod p

Lo que, si lo examinas más de cerca, significa que obtendrás la misma respuesta sin importar en qué orden hagas la exponenciación. Así que lo hago en un orden, y lo haces en el otro. Nunca sé qué número secreto usaste para obtener el resultado y nunca sabes qué número usé, pero aún así llegamos al mismo resultado.

Ese resultado, ese número con el que ambos tropezamos en los pasos 4 y 5, es nuestra clave secreta compartida. Podemos usar eso como nuestra contraseña para AES o Blowfish, o cualquier otro algoritmo que use secretos compartidos. Y podemos estar seguros de que nadie más, nadie más que nosotros, conoce la clave que creamos juntos.

    
respondido por el tylerl 24.11.2013 - 08:28
fuente
123

Las otras respuestas hacen un excelente trabajo explicando las matemáticas detrás del intercambio de claves. Si desea una representación más gráfica, nada mejor que la excelente analogía de pintura que se muestra en Diffie – Hellman intercambio de claves entrada de Wikipedia:


La imagen está en el dominio público

    
respondido por el Duncan Jones 09.06.2014 - 16:30
fuente
36

Diffie-Hellman es un algoritmo utilizado para establecer un secreto compartido entre dos partes. Se usa principalmente como un método para intercambiar claves de criptografía para usar en algoritmos de cifrado simétricos como AES.

El algoritmo en sí mismo es muy simple. Supongamos que Alice quiere establecer un secreto compartido con Bob.

  1. Alice y Bob acuerdan un número primo, p , y una base, g , por adelantado. Para nuestro ejemplo, supongamos que p=23 y g=5 .
  2. Alice elige un entero secreto a cuyo valor es 6 y calcula A = g^a mod p . En este ejemplo, A tiene el valor de 8.
  3. Bob elige un entero b secreto cuyo valor es 15 y calcula B = g^b mod p . En este ejemplo, B tiene el valor de 19.
  4. Alice envía A a Bob y Bob envía B a Alice.
  5. Para obtener el secreto compartido, Alice calcula s = B^a mod p . En este ejemplo, Alice obtiene el valor de s=2
  6. Para obtener el secreto compartido, Bob calcula s = A^b mod p . En este ejemplo, Bob obtiene el valor de s=2 .

El algoritmo es seguro porque los valores de a y b , que se requieren para derivar s no se transmiten a través del cable.

    
respondido por el Ayrx 24.11.2013 - 03:35
fuente
26

Si desea una explicación en inglés simple y simple de DH que pueda ser entendida fácilmente incluso por personas no técnicas, existe la analogía de la caja con doble bloqueo.

  1. Alicia guarda un secreto en una caja y lo cierra con un candado que tiene la única llave para abrir. Luego le envía la caja a Bob.

  2. Bob recibe la caja, coloca un segundo candado en el que solo él tiene la llave y se lo envía a Alice.

  3. Alice quita su cerradura y le envía la caja a Bob por segunda vez.

  4. Bob quita su cerradura, abre la caja y tiene acceso al secreto que Alice le envió.

Ya que la caja siempre ha tenido al menos un candado mientras está en tránsito, Eve nunca tiene la oportunidad de ver lo que hay dentro y robar el secreto: en esta clave criptográfica se usará para cifrar el resto de Alice y Las comunicaciones de Bob.

    
respondido por el Dan Neely 24.11.2013 - 16:41
fuente
22

El problema del intercambio de claves

Una conexión segura requiere el intercambio de claves. Pero las claves en sí deberían ser transferidas en una conexión segura.

Hay dos soluciones posibles:

  1. intercambie la clave físicamente reuniéndose y compartiendo las claves.
  2. De alguna manera, estableció un secreto compartido en un canal público no seguro. Es más fácil decirlo que hacerlo, y la primera implementación de este tipo es el Esquema Diffie-Hellman.

Propiedades

Diffie-Hellman utiliza una función matemática con las siguientes propiedades:

  1. Es FÁCIL de calcular f[x] (de x )
  2. Es DIFÍCIL invertir f[x] para obtener x
  3. Es FÁCIL calcular S desde A y f[B]
  4. Es FÁCIL calcular S desde B y f[A]
  5. Es difícil calcular S sin A o B (incluso con f[A] y f[B] )

Cómo funciona el esquema DH

  1. Alice sale con un número aleatorio A . Calcula f[A] y envía f[A] a Bob. Alice nunca revela su A , ni siquiera a Bob.
  2. Bob sale con otro número aleatorio B . Calcula f[B] y envía f[B] a Alice. Bob nunca revela su B , ni siquiera a Alice.
  3. Alice calcula S usando A y f[B] . Bob calcula S usando B y f[A]
  4. Mallory, quien es Eavesdropping, solo tiene f[A] y f[B] , por lo que es DIFÍO que calcule S .
  5. Alice y Bob ahora comparten un secreto común que se puede usar como (o para crear) una clave para establecer una conexión segura.

Nota al margen:

El esquema Diffie-Hellman no proporciona autenticación de ningún tipo. Solo permite que 2 partes anónimas compartan un secreto común. Pero por lo que Alice sabe, podría estar dándole la mano al diablo (en lugar de a Bob). Por eso necesitamos que al menos una parte esté autenticada.

Por ejemplo: SSL (https), el servidor web se autentica mediante PKI (Infraestructura de clave pública) y luego se establece una conexión segura (D-H) entre el sitio web y el cliente. Dado que el sitio web ha sido autenticado, el cliente puede confiar en el sitio web, pero el sitio web no puede confiar en el cliente. Ahora es seguro para el cliente proporcionar sus propios detalles de autenticación en la página web.

    
respondido por el aiao 16.12.2015 - 00:54
fuente
5

Diffie-Hellman es un algoritmo matemático para intercambiar un secreto compartido entre dos partes. Este secreto compartido se puede utilizar para cifrar mensajes entre estas dos partes. Tenga en cuenta que el algoritmo Diffie-Hellman no proporciona autenticación entre estas dos partes.

    
respondido por el Lucas Kauffman 24.11.2013 - 02:20
fuente
4

La seguridad de los datos a medida que pasan a través de Internet suele requerir su protección de dos maneras:

  • Confidencialidad - asegurando que nadie excepto los destinatarios deseados pueden leer los datos
  • Integrity - asegurando que nadie pueda modificar o alterar los datos en tránsito

La confidencialidad se proporciona mediante Symmetric Encryption y la integridad se proporciona mediante un Código de autenticación de mensaje (MAC) .

Tanto Symmetric Encryption como MAC's requieren que ambas partes tengan las teclas idénticas y secretas (una "clave" en este sentido es simplemente un número, convertido a binario).

Entonces, el problema es ¿Cómo ambas partes establecen las claves idénticas y secretas en Internet? (o cualquier otro medio inseguro). Esto se conoce como " el problema de intercambio de claves ".

Una de las soluciones para este problema es el algoritmo Diffie-Hellman.

Diffie-Hellman permite a dos partes establecer un secreto compartido en un medio inseguro . O, para decirlo de una manera más sencilla ...

Imagina que tú y tu amigo estuvieran de pie en una habitación llena de gente, rodeados de personas de aspecto dudoso. Supongamos que usted y su amigo necesitaban acordar un número idéntico, pero no quieren que nadie más en la sala sepa qué número es ese. Diffie-Hellman le permitiría a usted y a su amigo intercambiar inteligentemente algunos números, y a partir de esos números calculan otro número que es idéntico. Y aunque todos en la sala escucharon los números intercambiados, no tienen forma de determinar el número final al que llegaron usted y su amigo.

Podemos ver un ejemplo de esto ocurriendo en la imagen de abajo. Alice y Bob usarán el intercambio de claves Diffie-Hellman para establecer un secreto compartido.

Cualquierpersonaque"escuche" en la conversación solo "escuchará" los números que se intercambiaron en el medio: 13 , 6 , 2 , 9 . No hay una manera consistente de combinar estos cuatro números para alcanzar el secreto compartido final: 3 sin conocer uno de los valores de Alicia o Bob's Private ( 5 o 4 ) que nunca fueron compartidos.

Eso es la belleza de Diffie-Hellman.

Los números utilizados en el ejemplo anterior son pequeños para mantener las matemáticas simples. En realidad, los números utilizados en los intercambios modernos de Diffie-Hellman tienen (o deberían ser) como mínimo 2048 bits de longitud, lo que requeriría aproximadamente 617 dígitos para escribir !!

Después de finalizar el intercambio de claves Diffie-Hellman, ambas partes ahora poseen un valor idéntico, conocido solo por cada parte.

Este valor se convierte en el "punto de inicio" a partir del cual se pueden generar claves adicionales.

Anteriormente, mencionamos que el cifrado simétrico y los códigos de autenticación de mensajes requieren una clave secreta. Bueno, tome su DH Shared Secret y combínelo con algunos otros valores y ahora tiene las claves de cifrado y MAC que necesita.

El beneficio adicional es que combinar valores para crear claves es fácil ... Puede hacerse tantas veces como sea necesario.

De hecho, muchos protocolos de seguridad (SSL / TLS, IPsec, etc.) generan un conjunto de claves para asegurar el tráfico en cada dirección : un total de cuatro claves (MAC + cifrado en una dirección , MAC + cifrado en la otra dirección). Las cuatro claves generadas a partir del mismo valor inicial inicial, derivadas de Diffie-Hellman.

    
respondido por el Eddie 26.10.2018 - 21:59
fuente
2

Los videos de Diffie-Hellman de Computerphile son absolutamente espectaculares cuando se trata de explicaciones de este intercambio de claves. Su video " Intercambio de claves secretas (Diffie-Hellman) " es bastante exhaustivo, pero su explicación de las matemáticas detrás de DH es el mejor que he encontrado hasta ahora en cualquier medio (y ciertamente mejor de lo que personalmente podría escribir para usted aquí). Echa un vistazo aquí .

    
respondido por el securityOrange 27.10.2018 - 03:27
fuente

Lea otras preguntas en las etiquetas