Nosotros, seres humanos, siempre hemos tenido necesidad de ocultar muchas cosas y de enviar mensajes secretos, de ahí que hace más de 2500 años ya los espartanos idearan un método para esconder información a los ojos no “dignos” para ello, conocido como el método de la scitala (Da-beat ha escrito unos cuantos e interesantes artículos sobre distintos métodos criptográficos que recomiendo que leas si aún no lo has hecho). Sin embargo, todos estos métodos, desde la scitala a la máquina Enigma, tenían un problema: la necesidad de que el emisor y el receptor se pusieran de acuerdo con respecto a la clave, a la forma de codificación, a usar; la misma para ambos. Esto puede ser muy engorroso si esas personas se encuentran muy lejos una de la otra: o bien hay que encontrarse para elegir la clave, o bien un intermediario lo tiene que hacer, con el peligro de que dicha clave se intercepte por el camino. Teniendo en cuenta que, además, es recomendable cambiar el código de vez en cuando, por si existen mentes astutas entre el enemigo, ya te puedes imaginar…
Desde luego, actualmente, con un método criptográfico de este tipo, sería impensable realizar compras por Internet o escribir correos electrónicos sin un mínimo de intimidad. ¿Se imagina el lector, por ejemplo, recibiendo cartas con el código a usar para enviar su número de cuenta bancaria a una determinada empresa? Además, la clave para cada comprador o emisor tendría que ser diferente y habría un gran riesgo de intercepción. Ya ves la que se podría armar.
Entonces, ¿qué método potente se esconde detrás de Internet y de tal barullo de mensajes encriptados que circulan por sus venas? Igual te suena: la Criptografía de clave pública (un nombre muy acertado), cuyo sistema más conocido y uno de los más seguros es el RSA (sus siglas se deben a la inicial del apellido de las tres personas que lo descubrieron: Rivest, Shamir y Adleman), que conoció la luz en 1977. Pero, antes de hablar sobre él, desplacémonos unos años atrás.
En 1903, un matemático que respondía al nombre de Frank Nelson Cole, dio la conferencia más silenciosa y corta de la Historia: cogió una tiza y la pasó cariñosamente por el encerado, dejándole las siguientes marcas:
Después de esto tomó asiento y el público se levantó para aplaudirlo efusivamente, lo que puede dar a entender que los matemáticos están más locos de lo que parecía: se ponen así por una simple multiplicación. El caso es que los números multiplicados son primos y Cole había gastado 3 años de las tardes de los domingos para descomponer el en esos factores… En la época en la que Cole hizo esta proeza no se podía intuir que la resolución de problemas de este tipo pudiera traer del brazo grandes implicaciones, pero, por los giros que da la Historia, la descomposición de números grandes (de unos 200 dígitos) en sus dos factores primos es la base del RSA. ¡Y Hardy que se enorgullecía de que su querida Teoría de Números no tenía aplicaciones en la vida cotidiana! ¡Si levantara la cabeza!
Volvamos otra vez a 1977…Tiene gracia (o igual no) que a Rivest se le ocurriera su brillante idea, en la que los tres habían estado trabajando, en medio de una noche de borrachera. Lo que intentaban hacer era encontrar un método que permitiera cerrar el “baúl de los secretos” con una llave y abrirla con otra diferente, y lo encontraron, como ya se ha dicho, de mano de los átomos de la matemática: los números primos. También tiene cierta gracia que el principal medio de difusión de la idea fuera un artículo de Martin Gardner en su sección del Scientific American.
Ingredientes
Después de tanto preámbulo me gustaría mostrarte un poco en qué consiste dicho método. Para ello necesitaremos los siguientes ingredientes y proposiciones:
[1] Dados dos números a y b, existen dos números enteros x e y tales que el máximo común divisor, D, de a y b se puede expresar como:
[2] Si p y q son dos números primos distintos y a es un entero positivo que no es divisible por ninguno de los dos, entonces , es decir, el resto de dividir
por pq es 1.
Preparación
Vale, veamos cómo mezclar todo esto para obtener algo consistente. Para simplificar llamemos A a la persona que va a recibir el mensaje encriptado y B al que lo encripta. A tiene dos números, con los que B va a hacer la encriptación, que son conocidos por todos (cualquiera puede enviarle un mensaje secreto a A). Llamemos a esos números m y n. m y n tienen que cumplir una serie de características:
-
m es un número formado por sólo dos factores primos muy grandes, p y q, es decir, m = pq. La tarea de conocer en qué factores primos se descompone un número muy grande, siempre que los factores primos que lo forman también sean muy grandes, es una tarea que lleva miles, e incluso millones, de años a los ordenadores más rápidos. Sin embargo, es relativamente sencillo encontrar dos números primos grandes y multiplicarlos. De ahí que A tenga información privilegiada que nadie más conoce: sólo él sabe qué dos factores primos componen el número m (podría ocurrir que dos personas tuvieran el mismo número m al haber multiplicado los dos mismos números primos. En ese caso cada una de estas personas conocería los secretos de la otra. La probabilidad de que esto ocurra es muy baja, por lo que no debería ser motivo de preocupación).
-
n es un número primo (éste no hace falta que sea muy grande) que no divide al número (p-1)(q-1)
¿Cómo envía B el mensaje a A? Primero tiene que tranformar el mensaje en números, por ejemplo asignándole un número a cada letra del alfabeto y a cada signo de puntuación. Claro, esta tabla de equivalencias es también conocida por todos. Ahora que B ya ha transformado el mensaje en un número, al que llamaremos M, sólo tiene que realizar las siguientes operaciones: Elevar M a n y dividir el resultado por m, lo que nos dará un resto, M*, que es el mensaje encriptado que le enviamos a A. De otra manera, en la igualdad con
y C número natural, r equivale a M*
Aquí es importante hacer notar las tierras movedizas que pisa la persona que quiera descifrar el mensaje. Para ello tendría que encontrar un número que al elevarlo a n y al dividirlo por m nos diera de resto M*, lo que es muy difícil, dada la magnitud de los números de los que hablamos (o bien hallar los números p y q, pero ya hemos visto también la dificultad que esto entraña).
Por lo tanto, ¿Cómo hace A para conseguir ser el único que puede desencriptar el mensaje que le ha enviado B? Para ello necesita otro número, el desencriptador, x, que cumple que:
¿Y por qué tendría que existir ese número? Teniendo en cuenta que m no divide a (p-1)(q-1), ya que lo escogimos expresamente para que fuera así, y aplicando [1] a este caso en concreto, en el que a es m, b es (p-1)(q-1) y el máximo común divisor es 1, es fácil darse cuenta del porqué. De todas formas una cosa es que exista y otra que sea fácil hallarlo, pero gracias al algoritmo de Euclides no tenemos ninguna dificultad para dar con él. Hago notar también que A es el único que puede hallar ese número, ya que es el único que conoce p y q, y por lo tanto (p-1) y (q-1)
Bien, pues ahora, con [1] y [2], y con unos bastante sencillos pasos que no vamos a explicar en este post por no hacerlo demasiado tedioso, llegamos a la conclusión de que M es igual al resto de dividir M* elevado a x por m, es decir,
, donde C y C’ son números naturales.
En realidad la implicación es doble, ya que también se cumple que:
, donde C y C’ son números naturales
Ésta es una propiedad importante que deshecha una desventaja que podría tener este sistema con respecto a los antiguos si no fuera así: permite firmar el mensaje enviado, es decir, permite tener la certeza de que el mensaje que recibimos es de la persona esperada y no de un bromista que decidió hacerse pasar por otro. ¿Por qué y cómo? La doble implicación nos permite afirmar que el método de encriptado es inverso al de desencriptado, de tal manera que si encriptamos el mensaje que queremos enviar y luego lo desencriptamos o lo hacemos al revés, “desencriptamos” el mensaje y luego lo “encriptamos”, el resultado siempre va a ser el mensaje de partida. Veamos entonces cómo firmar nuestro mensaje.
-
B decide enviar su mensaje a A firmado. Para ello primero trata el mensaje, M, con su propio algoritmo de desciframiento (sólo conocido por él), obteniendo M1
-
B encifra M1 a través del algoritmo de enciframiento (conocido por todos) para A y le manda el mensaje, M1*, a A
-
A, a través de su algoritmo de desciframiento (sólo conocido por él), obtiene M1.
-
Ahora A usa el algoritmo de enciframiento de B (conocido por todos) en M1 y obtiene M (obsérvese que M1 lo habíamos obtenido a partir de usar el algoritmo de desciframiento de B sobre M). A puede estar seguro de que el mensaje es de B, ya que él es el único que conoce el algoritmo de desciframiento de B y de otra manera habría salido un galimatías.
Los pasos 2 y 3 son los necesarios si no queremos enviar el mensaje firmado. El primero y el cuarto se añaden para el caso de que sí se quiera hacer.
Me habría gustado mostrar un script mediante el que practicar este tipo de algoritmo, pero da-beat, que hace ya tiempo que había quedado en hacerlo, no se ha decidido aún. A ver si algún día escribe su post sobre el RSA, que seguramente sea mucho más dinámico que éste (siento haber escrito sobre el tema, pero es que no me resistía, y como tú durabas mucho, no tuve paciencia…)
Ahora cabe preguntarse: ¿hasta qué punto preferimos que no se descubra
una forma fácil de descomponer un número grande en sus factores primos? Si no se descubre, el sistema RSA está a salvo, pero si se descubre habremos colocado uno de los cimientos del edificio matemático. ¿Qué es preferible? De todas maneras el sistema RSA no es el único método criptográfico de clave pública válido. Uno que tiene también mucho auge se basa en las denominadas curvas elípticas, usado principalmente en móviles, agendas electrónicas y demás aparatos electrónicos con poca memoria y microprocesadores lentos. El método de las curvas elípticas requiere mucho menos tiempo de encriptamiento que el sistema RSA. Quién sabe lo que pasará dentro de unos años. Quién sabe cuántos son los años de vida que le quedan al RSA.
Por cierto, es mi intención, si no me lío mucho con latex, demostrar las proposiciones del principio y observar más profundamente las entrañas matemáticas del sistema RSA… Pero eso ya para otro día.
Bibliografía:
DE GUZMÁN, M. (2000): Aventuras matemáticas. Pirámide
DU SAUTOY, M. (2003): La música de los números primos. El acantilado







