Muchos de quienes investigamos en Teoría de Números llegamos a esta área atraídos por problemas relacionados con los números primos. A pesar de tener una definición muy sencilla, muchos de los problemas más difíciles en matemáticas se relacionan con ellos.

Decimos que un número p>1p>1 es primo, si los únicos números que lo dividen en forma exacta son el 1 y pp . En otras palabras, la única forma de factorizar un primo es así: p=p1.p=p\cdot 1.

¿Por qué son importantes? Son los átomos de la aritmética, por el siguiente resultado:

Teorema Fundamental de la Aritmética: Todo número natural n>1n>1 se puede escribir de manera única como multiplicación de potencias de primos, es decir:

n=p1k1p2k2prk2,conpiprimosdistintosyki1.n=p_1^{k_1}\cdot p_2^{k_2}\cdots p_r^{k_2},\,\,\,con\,p_i\,primos\,distintos\,y\,k_i\geq1.

Esto quiere decir que todo número compuesto (es decir, que no es primo) se puede descomponer en primos.

Se sabe que existen infinitos primos. La primera demostración conocida de este hecho es de Euclides (300 a.C) , y puedes por ejemplo verla aquí: https://youtu.be/ctC33JAV4FI?si=L01PheB_d5Fqcgn_

Hasta aquí, pareciera que estos números han sido un objeto de estudio exclusivo del campo teórico, pero esto no es así.

Algoritmo RSA

En 1978, los investigadores en ciencias de la computación y matemáticas Ronald Rivest, Adi Shamir y Leonard Adleman desarrollaron el algoritmo RSA, el cual fue el primer protocolo de cifrado de clave pública.

Los algoritmos de clave pública requieren una clave pública conocida por todos y que será utilizada para cifrar mensajes, y una clave privada que solo conoce quien recibe y descifra los mensajes.

En el algoritmo RSA hay dos componentes matemáticas claves: nuestros queridos y misteriosos números primos, y aritmética modular (de la que hablé en el post anterior). Veamos como funciona:

Supongamos que Anita quiere enviar un mensaje a Beto por un canal inseguro sin que Oscar, que es un atacante, pueda conocer el contenido del mensaje.

Generación de Clave Pública

Beto construirá una clave pública de la siguiente forma: primero, elegirá dos números primos pp y q y calculará N=pqN=pq. Después elige un número ee que no tenga factores comunes con (p1)(q1)(p-1) (q-1) (lo que es equivalente a que m.c.d(e,(p1)(q1))=1m.c.d(e,(p-1)\cdot(q-1))=1.) Beto hará público (N,e)(N,e), pero mantendrá secretos los primos pp y q.q. Esta clave será conocida por todos

Generación de Clave Privada

Para elegir la clave privada, Beto selecciona un número dd, que solo él conoce y que debe verificar lo siguiente: ed1(mod(p1)(q1))ed\equiv 1 \pmod {(p-1)\cdot (q-1)} . Esto quiere decir, que dd es el inverso multiplicativo de ee en (p1)/q1)\mathbb{Z}_{(p-1)\cdot/q-1)})

Algoritmo de Cifrado

Ahora es el momento en que Anita quiere comunicarse con Beto. Supongamos que el mensaje que va a enviar está codificado como un número MM que no será más grande que NN. Utilizando la clave pública de Beto, Anita cifra su mensaje MM calculando CMe(modN)C\equiv M^e \pmod N. CC será el mensaje cifrado.

Algoritmo de Descifrado

Para descifrar el mensaje, Beto calcula Cd(modN)C^d\pmod N lo cual, por propiedades matemáticas que veremos después, será exactamente el mensaje MM enviado por Anita.

¿Qué tan seguro es RSA? 

Si el atacante Oscar quiere descifrar el mensaje, requiere el valor de la clave privada dd, es decir, necesita conocer los primos pp y qq. Como conoce NN, le bastaría poder factorizarlo. Parece un problema sencillo, pero si NN es grande (más de 100 dígitos), no existe un algoritmo que lo haga en un tiempo razonable. De hecho, ni siquiera existe una fórmula que permita conocer todos los números primos, por lo cual el problema de factorización se considera un problema difícil.

RSA utiliza hoy claves de 2048 bits, las que tienen 616 dígitos. Para factorizar N N se requerirían 2902^{90} operaciones.

Por qué funciona RSA: algunos argumentos matemáticos

