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 Elgamal, pero 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 al esquema de firma digital ElGamal cuando 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úmeros pequeños para que se puedan realizar los cálculos manualmente):
2.- Supongamos también que el usuario firma dos documentos con el mismo valor de 'h', 103; para el primero de ellos se obtiene un hash (h(M)) de 939 y para el segundo un hash (h(M')) de 436.
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:
Comentarios
Publicar un comentario