Aca abajo puse un link para los que gustan de la criptografía, está en Inglés y explica un código inventado en 1800 para el presidente americano Jefferson, que fue descifrado recién en 2007.
Lo más interesante es hacer click en el video interactivo en el que se explica paso a paso como se deberían codificar los mensajes, es un método muy simple, pero muy ingenioso.
Cumple con cuatro condiciones que según su inventor debe tener cualquier método para cifrar mensajes:
1. Sirve para cualquier idioma
2. Debe ser fácil de memorizar
3. Debe ser fácil de escribir y de leer
4. Debe ser inescrutable e indescifrable para el que no conozca la clave
http://online.wsj.com/article/SB124648494429082661.html
Muchísimas gracias Claudio. Aprovecho para decir que en la último número de la Revista Suma (61) aparece un artículo sobre criptografía con varios sistemas criptográficos. No está on-line; lo digo para el que pueda hacerse con la revista.
Hace unos días que iba a responder, porque hay un método para que dos personas puedan acordar una clave de forma segura. el problema es que, precisamente cuando iba a responder, encontré un fallo en ese sistema. De todas formas lo pongo, bien para que lo conozcáis, bien para que encontréis ese fallo.
Se trata de hacer potencias con exponente secreto basándose en la facilidad de hacer potencias y en la dificultad de hacer logaritmos. En principio uno piensa que hacer logaritmos también es fácil, pero se puede complicar si se escribe el resultado en módulo n.
Por ejemplo
es 32, y es fácil saber que si
, entoces
. Ahora bien, si damos el resultado de
en, por ejemplo, módulo 10 (dar la última cifra, diríamos que
. Ahora ya no es tan sencillo saber x, porque puede ser 1, 5, 9…
Esa es la base, vamos a ver ahora el método:
1) Se eligen dos números m y n, que pueden hacerse públicos sin problema, porque no son la clave. Por ejemplo, 7 y 11.
2) Ahora Ana y Bea eligen cada una su número secreto A y B, que no tienen que comunicar a nadie (ni siquiera tiene que salir de sus cabezas).
3) Ana hace la operación
y envía el resultado a Bea. Bea hace la operación
y envía el resultado a Ana. Aunque estos envíos sean interceptados, no importa, porque ninguno de ellos es la clave y, a partir de ellos, no pueden obtenerse ni A ni B.
4) Ana toma el número envíado por Bea,
, y lo eleva a A (mod 11), obteniendo
. Bea toma el resultado enviado por Ana,
, y lo eleva a B (mod 11), obteniendo
.
5) Esos dos números son iguales. Esa es la clave. Fijáos que Ana no conoce el número B, ni Bea conoce el número A, pero las dos llegan al mismo resultado. Alguien que intercepte los resultados intermedios, como no conoce ni A ni B, no puede llegar a conocer la clave.
Podéis hacer las operaciones fijando A y B, veréis que llegáis al mismo resultado por los dos caminos. Ahora bien, yo he pensado un número D (por Da-beat) y he hecho la operación
y el resultado es 2. ¿Alguien puede saber cuál es el número D?
¡Por fín! Que manera de liarla. Lo siento por los del Reader y por Sara, que tiene que borrar mensajes. Espero que al menos el contenido merezca la pena…
Mil gracias da-beat por tus comentarios (incluidos los que he borrado
). Tiene gracia, pero creo que eres la persona a la que más comentarios he borrado del blog (5 en total). Siento que hayas tenido dificultades para hacer el comentario, pero bueno, el esfuerzo sí ha merecido la pena desde mi punto de vista.
Vamos ahora con el sistema que has propuesto… Es realmente ingenioso (y muy bien explicado. Lo he entendido a la primera
). No lo conocía… Pero dices que tiene un fallo. No sé mucho de aritmética modular (mejor dicho, no sé nada, sólo sé lo que significa), pero si no me equivoco el número D podría ser unos cuantos: 3 + 10n, donde n es un número natural (incluido al 0 como número natural).
Además tengo una duda con el punto 4. Dices que Ana toma el número envíado por Bea,
, y lo eleva a A (mod 11)… ¿Quieres decir que primero lo eleva a A y luego aplica el módulo? Es que al principio entendí que primero se aplicaba el módulo a A y luego se elevaba a ese módulo y no me salían los cálculos (es que me gusta enrevesar las cosas
)
Si es así intuyo que el fallo de este sistema está en que, aunque no podamos calcular A, B ó D, nos basta con saber que son iguales a k+10n para hallar la clave, porque un número x cualquiera elevado a cualquier k+10n siempre nos va a dar el mismo resultado módulo 11 (en este caso). Por ejemplo
da el mismo resultado que
(8 en ambos). Me parece que estoy en lo cierto, pero ya digo que no sé mucho de esto y no puedo demostrarlo.
De todas maneras, y a pesar del fallo (sea el que sea), está muy bien, porque así se ve otro mecanismo diferente: dos personas llegan al mismo resultado cada uno con su número secreto. Además, igual con números muy grandes no es tan fácil (no lo sé). Ya digo que de todas formas a mí me ha gustado y que me parece un sistema muy ingenioso. Además, quién sabe si no habrá otra forma de realizar el mismo mecanismo con más seguridad.
Saludos
Efectivamente, Sara, primero se eleva y luego se aplica el módulo, no quedó muy claro antes por que iba todo seguido. Y tambien tienes razón en el fallo: Todas las posibles soluciones dan el mismo resultado. En realidad no siempre es k+10n, puede ser k +4n, o cualquier otro (depende del módulo elegido), pero siempre son una progresión aritmética, y todos los términos dan elmismo resultado para la clave.
Con números grandes sería un poco más complicado, pero solo por tiempo, ya que si conocemos la base y el módulo, solo tendríamos que encontrar el primer término de dicha progresión, y sabríamos la clave.
Pillas todo a la primera
Si, sí, da-beat. No lo dejé claro pero con lo del k + 10n me refería a este caso en concreto, con módulo 11.
Ya me gustaría a mí pillar las cosas que realmente importan a la primera