Quantcast
Channel: El blog de García Larragan y Cía
Viewing all articles
Browse latest Browse all 639

Criptografía (CCLXXXIX): Ataque a la firma digital ElGamal

$
0
0

 
Tal y como decía en este post:

"El eslabón más débil de la cadena de seguridad (y la criptografía no es una excepción) lo constituimos las personas".

Es decir, podemos tener un algoritmo criptográfico muy robusto (muy seguro conceptualmente), como es el caso del esquema de firma digital Elgamalpero si las personas que lo administramos y/o utilizamos no hacemos un uso adecuado del mismo éste podría ser "roto" con relativa facilidad.

Ejemplos de lo anterior, pero hay multitud de ellos, son la mala utilización de la máquina enigma durante la WWII o la elección no adecuada de los dos números primos factores del módulo en RSA o, incluso algo bastante más reciente y que tiene mucho que ver con lo que voy a contar en esta entrada, cuando en 2010 un grupo de hackers conocido como 'fail0verflow' se hizo con la clave privada usada por Sony para firmar el software de la consola PlayStation 3 aprovechándose de la mala utilización por parte de esta empresa del esquema de firma digital ECDSA.

Pues bien, en este post me voy a referir al ataque que es posible realizar alesquema de firma digital ElGamalcuando se firman los hashes de dos documentos diferentes con el mismo valor de 'h' (ver este post donde explico este protocolo de firma digital); lo que es una evidente mala utilización, ya que 'h' deber ser un número primo aleatorio diferente para cada documento a firmar si no queremos que la firma se vea seriamente comprometida.

En este tipo de ataques el atacante puede hacerse con la clave privada del firmante, pero veamos cómo:

1.- Supongamos que un usuario tiene como valores de las claves, pública y privada, los siguientes (utilizo número pequeños para que se puedan realizar los cálculos manualmente):

1.1.- Clave pública: (p = 995, g = 7, k = 832).
1.2.- Clave privada: (a = 325).

2.- Supongamos también que el usuario firma dos documentos con el mismo valor de 'h', 103, el primero de ellos para el que se obtiene un hash (h(M)) de 939 y para el segundo (h(M')) de 436.

2.2.- Firma primer documento: (r = 13, s = 26).
2.1.- Firma segundo documento: (r = 13, s' = 687)

3.- Se calcula: (h(M) * s' - h(M') * s) * inv(r * (s' - s), p-1) mod p-1 = (939 * 687 - 436 * 26))* 107 mod 994 = (981 - 402) * 107 mod 994 = 579 * 107 mod 994 = 325

Y como se observa se obtiene la clave privada del usuario, con lo que el atacante puede ahora firmar documentos como si fuera el usuario legítimo.

Quizás también te interese:


Viewing all articles
Browse latest Browse all 639

Trending Articles