Post date: 15-abr-2014 16:59:37
Secretos. Todos los tenemos. La vida de cualquier persona involucra en algún momento (me atrevería a decir a diario) algún secreto, algo que quiera o tenga que ocultar. Y aunque usted esté tentado a decir “no, yo no tengo nada que ocultar”, sin embargo, es muy probable que utilice un password si tiene acceso a una computadora, o a recibir correspondencia electrónica, o tiene una tarjeta de crédito, o una máquina de la que saca dinero en efectivo, hasta la combinación de una caja de seguridad o de un candado común y corriente. Y ni qué hablar de hacer alguna transacción por Internet que involucre alguna identificación personal.
¿Cuántas veces le contaron o leyó que hay gente interesada en interceptar datos que usted envía por Internet para usarlos maliciosamente? ¿Cuántas veces dudó en enviar –también por Internet– el número de su documento, o su dirección postal, o el número de su tarjeta de crédito o de su cuenta bancaria, por temor a que fueran robados? ¿Cuántas veces pensó que hay gente que puede leer el contenido de sus mensajes de correo electrónico sin que usted lo advierta? ¿Cuántas veces oyó que, para poder garantizar ciertas condiciones mínimas de seguridad, hace falta usar matemática? Ahora bien, ¿qué “matemática” hay que usar? ¿Y cómo? ¿Cuán seguro es? Con lo que sigue, pretendo contarle cómo se hace, qué se usa y cuán seguros son los métodos que se aplican. Por supuesto, sólo será una idea y sin el rigor técnico necesario, pero aspiro a que quien termine de leer el texto cuente con una información que no tenía previamente.
Elegí un camino que quiero compartir con usted, pero necesito pedirle algunas cosas antes:
a) Yo voy a hacer algunas cuentas sencillas: multiplicaciones, divisiones y restas. Verifíquelas o créalas, pero advierta que lo que uso son herramientas hipersencillas.
b) Hace falta que recuerde lo que es un número primo. Es decir, números que sólo son divisibles por ellos mismos o por el número 1. (El número 1 no se considera primo.) Por ejemplo, el 2, 3, 5, 7, 11, 13 son primos. En cambio, 4, 9, 15, 16 no lo son.
c) Por último, piense en un número entero positivo cualquiera antes de seguir leyendo (distinto de 0 y de 1). Ese número que está pensando, o bien es primo, o bien es el producto de números primos. Es decir, cualquier número natural es o bien un número primo, o bien se escribe como producto de primos. Por ejemplo, el 11 es primo y listo. El 19 también. Pero el 21 no es primo y se escribe como (7 x 3). El número 100 tampoco es primo, pero se escribe como (2 x 2 x 5 x 5).
La clave de por qué funciona este método consiste en un par de razones muy interesantes. En principio, si le doy dos números cualesquiera, 3 y 5 por ejemplo, y le digo que los multiplique, la respuesta es obvia: 15. Al revés: si le doy el número 15, y le pido que me diga cuáles son los factores primos que lo componen (o sea, 3 y 5), también es fácil de calcular, porque los números son pequeños. En cambio, si le diera el número 358.566.167 y le dijera que encuentre los dos factores que lo componen… intente y verá que la dificultad es muy grande. La respuesta es que: 18.859 · 19.013 = 358.566.167 Y si le dijera que encuentre los factores primos de: 8.943.587.117 Tardará un poco más, hasta descubrir que son 62.987 y 141.991. Es decir, lo que quiero comunicar acá es que calcular el producto de dos números es algo sencillo. Tedioso, pero que no ofrece complicaciones. En cambio, encontrar los factores primos que componen un número, más allá de que también sea tedioso, es virtualmente imposible si los números son muy grandes. Y ésta es la clave del método. Las computadoras más rápidas que se usan hoy tardarían más de 100.000 años en encontrar los factores que componen números de más de 400 dígitos (que son los que se utilizan). En consecuencia, no se trata de que el método que le voy a contar sea inviolable. De hecho, no es así. Sólo que con la metodología que se conoce hasta hoy, encontrar esos números es virtualmente imposible. El tiempo dirá si aparece una nueva manera de factorizar números en sus componentes primos, que no sea usando las herramientas actuales. Si así fuere, habría que revisar todo, porque se transformaría en vulnerable.
Como es archiconocido, los aliados en la Segunda Guerra Mundial lograron decodificar los mensajes de los alemanes y de esa forma lograron invadir Normandía en 1944 y, a partir de ahí, elaborar el triunfo final. Es decir, tratar de encriptar mensajes es un tema de alta sensibilidad.
Sin embargo, en 1976, dos científicos norteamericanos, Whitfield Diffie y Martin Hellmand, de la Universidad de Stanford, introdujeron una idea revolucionaria: “la clave pública”. ¿Qué quiere decir esto? Hasta ese momento, se operaba de la siguiente manera: tanto el emisor como el receptor tenían una llave secreta. El emisor la usaba para cerrar el mensaje (encriptarlo) y el receptor, para abrirlo (desencriptarlo). La idea de Diffie y Hellmand fue usar algunos teoremas conocidos de Teoría de números para lograr que una de las claves fuera pública. Es decir, ya no importaría que alguien interceptara el mensaje, sino que, además, cualquiera podría encriptar lo que quisiera.
Usando el método de Diffie y Hellmand, la persona que quiere encriptar un mensaje puede publicar en el diario o en las páginas amarillas, o donde se le ocurra, cuál es la clave que usa. Pero lo extraordinario del descubrimiento es que, por más que uno tenga esos datos, ¡no le sirven para decodificarlo! Eso sí: el receptor del mensaje sí tiene una clave privada que es la que usará para recuperar el mensaje original.
En resumen: el emisor encripta el mensaje usando datos que todo el mundo puede conocer y luego lo envía. El receptor lo desencripta usando la clave privada. Lo notable es que la parte que falta, o sea, la clave privada, es inhallable para cualquier otra persona que no sea el propio receptor, quien, de paso, no es que la encuentra sino que la tiene en su poder de antemano. De todas formas, a este proceso le faltaba algo. En teoría, funcionaba todo perfecto, pero ¿cómo hacer para conseguir una clave que fuera tan privada que nadie pudiera encontrarla?
En 1977, tres investigadores del MIT (Massachusetts Institute of Technology), Rivest, Shamir y Adleman, elaboraron un algoritmo que resolvió el problema. El algoritmo se conoce con el nombre de RSA (por las iniciales de los autores). Los tres científicos fundaron la compañía RSA Data Security, con la que se transformaron casi instantáneamente en millonarios, luego de haber patentado el proceso que aún hoy es el que se usa en todas partes. De hecho, el propio Departamento de Defensa de los Estados Unidos interviene en el control de la empresa, ya que la clave es tan inviolable que permite mandar mensajes que nadie puede decodificar, poniendo –supuestamente– en riesgo la seguridad de un país.
Como dije antes, la rama de la matemática que interviene en este proceso se llama Teoría de números. Lo curioso es que el inglés Godfrey H. Hardy, uno de los matemáticos más famosos del siglo XX, escribió:
“Prefiero considerar a mi campo de investigación como matemática pura, ya que nadie ha descubierto aún ninguna utilidad para la guerra aplicando la Teoría de números o la relatividad, y me parece muy raro que esto suceda en los próximos años”.
Hardy fue un gran opositor (en aquellla época) de toda guerra y es reconocido como tal; de todas formas, su predicción fue claramente errónea. No hace falta comentar cuán devastador fue para la humanidad el desarrollo de armas nucleares y, por otro lado, la Teoría de números ha sido decisiva en los temas de criptografía. Pero lo interesante del comentario es que, lo que en ese momento era considerado un ejercicio intelectual, terminó siendo la herramienta clave para el desarrollo de la criptografía moderna.
Una breve explicación –sin entrar en los detalles técnicos– de cómo funciona el mecanismo. Le pido que por favor trate de seguirme ahora, porque es la parte más relevante de toda esta historia. Si siente que se pierde, no se preocupe. Siga leyendo hasta que se sienta cómodo con el método y verá que –en principio– es sencillo de entender cómo funciona. Y eso es lo que pretendo hacer con lo que sigue. Supongamos que yo quiero mandarle un mensaje a usted.
Lo primero que tengo que hacer es transformar el mensaje en un número. ¿Cómo hacer esto? Por ejemplo, adjudicándole a cada letra un par de dígitos. Así, si uno asigna a cada letra del alfabeto un número, tenemos:
Entonces, si el mensaje fuera AMOR corresponde poner el siguiente número: 01131619 De esa forma, a cada mensaje escrito en palabras le corresponde un número. Por supuesto, cuanto más largo es el mensaje más grande es el número. Pero no interesa: lo importante es que el mensaje ahora se transformó en un número, que llamaremos M.
Ahora empieza el proceso de encriptación y desencriptación. En realidad, salvo que uno tenga mucho tiempo y nada que hacer con él, conviene usar una calculadora o una computadora, pero de todas formas lo que me interesa con este texto es contar –sin entrar en tecnicismos– cómo se hace. Empiezo con un plan de lo que voy a hacer:
1) Busco el mensaje que quiero mandar. Digamos, para fijar las ideas, que quiero enviar el número 4.
2) Busco la clave pública que voy a usar para encriptar el mensaje. En este ejemplo, consiste de dos números: 33 y 7.
3) Usted (el receptor) conoce ya su clave privada, que también consiste en dos números: 33 y 3 (note que al 33 lo usamos los dos: usted y yo).
Con estos datos, yo hago lo siguiente:
PRIMER PASO:
Multiplico el mensaje, el número 4, siete veces por sí mismo (es decir, el mensaje lo elevo a uno de los números de mi clave):
47 = 16.384
SEGUNDO PASO:
Divido el resultado por 33 (que es el segundo número de mi clave) y me fijo cuánto sobra o cuál es el resto.
16.384 = 496 · 33 + 16
Acá hago una pausa. Este número, 16, es el mensaje codificado. Esto es lo que voy a mandar y no me interesa que nadie lo intercepte.
O sea, hasta acá, usé cuatro números:
a) El mensaje: 4
b) El primer número de la clave: 7
c) El segundo número de la clave: 33
d) Y con ellos fabriqué el cuarto número: 16
Ahora, usted recibe el mensaje encriptado, que es el número 16. ¿Qué hace entonces?
Bueno, usa su clave, que consiste no sólo en el 33, sino también en el número 3 (¡y este número sí que es privado! Sólo usted lo conoce). Y hace lo siguiente:
TERCER PASO:
Multiplica el mensaje por sí mismo 3 veces. Es decir, eleva el mensaje que recibió al cubo, o sea,
163 = 4.096
CUARTO PASO (Y FINAL):
Divide el resultado, o sea 4.096, otra vez por 33 y calcula cuánto sobra:
4.096 = 124 · 33 + 4
¿Qué pasó? Lo notable es que ahora, al hacer este proceso, ¡usted descubre el mensaje que yo le mandé y que era el número 4!
De hecho, lo invito a que elija el número que quiera como mensaje, y repita el procedimiento hasta convencerse de que no importa cuál sea el número original, luego de los cuatro pasos que figuran más arriba, usted lo va a redescubrir.
Un último ejemplo con claves diferentes, de manera tal que podamos verificar que todo lo que hice hasta acá está claro:
Mensaje M = 2
Clave pública: 85 y 13
Clave privada: 85 y 5
Primer paso: 213 = 8.192
Segundo paso: 8.192 = 85 · 96 + 32. Luego, el mensaje encriptado es 32.
Tercer paso: 325 = 33.554.432
Cuarto paso: 33.554.432 = 394.758 · 85 + 2
Como se ve, entonces, uno vuelve a recuperar el número 2, el mensaje original. Una vez que entendió estos ejemplos, avanzo un poco más.
En general, el método consiste en lo siguiente (ahora voy a usar letras para indicar tanto los mensajes como las distintas claves):
Datos:
Mensaje = M
Clave pública = N y e
Clave privada = N y d
(se usan las letras e por potencia que sirva para encriptar y d para desencriptar).
Uno hace lo siguiente, entonces:
Primer paso: calcula Md
Segundo paso: divide el resultado por N y calcula el resto, que llamo R.
Md = q · N + R
En consecuencia, el mensaje encriptado ahora es R. El receptor recibe el número R y comienza a desencriptarlo.
Tercer paso: calcula Rd
Cuarto paso: divide el resultado por N y calcula el resto, que tiene que ser M.
Rd = q” · N + M
El número N se elige de manera tal que sea muy grande. ¿Qué quiere decir grande? Que tenga más de 400 (cuatrocientos) dígitos. Para tener en claro cuán enorme es un número así, basta pensar que todo el universo está compuesto por 2300 átomos, o sea. Aproximadamente un 1 seguido por 90 ceros.
Ahora bien: se elige este número N de modo que sea el producto de sólo dos números primos, cada uno de aproximadamente doscientos dígitos. Digamos que N se escribe como el producto, entonces, de dos números primos: p y q.
N = p · q
Este número N es el que va a formar parte de las claves pública y privada. Ahora bien, uno se fabrica el siguiente número:
(p – 1) · (q – 1) + 1
Éste también es un número muy grande, y cuando uno elige el número N tiene en cuenta que este otro número tiene que descomponerse también como producto de sólo dos primos. Y justamente, esos dos primos son los que llamé más arriba e y d. O sea, (p – 1) · (q – 1) + 1 = e · d
Estos dos números, e y d, son los que completan las claves pública y privada. Como expuse más arriba, los números que son públicos son N y también e. Y la clave privada se compone del número N y del número d. Lo increíble (en apariencia) y maravilloso de este procedimiento es que el número que resulta como resto es justamente M, ¡el mensaje original!
En definitiva, la encriptación en la que el mundo de hoy confía depende de un par de resultados de la Teoría de números. La inviolabilidad del sistema radica en que –con los métodos actuales– es imposible factorizar un número descubriendo en un tiempo razonable (o sea, no medido en siglos) cuáles son los primos que lo componen. Hasta aquí estamos bien. El día que alguien descubra cómo hacerlo, los sistemas colapsarán y habrá que empezar de nuevo. Pero por ahora estamos bien (Paenza, MATEMÁTICA… ¿ESTÁS AHÍ? Episodio 3,14, 2007).