githubEditar

Diffie-Hellman

Explicación del intercambio de claves Diffie-Hellman y del concepto de grupos de Diffie-Hellman. Conviene tener un conocimiento básico de teoría de grupos y estructuras algebráicas.

Fuentes

Intercambio de claves de Diffie-Hellman

Partimos de la base de que ZpZ_p es el cuerpo de los enteros módulo pp, con pp primo.

El algoritmo DH clásico opera sobre el conjunto {1,2,...,p1{1,2,...,p-1}} y usa la operación de multiplicación mod pp.

Dos personas, Alice y Bob, quieren acordar un número secreto mientras todos los demás les escuchan. Para ello:

  • Eligen dos números (que el resto sabe):

  • Eligen claves privadas:

    • Alice elige un entero secreto aa.

    • Bob elige un entero secreto bb.

  • Intercambian públicamente:

    • Alice calcula AA: A=ga (mod p)A = g^a\ (mod\ p) y lo comparte públicamente.

    • Bob calcula BB: B=gb (mod p)B = g^b\ (mod\ p) y lo comparte públicamente.

  • Calculan el valor secreto:

    • Alice toma el valor BB de Bob y lo eleva a su valor secreto aa: S=Ba (mod p)S = B^a\ (mod\ p)

    • Bob toma el valor AA de Alice y lo eleva a su valor secreto bb: S=Ab (mod p)S = A^b\ (mod\ p)

Dado que la multiplicación es conmutativa:

  • Resultado de Alice: S=Ba=(gb)a=gabS = B^a = (g^b)^a = g^{ab}

  • Resultado de Bob: S=Ab=(ga)b=gabS = A^b = (g^a)^b = g^{ab}

Un oyente externo conoce p,g,Ap,g,A y BB, sólo necesita conocer aa o bb para conseguir la clave SS. Para números normales (en el campo, de, p.ej, R\mathbb{R}), un oyente podría calcular lo siguiente:

B=gbB = g^b Si BB y gg son conocidos, y se busca bb:

b=loggb = \log_g

Esto es sencillo de calcular si estamos en R\mathbb{R}, pero para conjuntos como ZpZ_p se hace mucho más difícil.

En números reales, si buscas gg, pruebas con un valor, y da un resultado bajo, sabes que debes probar con uno mayor. En ZpZ_p no pasa nada parecido, por ejemplo:

  • 313 (mod 17)3^1 \equiv 3\ (mod\ 17)

  • 329 (mod 17)3^2 \equiv 9\ (mod\ 17)

  • 3310 (mod 17)3^3 \equiv 10\ (mod\ 17)

  • 3413 (mod 17)3^4 \equiv 13\ (mod\ 17)

  • 355 (mod 17)3^5 \equiv 5\ (mod\ 17)

  • ...

No se sigue un patrón, no hay nada que indique si el resultado está más arriba (mayor aa o bb) o más abajo.

Grupos de Diffie-Hellman

Los grupos de Diffie-Hellman que se pueden ver, por ejemplo, en configuraciones y transformaciones IKE, son simplemente valores estandarizados de pp y gg.

Cada vez que se crea una SA no es práctico generar un nuevo número primo grande pp, así que para ello hay varios precalculados, con diferentes niveles de complejidad.

P.ej:

  • Grupo 2: pp tiene 1024 bit. Ahora mismo obsoleto y débil contra tablas pre-calculadas.

  • Grupo 14: Estándar. pp tiene 2048 bit. Mucho más seguro.

  • Grupos 19 y superiores (ECDH): Usan algoritmos de curva elíptica (similar al DH, usando puntos de una curva en el espacio), son igual de seguros que el DH pero más eficientes. (Una clave de 256bit de ECDH es igual de segura que una de 2048 de DH).

Última actualización