Si eliges no creer en que el proceso de cifrado y de descifrado sí funciona, quédate, que trataé de convencerte. Si eliges creer, puedes pasar al siguiente bloque.

Se define la función de ϕ\phi de Euler en un valor nn, con nn un número natural, de la siguiente manera:

ϕ(n)=#{k:1k<n:m.c.d(k,n)=1},\phi(n)=\#\{k:1\leq k<n:\,m.c.d(k,n)=1\},

es decir, cuenta cuántos números hay menores a nn, que no tienen factores comunes con nn. Por ejemplo: ϕ(8)=4\phi(8)=4. No es muy difícil darse cuenta de que si pp es primo, entonces ϕ(p)=p1.\phi(p)=p-1.

Otra propiedad interesante de esta función es que es multiplicativa, en el siguiente sentido:

ϕ(pq)=ϕ(p)ϕ(q),paratodolosprimosp,qdistintos.\phi(p\cdot q)=\phi(p)\cdot\phi(q),\,para\,todo\,los\,primos\,p,q\,distintos.

Cuando Beto generó su clave privada, usó esta condición: ed1(mod(p1)(q1)).ed\equiv 1 \pmod {(p-1)\cdot (q-1)}.Lo que garantiza que dado ee, exista un número dd que cumpla lo anterior es que justamente que m.c.d(e,(p1)(q1))=1.m.c.d(e,(p-1)\cdot(q-1))=1.

El siguiente teorema es el corazón de RSA:

Teorema: Si ed1(modϕ(N))ed\equiv1\pmod {\phi(N)}, entonces aeda(modn)a^{ed}\equiv a\pmod n, con N=pqN=p\cdot q, siendo pp y qq primos.

Para la demostración y otros detalles de RSA puedes ver el texto de Stinson-Paterson. 1

Si observas, cambiando aa por el mensaje MM en el teorema, se obtiene la validez del protocolo.

De lo paper al mundo real

Si bien este método fue propuesto en el artículo «A method for obtaining digital signatures and public-key cryptosystems» (1978) 2 no fue hasta los 90 que comenzó a utilizarse en el mundo real.

¿Cómo lograr que nuestros procesadores puedan ejecutar estos algoritmos matemáticos sin errores y de manera unificada ? Aquí entran los PKCS (Public-Key Cryptography Standards).

Los PKCS son un conjunto de especificaciones diseñadas por RSA Laboratories para asegurar que diferentes implementaciones de criptografía de clave pública sean compatibles entre sí y evitar fallos de seguridad.

En particular, PKCS#1 3 entrega las definiciones básicas y parámetros con los que se sugiere utilizar RSA.

El NIST (National Institute of Standards and Technology) en el documento «NIST Special Publication 800-56B Revision 2″ 4 indica que para alcanzar 112 bits de seguridad, se requiere que NN tenga 2048 bits. Esto quiere decir, que cada primo debe tener algo así como 1024 bits. Que un algoritmo alcance kk-bits de seguridad quiere decir que el mejor ataque que quiebra el sistema necesita aproximadamente 2k2^k operaciones.

En la actualidad, el algoritmo RSA se utiliza en cipher suites de TLS 5 , cifrado de correos electrónicos 6, VPN’s 7 y certificados de autoridad (CA).

  1. Stinson, D. R., & Paterson, M. B. (2018). Cryptography: Theory and Practice (4th ed.). CRC Press. ↩︎
  2. R. L. Rivest, A. Shamir, and L. Adleman. 1978. A method for obtaining digital signatures and public-key cryptosystems. Commun. ACM 21, 2 (Feb. 1978), 120–126. ↩︎
  3. https://datatracker.ietf.org/doc/html/rfc3447 ↩︎
  4. https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Br2.pdf ↩︎
  5. https://datatracker.ietf.org/doc/html/rfc5289 ↩︎
  6. https://ieeexplore.ieee.org/document/9821831 ↩︎
  7. https://ieeexplore.ieee.org/document/10467364 ↩︎

Deja un comentario

Bienvenidos/as!

Soy Amalia Pizarro Madariaga. Doctora en Matemáticas, académica en la U. de Valparaíso y senior researcher en CoreDevx. Investigo en Teoría de Números y sus aplicaciones a la criptografía, divulgo y escribo en este blog.

Descubre más desde Matemáticas, Criptografía y otras hierbas

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo