Friday, August 10, 2007

Calculando RSA con una regla

4 * 5
Esta historia se me puede hacer un poco larga...
Hace un tiempo, tenuki, me conto que se podia multiplicar usando rectas.
El asunto es asi (hice dibujitos):
Supongamos que quiero multiplicar 4 * 5 (señorita señorita, esa la se!). Lo primero que tenemos que hacer es trazar un segmento de tamaño 5, que empieza en el punto 1@0, y llega hasta el punto 1@5 (segmento azul). Despues trazamos una recta, que pasa por el punto 0@0, y por el punto 1@5 (recta roja). Finalmente, a baño maria, hacemos un segmento de tamaño 4, sobre el eje de las x, y que salga del punto 0@0 (segmento verde). Cuando unimos el segmento verde con la recta roja (a travez del segmento amarillo), encontramos dos puntos. El que esta sobre la recta roja (4@20) nos da en su coordenada y el valor que estabamos buscando (y si.. 20).
El metodo parece piola, y la explicacion es simple. Cuando trazamos la recta roja, en realidad, estamos trazando una recta que tiene como ecuacion y = 5 * x. Luego hacemos el segmento verde, y nos encontramos con que x = 4. Entonces y = 5 * 4 = 20. Lo mismo que queriamos, pero expresado obtenido de una manera distinta.
La pregunta seria que tiene esto que ver con RSA. Para eso necesitamos poder elevar un numero a una potencia (elevar es multiplicar un numero por si mismo n veces).
Eso tambien lo podemos hacer con regla, y para eso usamos mapas iterativos.

3 ^ 5
Receta para calcular 3 ^ 5 (4 porciones):
Primero le cambiamos el nombre a los ejes, el eje X ahora se llama x(t) y el eje Y ahora se llama x(t+1). Despues trazamos dos rectas que salen desde el origen 0@0. La primer recta es una recta de 45 grados (recta verde). La segunda recta (recta roja) es una recta de pendiente 3 (si estubiesemos elevando 17 ^ n, la recta seria de pendiente 17).
Partiendo del punto 1@1 (que esta en la recta verde), trazamos una recta paralela al eje x(t+1), hasta encontrar a la recta roja (esto va a ocurrir en el punto 1@3). Maravillosamente encontramos el valor de 3 ^ 1. Luego trazamos una recta horizontal hasta volver a encontrar la recta verde, y subimos hasta la recta roja, ahora el punto va a ser el 3@9 (jua, 3 ^ 2 !!). Si hacemos esto 3 veces mas, nos vamos a encontrar con el punto 81@243 (y 243 es 3^5 !!). Esto significa que aprendimos a potenciar con regla!
Yo me pregunte por que esto funcionaba... Bueno, parte de la respuesta es que cuando trazabamos la recta de pendiente 3, podiamos escribir esta ecuacion en diferencias:
x(t+1) = 3 * x(t) que es la ecuacion de la recta roja.
La solucion a esta ecuacion en diferencias es: x(t) = C(3^t) donde C es alguna constante que depende del punto inicial (en nuestro caso, y para el bien de todos nosotros, es 1).
Asi que esto funcionaba :)
Ahora nada mas nos falta solucionar un problema: el modulo
El ejemplo anterior lo vamos a cambiar un poco, vamos a calcular 3 ^ 6 % 251 (esto se lee: 3 a la sexta modulo 251). Al grafico anterior, trazamos una recta horizontal para x(t+1) = 251.
Ahora, cuando elevamos un numero, seguimos los mismos paso que antes, pero si, cuando estamos trazando la recta vertical, encontramos la recta azul en vez de la roja, cambiamos un poco el asunto. En ese caso, trazamos una recta paralela a la recta roja, y que pase por este punto (por el punto donde nos encontramos con la recta azul). Seguimos esta nueva recta hasta que x(t+1) = 0 (es decir, hasta el eje x(t)), y volvemos a seguir los pasos anteriores (con la precaucion de que podemos volver a encontrarnos la recta azul).
Asi vemos como en el ejemplo (3 ^ 6 % 251), nos encontramos dos veces con la recta azul antes de encontrar a la recta roja en el punto que estavamos buscando (227/3@227) donde 227 es el resultado que buscabamos.
3^6 % 251
Finalmente me queda pendiente algo interesante para pensar, que es la existencia de atractores. Un atractor en este caso seria algun conjunto de dibujos que sean iguales. Lo interesante es que una vez que se toca un punto de la recta roja mas de una vez, sabemos que estamos en presencia de un atractor, es decir, vamos a estar un dibujo que ya habiamos hecho. Hay un pequeño teorema que garantiza la presencia de atractores, si se cumplen algunas situaciones, pero el numero al que tenemos que elevar es un numero muy alto. Seria piola achicar ese numero.

6 comments:

Carlono said...

Che, altamente groso, a ver si me animo a entender algo de ecuaciones diferenciales y todo.

¡Ah sí!, vengo de parte de Adrián Manrique, me dejó esta tortuga para que se la cuide, pasé y vi el blog :D.

Cordialmente - Carlos

jb said...

je, me alegro que te haya gustado :)

jb said...

Con respecto a los requerimientos.
Luciano me hizo notar que estaba usando los enteros, y nadie me los habia dado... Es verdad lo que dice, y eso se podria hacer con un compaz, pero para no complicar el asunto seria piola que se usen una hoja cuadriculada, puede ser Rivadavia, y para las rectas/paralelas, biene bien una escuadra (a mi me gustan las Pizzinis, que se pueden conseguir en el barrio chino)

saludos
/jb

alejos said...

Interesantisimo esto, che.

Mandale un saludo a Mr. Tenuki de parte mia :)

Emiliano Kargieman said...

grosum,
en algún lugar dice verde y no es verde, pero está muy claro el post. Ahora, me mostrás un grafiquito con todas las rectas de un RSA de verdad :)

keep up the posts!

Anonymous said...

Asi es como se explica tambien Curvas elipticas...