Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El algoritmo de ElGamal puede ser utilizado tanto para generar firmas digitales como para
cifrar o descifrar.
Fue descrito por Taher Elgamal en 1984 y se usa en software GNU Privacy Guard, versiones
recientes de PGP, y otros sistemas criptográficos. Este algoritmo no esta bajo ninguna patente
lo que lo hace de uso libre.
El siguiente algoritmo 1 es el esquema básico de cifrado tipo ElGamal en el grupo F∗p. Con
pkeyM se denota un registro que es la clave pública del usuario M. Se supone que tal registro
esta formado por los siguientes campos
El algoritmo 1 recibe, como una componente de la entrada, el mensaje a cifrar que damos en
llamar z. Hay que destacar que, a pesar de que se trata como un elemento de F∗p, en nuestra
implementación representará una clave de cifrado simétrico, que originalmente son Strings de
no más de 256 bits.
~2~
Estudio del esquema.
Tal algoritmo basa su robustez en los siguientes hechos, la aleatorización de la clave de sesión
(paso 1) lo hace semánticamente seguro y resistente a los clásicos ataques por texto cifrado
escogido.
El uso del esquema Diffie-Hellman en los pasos 2 y 3 (el valor b es la clave compartida que no
viajará por el canal). Sólo resolviendo el DLP (Discrete Logarithm Problem) un atacante puede
calcular k a partir de a. Así conseguirá el secreto compartido b que se usa para camuflar la
información a cifrar en el producto c = z · b mod p, que es la operación ElGamal propiamente
dicha y, por lo tanto, el mensaje original z.
Sin embargo, como todo esquema básico ElGamal sobre un grupo genérico G, también ´este
adolece de una deficiencia: la limitación del espacio de mensajes, ya que z ∈ F ∗p (cf. por
ejemplo [DHAES]). Esta limitación es muy importante si el cardinal del grupo es “pequeño”.
El algoritmo
Para generar un par de llaves, se escoge un número primo cualquiera tal que tenga
un factor primo grande. Además se eligen dos números aleatorios (el generador) y (que
actuará como clave privada) tal que .
Ejemplo numérico
Los valores:
~3~
(primo elegido al azar)
(generador)
(llave pública)
Cifrado
Suponiendo que se tiene un texto claro que necesita ser cifrado. Lo primero por hacer es
convertir este texto en un elemento de obteniendo un . Luego se escoge arbitrariamente
un número tal que para finalmente calcular:
Ejemplo numérico
Descifrado
donde
~4~
(utilizamo
s el pequeño teorema de Fermat)
Ejemplo numérico
Análisis
Efectividad
Un adversario con la habilidad de calcular logaritmos discretos podría ser capaz de romper un
cifrado ElGamal. Sin embargo, hasta la actualidad, no existen algoritmos suficientemente
eficientes para realizar este tipo de cálculos en un tiempo razonable, considerando además
que se utilicen números grandes para cifrar. Dados estos antecedentes se puede decir que hoy
en día ElGamal es seguro.
Maleabilidad
Sin embargo existe un caso en que este algoritmo se vuelve maleable. Esto significa que bajo
un ataque específico la seguridad de ElGamal se puede quebrar. Este ataque usa el hecho de
tener el texto cifrado del texto claro (ambos conocidos). Sabiendo esto se
puede llegar a que el texto cifrado corresponde al texto plano .
Si ahora la persona que cifró el mensaje anterior genera otro texto cifrado
(utilizando el mismo con el que cifró anteriormente) el adversario debería ser capaz de llegar
al texto plano correspondiente siguiente los siguientes pasos:
Calcular
~5~
Buscar un tal que tomando en cuenta que al
igual que cumple con estar entre y
Tomando el peor caso, el atacante obtendrá dos textos claros (debido a la función
módulo).
Desempeño
~6~