Fecha: 25 Marzo 2001
La seguridad es un proceso, no un producto. Y pocos ejemplos pueden rivalizar con PGP. A lo largo de los años, el programa de "tío Phil" ha resistido el escrutinio de la comunidad criptográfica mundial. De hecho, una declaración del tipo "he descubierto el siguiente fallo en PGP: ..." se ha convertido en receta infalible para obtener fama y reconocimiento ... o el desdén más absoluto por propagador de bulos.
Por ello, cuando el 20 de Marzo de 2001 un grupo de criptógrafos checos afirmaron haber descubierto una grave vulnerabilidad relativa a las claves de firma de PGP, no pocos lo consideraron uno de tantos propagadores de FUD (iniciales en inglés de Temor, Incertidumbre y Duda). Sin embargo, los análisis iniciales parecen indicar que el fallo es real.
Debido a ello, y a pesar del escaso tiempo transcurrido, he decidido redactar el siguiente Informe de urgencia. Soy consciente de que el tema sigue abierto, pero considero necesario aclarar el tema hasta donde sea posible con el objeto de alejar rumores y exageraciones.
Escogemos un número primo de 160 bits, al que llamaremos p
Escogemos un número primo de 1024 bits que divida a (p-1). Llamémosle q
Escogemos un número g distinto de la unidad, y que sea un generador del subgrupo cíclico de orden q en Zp.
Escogemos un número x mayor que la unidad y menor que q-1
Calculamos y = g^x mod p.
De acuerdo, ya se ha perdido. En primer lugar, apuesto a que no sabe qué es "un generador del subgrupo cíclico de orden q en Zp" Bien, ya somos dos. No importa realmente. Lo importante es que es una propiedad matemática bien definida y verificable.
Tampoco sabe qué es g^x mod p. Todo eso se lee "g elevado a x módulo p" Tomar un número módulo loquesea no es más que una operación matemática. Básicamente, "a módulo b" es el resto que se obtiene al dividir a por b. Por ejemplo, 25 = 2*11 + 3, lo que significa que "25 mod 11" es igual a 3. Es una operación con muchas peculiaridades, por ejemplo a la hora de invertirla. En cualquier caso, es una operación y punto.
Una vez realizados los pasos anteriores, la clave privada es x y la pública es y. El conjunto de parámetros (p, q, g) son públicos, es decir, conocidos por todos.
Cuando queremos crear la firma digital de un mensaje, se parte de un "condensado" o hash del mensaje. Es decir, cogemos una función h(m) y realizamos las siguientes operaciones (recuerde que el signo ^ significa "elevado a"):
Escogemos un número secreto aleatorio k que sea menor que q
Calculamos r = (g^k mod p) mod q
Calculamos ki = k^-1 mod q
Calculamos s = [ki*(h(m)+x*r )] mod q
La pareja de parámetros (r,s) constituye la firma digital.
Un atacante malicioso que pudiese conocer el valor de k podría calcular el de x despejando su valor en el paso 4 del proceso de firma. ¿Y cómo podemos conocer k? En teoría, despejando del paso 2 en el proceso de firma. En la práctica, "despejar" implicaría un cantidad de cálculos superior a la que podemos permitirnos.
Y aquí entra el ataque checo. ¿Recuerdan que los valores (p, q, g) son conocidos? Pues supongamos que reemplazamos p y q por dos valores distintos p´ y q´. Estos números se escogen de forma que el paso 2 del proceso de firma es fácilmente invertible. Esto significa que podemos obtener k con bastante facilidad. Y, puesto que conocemos los demás parámetros (el mensaje m, su hash h(m) y la firma r´,s´), podemos deducir x. Puesto que x era el parámetro secreto, ya podemos firmar mensajes impunemente. Fin de la historia.
En el caso de la firma mediante clave RSA, el procedimiento es distinto, pero tambíen se basa en sustituir unos parámetros de la parte pública de la clave por otra.
No es un ataque que esté disponible para su atacante a menos que usted sea descuidado con su clave privada. Nosotros avisamos específicamente a los usuarios de que protejan sus clave privadas. Los usuarios que no protegen sus claves privadas han estado siempre en riesgo... esto es de sentido común.
A la luz de los datos conocidos, este que escribe suscribe esas mismas palabras.
ICZ. Página de la empresa que saltó la liebre.
El ataque checo. En inglés. Se titula "ataque contra claves privadas de firma en formato OpenPGP, programas PGP y otras aplicaciones compatibles con OpenPGP."
Preguntas y respuestas (FAQ) de los propios autores. Para ayudar a distinguir verdad y leyenda.
www.nai.com y www.pgp.com La empresas afectadas serán sin duda fuentes de información.
© Arturo Quirantes
2005. Correo electrónico: aquiran arroba
ugr.es
Vuelta a la sección Informes del Taller de Criptografía