Capítulo 08 · Criptografía de clave pública
Secretos en público: Diffie–Hellman y RSA
Durante cuatro mil años, dos personas que querían comunicarse en secreto tenían que compartir antes una clave. En 1976 Whitfield Diffie y Martin Hellman mostraron cómo acordarla en público, y un año después Rivest, Shamir y Adleman construyeron un cifrado cuya clave de cifrado puede publicarse en un periódico. Los dos se apoyan en teoría de números que Fermat y Euler ya conocían en el siglo XVIII.
En este capítulo
Todos los cifrados vistos hasta ahora son simétricos: la misma clave cifra y descifra, así que las dos partes deben compartirla antes de poder decirse nada en secreto. Los ejércitos repartían los libros de claves con mensajeros; los bancos tenían responsables de claves que llevaban sobres lacrados. Con personas que quieren hablar todas en privado hacen falta claves. En Internet, donde quieres hablar con una tienda de la que nunca habías oído hablar, es imposible. La salida llegó en tres pasos, entre 1974 y 1977, y cambió lo que es la criptografía.
Los puzles de Merkle
En 1974 Ralph Merkle, estudiante de grado en Berkeley, propuso un proyecto para acordar una clave en público; su profesor lo rechazó. Su idea: Bob envía a Alicia un millón de puzles, cada uno un mensaje corto cifrado con una clave deliberadamente débil que cuesta un minuto romper. Cada puzle contiene un identificador aleatorio y una clave secreta. Alicia elige un puzle al azar, lo rompe y anuncia su identificador; ahora los dos comparten su clave. Un espía que no sabe qué puzle eligió Alicia tiene que romper, de media, medio millón. La ventaja solo es cuadrática (un minuto para Alicia, un año para el espía), pero fue la primera prueba de que se podía construir un secreto compartido en público. El artículo apareció, tras años de rechazos, en 1978.
Diffie–Hellman
En noviembre de 1976 Whitfield Diffie y Martin Hellman publicaron New Directions in Cryptography, que empieza así: «Hoy estamos al borde de una revolución en la criptografía». Su acuerdo de claves usa aritmética módulo un primo.
Dos enteros son congruentes módulo , , si divide a . Los restos con la suma y el producto módulo forman el anillo . Si es primo, todo elemento no nulo tiene inverso multiplicativo, y los elementos no nulos forman un grupo que es cíclico: algún generador tiene potencias que los recorren todos.
Alicia y Bob acuerdan en público un primo grande y un generador . Alicia elige un secreto y envía ; Bob elige un secreto y envía . Entonces
y los dos tienen . Una espía ve , , y . Para obtener parece necesitar a partir de : el logaritmo discreto. La exponenciación módulo es rápida (ver más abajo «elevar al cuadrado y multiplicar»); su inversa, para primos de 2048 bits bien elegidos, está fuera del alcance de todos los algoritmos clásicos conocidos.
Diffie–Hellman protege frente a quien escucha, no frente a un intermediario activo que acuerda una clave con Alicia y otra con Bob. Para derrotarlo hay que autenticar los valores públicos, que es el trabajo de las firmas. Con ese añadido (y con curvas elípticas, capítulo 09), Diffie–Hellman es como empieza cada conexión TLS 1.3. Diffie y Hellman recibieron por él el premio Turing en 2015.
Descubierto antes, en secreto
En 1997 la agencia británica de inteligencia de señales, el GCHQ, reveló que sus propios matemáticos habían llegado antes. James Ellis había mostrado en 1970 que el «cifrado no secreto» era posible en principio; en 1973 Clifford Cocks, un recluta de 22 años recién llegado, encontró en una tarde un esquema práctico, esencialmente RSA; en 1974 Malcolm Williamson encontró lo que equivale a Diffie–Hellman. Al ser material clasificado, nada de ello se usó ni se publicó, y el mundo aprendió la criptografía de clave pública de los académicos.
La teoría de números detrás de RSA
Si es primo y , entonces .
Demostración
Los números son no nulos y distintos dos a dos módulo (si entonces , así que ), luego son en algún orden. Multiplicándolos todos: , y es invertible módulo .
Sea el número de enteros entre y coprimos con . Si , entonces . Para con primos distintos : .
La demostración es la misma que la de Fermat, aplicada a los restos invertibles; el teorema de Euler es el teorema de Lagrange para el grupo .
RSA
En 1977 tres investigadores del MIT, Ron Rivest, Adi Shamir y Leonard Adleman, pasaron un año intentando construir un cifrado de clave pública (Rivest y Shamir proponían, Adleman rompía) hasta que, tras una cena de Pascua judía en abril, Rivest escribió el esquema:
- Elegir dos primos grandes aleatorios y , y tomar y .
- Elegir coprimo con (hoy casi siempre ) y calcular con el algoritmo de Euclides extendido.
- La clave pública es ; la clave privada es (y , ).
- Cifrar un número como ; descifrar como .
Para todo : .
Demostración
Como , escribimos . Módulo : si , Fermat da ; si , los dos lados son . Lo mismo ocurre módulo . Así que y dividen a , y como son primos distintos, también lo divide (es el teorema chino del resto: un resto módulo queda determinado por sus restos módulo y módulo ).
Quien sepa factorizar calcula y después , así que RSA es como mucho tan difícil como factorizar. Aquel agosto, la columna de Martin Gardner en Scientific American describió RSA y publicó un reto: un mensaje cifrado con un módulo de 129 cifras, RSA-129, con un premio de 100 dólares. Los autores calcularon que llevaría 40.000 billones de años. Se factorizó en 1994 gracias a 600 voluntarios coordinados por Internet; el mensaje decía «THE MAGIC WORDS ARE SQUEAMISH OSSIFRAGE».
Elevar al cuadrado y multiplicar
Calcular con un de 3.000 bits multiplicando repetidamente llevaría pasos. En lugar de eso, se lee el exponente en binario y, para cada bit, se eleva al cuadrado el resultado acumulado y se multiplica por si el bit es 1: unos cuadrados y como mucho otras tantas multiplicaciones, todas módulo . Este algoritmo, que ya se conocía en la India hace más de dos mil años para calcular potencias, es lo que hace práctico RSA (y Diffie–Hellman).
El RSA de libro de texto no es seguro
El esquema anterior, el «RSA de libro de texto», es determinista (el mismo da siempre el mismo , así que un atacante puede comprobar conjeturas) y maleable ( se descifra como ). El RSA real cifra un mensaje con relleno aleatorio. El antiguo relleno de PKCS#1 v1.5 cayó en 1998 ante el ataque de Daniel Bleichenbacher, un oráculo de relleno como el de Vaudenay (capítulo 05), que reaparece una y otra vez en las implementaciones de TLS (ROBOT, 2017). OAEP, de Mihir Bellare y Phillip Rogaway (1994), añade aleatoriedad mediante una mezcla al estilo Feistel con un hash, y es demostrablemente seguro con hipótesis razonables; es lo que usa el RSA-OAEP de la aplicación de escritorio, con SHA-256 y claves de 3.072 bits. RSA cifra como mucho unos cientos de bytes, así que en la práctica cifra una clave simétrica: cifrado híbrido.
¿Qué tamaño debe tener la clave?
La factorización ha mejorado sin parar: la criba cuadrática (Carl Pomerance, 1981) y la criba general del cuerpo de números (años noventa), cuyo tiempo de ejecución es aproximadamente
subexponencial en el número de cifras. RSA-768 (232 cifras) se factorizó en 2009; RSA-250 (250 cifras, 829 bits), en 2020, con unos 2.700 años-núcleo de cálculo. Un módulo de 2.048 bits da unos 112 bits de seguridad; uno de 3.072 bits, unos 128. Un ordenador cuántico grande con el algoritmo de Shor factorizaría en tiempo polinómico y rompería RSA y Diffie–Hellman de cualquier tamaño; Math of Quantum explica cómo, y el capítulo 10, qué los sustituye.
Firmas digitales
Si se usa RSA al revés se obtiene una firma: el dueño de calcula para el hash de un mensaje, y cualquiera puede comprobar que con la clave pública. Solo quien tiene pudo producir , así que una firma da autenticidad, integridad y no repudio. Como en el cifrado, el hash debe rellenarse: RSA-PSS (Bellare y Rogaway, 1996) lo aleatoriza y tiene una demostración de seguridad ajustada; es uno de los algoritmos de firma de la aplicación de escritorio.
Las firmas hacen utilizable el resto de la criptografía de clave pública. Un certificado es una clave pública firmada por una autoridad de certificación; tu navegador confía en unas decenas de autoridades, y ellas avalan las claves de millones de webs. Cuando empieza TLS, el certificado del servidor autentica su parte del Diffie–Hellman, lo que derrota al intermediario. Las actualizaciones de software, los pasaportes, el correo (S/MIME, PGP), los commits de Git y las criptomonedas se apoyan en firmas. El capítulo siguiente las hace, a ellas y a Diffie–Hellman, mucho más pequeñas.
Para saber más
- Whitfield Diffie y Martin Hellman, «New Directions in Cryptography», IEEE Transactions on Information Theory 22(6), 1976.
- Ron Rivest, Adi Shamir, Leonard Adleman, «A Method for Obtaining Digital Signatures and Public-Key Cryptosystems», Communications of the ACM 21(2), 1978.
- Ralph Merkle, «Secure Communications over Insecure Channels», Communications of the ACM 21(4), 1978.
- James Ellis, «The History of Non-Secret Encryption» (escrito en 1987, publicado por el GCHQ en 1997).
- Dan Boneh, «Twenty Years of Attacks on the RSA Cryptosystem», Notices of the AMS 46(2), 1999.