jueves, 12 de octubre de 2023

Criptografía de Forma Sencilla

   La criptografía es un campo moderno dentro del ámbito de estudio e investigación de la matemática y requiere conocimientos avanzados de esta materia. Aún así, intentaré en esta entrada reflejar la criptografía de la forma más sencilla que pueda sin que el lector se sienta empequeñecido y abrumado por la teoría que encierra. Espero acertar.

   Sea M un mensaje y E su encriptación. Supondremos que ambos son números naturales. Llamamos f a la función que va de M a E, f(M) = E. Para codificar M, el codificador y el descifrador del mensaje seleccionan dos números primos muy grandes, p y q, y definen el módulo, al que llamaremos n poniendo n = pq, suponiendo n > M. Se elije un e, con 1 < e < g(n) y e primo entre sí con g(n). La función g(n) llama función indicatriz y se define como el número de elementos del conjunto de números menores que n que son primos entre sí con n, es decir, g(1) = 1, g(2) = 1, g(3) = 2, g(4) = 2, g(5) = 4, g(6) = 2, g(7) = 6, g(8) = 4, g(9) = 6, g(10) = 4, ... Algunas propiedades interesantes de la función g son que, si p y q son primos entre sí, se cumple que g(pq) = g(p)g(q) y cumple el pequeño teorema de Fermat (su enunciado es "si a es un entero positivo y p un primo que no es factor de a, entonces p ha de ser un factor de aᴾ⁻¹ – 1"): si p y q son primos entre sí, entonces pg(q)  1 (mod q), es decir, pg(q) - 1 = kq, con k número entero, esto es,  pg(q) y 1 dejan el mismo resto al dividirse entre q. El símbolo "≡" en una expresión del tipo x ≡ y (mod n)  significa x congruente con y módulo n. En definitiva, x es igual a y en Zn (son iguales como clases de equivalencia).

   La clave pública está formada por n y e y es conocida. Se puede definir este concepto con un ejemplo tan sencillo como ilustrativo: Supongamos que Y quiere enviar a X un mensaje secreto que solo él pueda leer. X envía a Y una caja abierta con cerradura, la cual se bloqueará una vez se cierre la caja, de tal modo que solo podrá abrirse con una llave que solo posee X. Y recibe la caja, escribe el mensaje, lo pone en la caja y la cierra. Ahora Y ya no podrá abrir la caja para acceder de nuevo al mensaje porque no tiene la llave. Entonces Y envía la caja a X, la cual puede abrir con su llave. Así, la caja con la cerradura es lo que se denomina clave pública de X y la llave de la cerradura es su clave privada. La caja la puede ver cualquiera pero no su contenido.

    Como n es tan grande y no está factorizado, p y q son incógnitas casi imposibles de saber. Se tiene que E = f(M) M e (mod n). En estas condiciones, la clave privada es el par n, d, donde d se elije de manera que ed 1 (mod g(n)). Como p y q son primos y n = pq, se cumple que g(n) = (p - 1)(q - 1). Si no se conocen p y q, y es prácticamente imposible conocerlos, no puede conocerse tampoco g(n) por lo que tampoco puede conocerse d. Pero el descifrador sí posee d ya que conoce p y q y así puede descifrar el mensaje (posee la llave que desbloquea la caja): E d (M e ) d  (mod n) M ed (mod n)   M (Ng(n) + 1) (mod n), con N un número natural. Se puede aplicar ahora el pequeño teorema de Fermat: si a = M N (a es, casi seguro, primo entre sí con n), entonces, E d aM g(n) (mod n) M (mod n) = M, ya que M < n, como se ha supuesto al principio.

   Por todo ello, crear una clave es relativamente fácil, pues sólo se necesitan dos números primos grandes, los que hemos llamado p y q, y romperla es muy difícil. En esto se basa la seguridad actual de internet.

   Pocas veces se puede encontrar el resumen de toda una rama de la teoría de números tan breve, concisa y clara. Lo ideal es probar con algunos ejemplos que dejo al lector a su libre albedrío para que experimente, lo que quizás le lleve algún tiempo (una fracción de una fracción de una fracción es lo que tardan los ordenadores en cifrar mensajes) pero seguro que el resultado le agrada.