{Diffie, Hellman; 1976}
Permite acordar un número aleatorio entre dos usuarios a partir de la hipótesis CDH
(hipótesis computacional Diffie-Hellman).
Este número aleatorio se puede utilizar como clave (simétrica) para posteriores comunicaciones.
(DH no permite cifrar ni firmar, pero es la base de otros sistemas que si lo permiten)
CDH es un problema con trampa relacionado con el problema DLP (Problema del logaritmo discreto). El DLP conjetura que es difícil el cálculo del logaritmo (función inversa de la exponenciación) en ciertos grupos
Tenemos un $\mathbb{Z}_{p}^{*}$ ($p$ primo) y seleccionamos
un elemento generador $\alpha\,$
($\mathbb{Z}_{p}^{*}$ es cíclico)
Entonces, existe un $0 \leq x < p-1$ único que cumple para cada $\beta \in \mathbb{Z}_{p}^{*}$:
$x \equiv \log_{\alpha} \beta \pmod p$
(o de forma equivalente: $\beta \equiv \alpha^x \pmod p$)
...pero es computacionalmente difícil* calcularlo
Supongamos que tenemos un grupo cíclico sobre un conjunto $\mathbb{Z}_{p}^{*}$
($p$ primo) con el elemento generador $\alpha$
A partir de conocer $\alpha$, $\alpha^i$ y $\alpha^j$ para $0 \leq i,j < p-1$
entonces el cálculo de $\alpha^{ij}$ es computacionalmente difícil…
...si es que no conocemos "la trampa"
CDH requiere que DLP sea computacionalmente difícil
CDH está relacionado con la hipótesis DDH (Decisional DH):
que dice que $\alpha^{ij}$ es indistingible de un valor escogido aleatoriamente
de $\mathbb{Z}_{p}^{*}$
Todas estas hipótesis deben ser ciertas para que DH sea seguro
Si conocemos $i$ y $\alpha^j$ (ó $j$ y $\alpha^i$) entonces el cálculo de $\alpha^{ij}$ es fácil:
Si conocemos $i$: $\alpha^{ij} = {(\alpha^j)}^{i} \pmod p$
Si conocemos $j$: $\alpha^{ij} = {(\alpha^i)}^{j} \pmod p$
(en cambio si no conocemos ni $i$ ni $j$, es computacionalmente difícil aunque conozcas $\alpha^i$ y $\alpha^j$)
A partir de aquí $I$ y $J$ comparten el secreto $\alpha^{ij}$
Un atacante que vea el tráfico ($\alpha^i$ y $\alpha^j$) y conozca $\alpha$ no es capaz de descubrir nada sobre el secreto $\alpha^{ij}$
Los parámetros $p$ y $\alpha$ se pueden seleccionar a priori, pueden ser públicos y utilizarse múltiples veces:
DH no autentica:
problemas sobre la implementación:
los ataques sobre DH son los mejores algoritmos para calcular $log_{\alpha}(\alpha^{ij}) \pmod p$
el NIST
recomienda
$\|p\| \geq 2048$ bit hasta 2030
Clave pública: ($\alpha^i$, Parámetros públicos) Clave privada: ($i$, Parámetros públicos) Parámetros públicos: primo $p$ grande ($\ge 2048 \text{ bit}$) de la forma $p=2q+1$; las claves simétricas són siempre las mismas si $i$ y $j$ (claves privadas son las mismas) Dado que el coste de generación de claves DH es muy bajo (random grande + exponenciación) podemos generarla a cada uso En pro: cada interacción genera una clave distinta (DHE; DH Ephemeral) Por contra: no podemos autenticar al interlocutor (MITM) (DH; DH non-ephemeral) TLS: es del todo recomendable el uso de DH efímero (DHE ó ECDHE) WhatsApp: uso de DH no efímero para comunicación peer-to-peer o entre grupos (paper)
RSA
AES
(bits de seguridad)
$1024$
$\leftrightarrow$
$80$
$80$
$2048$
$\leftrightarrow$
$112$
$112$
$3072$
$\leftrightarrow$
$128$
$128$
$15360$
$\leftrightarrow$
$256$
$256$
Clave asimétrica
generador $\alpha$ ($2$ ò $5$)Diffie-Hellman efímero
Aplicación
(RSA) $\rightarrow$