{طاهر الجمل (Taher Elgamal), 1985}
Basado sobre el algoritmo
DH, y es base para el
DSA y
el ECDSA
(Elgamal se puede combinar para implementar firma o cifrado; veremos sólo la combinación de firma que es
de la que partiremos para ver el DSA y el ECDSA)
Todos estos algoritmos se basan en
los problemas
CDH y
DDH
(y estos, del DLP)
Dados $\mathbb{Z}_{p}^{*}$ ($p$ primo), y $\alpha$ un generador (por tanto $\mathbb{Z}_{p}^{*}$ es cíclico)
$x \equiv \log_{\alpha} \beta \pmod p$
es computacionalmente difícil
$\Downarrow$
utilizaremos este hecho para generar las claves:
la privada será el logaritmo (modular) de la pública
Todos los usuarios pueden compartir los parámetros básicos:
el grupo cíclico $\mathbb{Z}_{p}^{*}$ y un generador $\alpha$
Las mismas consideraciones de DH para $p$ y $\alpha$ aplican aquí
Cada usuario $\text{u}$ debe generar:
Gestión:
Nota: comparemos el coste de generación de claves
de Elgamal (1 random + 1 exp) con la de RSA (2 primos)
La firma de $m$ es la tupla $(r, s)$
A partir de la recepción del mensaje $m$ y la firma $(r,s)$
Firma: $\begin{aligned} r &= \alpha^k \bmod p \\ s &= \dfrac{h(m)-a_\text{u}r}{k} \bmod {(p-1)} \\ \end{aligned}$
Verificación: $\begin{aligned} v_2 &= \alpha^{h(m)} \bmod p \\ v_1 &= (y_\text{u})^{r} r^s \bmod p \end{aligned}\longrightarrow$ $\left\{ \begin{eqnarray} v_2 &=& \alpha^{h(m)} \bmod p \\ &=& \alpha^{a_\text{u}r+ks \bmod{(p-1)}} \bmod p \\ &=& \color{blue}{\alpha^{a_\text{u}r+ks} \bmod{p}} \\ v_1 &=& (y_\text{u})^{r} r^s \bmod p \\ &=& \alpha^{a_\text{u}r} \alpha^{ks} \bmod{p} \\ &=& \color{blue}{\alpha^{a_\text{u}r+ks} \bmod{p}} \end{eqnarray} \right.$
Generación | Firma | Validación | |
RSA | muy lento | medio | rápido |
Elgamal | muy rápido | medio | medio |
Es fundamental mantener $k$ secreto, ya que si conocemos $k$…
conoceremos la clave privada $a_\text{u}$, así:
$\begin{aligned} s &= \dfrac{h(m)-a_\text{u}r}{k} \bmod {(p-1)} \\ s k &= (h(m)-a_\text{u}r) \bmod {(p-1)} \\ a_\text{u}r &= (h(m)-sk) \bmod {(p-1)} \\ a_\text{u} &= \dfrac{h(m)-sk}{r} \bmod {(p-1)} \\ \end{aligned}$
Es fundamental no reutilizar $k$, ya que un atacante que viera dos firmas:
$s_1 = \dfrac{h(m_1)-a_\text{u}\color{red}{r}}{\color{red}{k}} \bmod {(p-1)} \text{ y } s_2 = \dfrac{h(m_2)-a_\text{u}\color{red}{r}}{\color{red}{k}} \bmod {(p-1)}$
$\begin{aligned} s_2 - s_1 &= \dfrac{h(m_2)-h(m_1)}{\color{red}{k}} \bmod {(p-1)} \\ \color{red}{k} &= \dfrac{h(m_2)-h(m_1)}{s_2-s_1} \bmod {(p-1)} \end{aligned}$
Descubriría $k$… y por tanto nuestra clave privada $a_\text{u}$ (página anterior)
En general los distintos $k$ no deben tener ninguna relación entre ellos (deben ser aleatorios)
los ataques sobre Elgamal son los algoritmos para calcular el logaritmo discreto
$p$ | (bits de seguridad) | |
$1024$ | $\leftrightarrow$ | $80$ |
$2048$ | $\leftrightarrow$ | $112$ |
$3072$ | $\leftrightarrow$ | $128$ |
{NIST, 1991}
Directamente basado en
el algoritmo Elgamal en combinación de firma
DSA (Digital Signature Algorithm) actualmente está siendo desplazado por la variante sobre curvas elípticas (ECDSA)
DSA tiene una seguridad equivalente a Elgamal pero:
Estos dos hechos hacen que Elgamal no se use para firma, en favor del equivalente DSA
Elgamal $\rightarrow$ DSA: reducimos $r$ y $s$ módulo $\color{red}{q}$, donde $\color{red}{q | (p-1)}$:
\[\begin{eqnarray} \text{random }k &\rightarrow& 1 \leq k \leq p-1 \\ r &=& \alpha^k \bmod p \\ s &=& \dfrac{h(m)-a_\text{u}r}{k} \bmod{(p-1)}\quad \\ \end{eqnarray}\]
$\downarrow$
\[\begin{eqnarray} &&\color{red}{q | (p-1)} \\ \text{random }k &\rightarrow& 1 \leq k \leq \color{red}{q} \\ r &=& (\alpha^k \bmod p) \color{red}{\bmod q} \qquad\\ s &=& \dfrac{h(m)+a_\text{u}r}{k} \color{grey}{\bmod{(p-1)}} \color{red}{\bmod{q}}\quad \end{eqnarray}\]
Cuando veamos como dimensionar los parámetros para los diferentes
algoritmos, veremos que el tamaño recomendado en bits es:
$\|q\| \approx \dfrac{1}{6}\|p\|$
Parámetros: $p$, $q$, $\alpha$
Clave privada: $a$ (un número aleatorio $1 \leq a \leq q-1$)
Clave pública: $\alpha^a \bmod p$
Como Elgamal, todos los usuarios pueden
compartir los parámetros básicos:
el grupo cíclico $\mathbb{Z}_{p}^{*}$, el generador $\alpha$, y además $q$
Las mismas consideraciones de DH y Elgamal para $p$ aplican aquí
En cambio en DSA, $\alpha$ no ha de ser generador
de $\mathbb{Z}_p^*$
(no debe tener $\text{ord}{(\alpha)} = \phi(p) = p -1$),
si no que $\text{ord}{(\alpha)} = q$ y $q|(p-1)$
Generación | Firma | Validación | |
RSA | muy lento | medio | rápido |
DSA | muy rápido | medio | medio |
ídem Elgamal
los ataques sobre DSA son los algoritmos para calcular el logaritmo discreto
el NIST
recomienda
$\|p\| \geq 2048$ bit y $\|q\| \geq 224$ hasta el 2030
$p$
$q$
(bits de seguridad)
$1024$
$160$
$\leftrightarrow$
$80$
$2048$
$224$
$\leftrightarrow$
$112$
$3072$
$256$
$\leftrightarrow$
$128$
(Criptografía de Curva Elíptica) $\rightarrow$