You are on page 1of 5

Entender RSA

Todos tenemos una idea de cmo funciona el cifrado asimtrico RSA, que se basa en
unos nmeros primos muy largos para generar una clave pblica, con la que cualquiera
puede cifrar un documento dirigido a ti, y una clave privada, con la que slo t puedes
descifrarlo. Pero a m siempre se me ha resistido la comprensin ltima, las tuercas y
tornillos del algoritmo, sobre todo porque mi conocimiento de la Teora de los Nmeros
deja mucho que desear. Por eso he decidido hacer un auto-cursillo sobre este tema, con
la esperanza de haber captado, si no los fundamentos profundos, al menos la mecnica
detallada del procedimiento. Tambin espero que ese estudio le sirva a alguien que vaya
igual de despistado en este asunto. A los que estis ms puestos en esta materia os ruego
benevolencia, incluso alguna colaboracin o, si os aburre, que miris para otro lado.
Me ha servido bastante la explicacin que he encontrado en Clay Mathematics Institute,
pero cualquiera de las que hay por ah servira igualmente, si se mira con atencin.
Para facilitar la comprensin he confeccionado una versin de juguete, que usa nmeros
primos pequeos, con lo que no se consigue fortaleza alguna, pero quiz se vea ms
claro el intrngulis.



Para empezar, se codifican los caracteres del mensaje en claro mediante una tabla como
sta:
* 0 1 2 3 4 5 6 7 8 9
0 XX XX XX XX XX XX XX XX XX XX
1 SP A B C D E F G H I
2 J K L M N O P Q R S
3 T U V W X Y Z a b c
4 d e f g h i j k l m
5 n o p q r s t u v w
6 x y z . , : ; ' " `
7 ! @ # $ % ^ & * - +
8 ( ) [ ] { } ? / < >
9 0 1 2 3 4 5 6 7 8 9
en la que cada carcter se representa por el par de nmeros de su fila y su columna. Por
ejemplo, la palabra KRIPTOPOLIS se codificara por el nmero
K R I P T O P O L I S = 21 28 19 26 30 25 26 25 22 19 29
KRIPTOPOLIS = 2128192630252625221929
Supongo que tambin podra usarse una tabla en la que tengan cabida los acentos y la ,
aprovechando los caracteres no utilizados, pero esto ahora no nos preocupa.
El siguiente paso es generar dos nmeros primos p y q, tan grandes como sea posible,
aunque en nuestra versin de juguete nos limitaremos a dos primos diminutos:
p = 439
q = 449
N = p*q = 197111
Despus se fabrica nmero m a partir de los primos:
m = (p 1) * (q 1) = 196244
cuya utilidad se ver luego.
Este nmero se descompone en sus factores primos
m = 196244 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 7 * 73
Ahora necesitamos un nmero e que no tenga ningn factor comn con m, es decir, que
sea primo con respecto a l. En esto hay que tener cierto arte, porque luego tendremos
que calcular otro nmero que va a depender de ste. Pongamos que construimos un
nmero de esta forma:
e = 5 * 11 * 19 = 1045
Llegamos a la parte final de esta tarea, y es obtener otro nnero d que, junto con e,
cumpla esta curiosa propiedad:
e * d - 1 = mltiplo de m
es decir:
e * d 1 = m * y
e * d = m * y + 1
d = (m * y + 1)/e
Para calcular d hay que ir dando valores enteros a y desde 1 en adelante, hasta que el
resultado sea entero, de aqu la importancia de elegir bien el nmero e anterior. Para
esta operacin puede servirnos una hoja de clculo, como la que se ve en la figura. En
nuestro caso, el primer valor entero de d aparece para y = 31
y = 31
d = 5821
Ya tenemos la tarea hecha, salvo el cifrado, claro. Ahora podemos presentar N y e como
clave pblica, con la que cualquiera podr mandarnos un mensaje cifrado, mediante la
operacin
c = x^e modulo N
donde x es el mensaje convertido en un nmero por el procedimiento antes descrito
Por nuestra parte, con la clave privada -guardada a buen recaudo- que es bsicamente el
nmero d, slo tenemos que descifrar mediante la operacin
x = c^d modulo N
y ya est.
Para aplicar este algoritmo se necesita una herramienta que maneje enteros de longitud
arbitrariamente larga, incluso para nuestra versin de juguete. Mediante Python, que no
es demasiado eficiente, los clculos son:
Imaginemos que nuestro mensaje es una sola letra, la K de KRIPTOPOLIS, cuyo
cdigo es el 21, segn la tabla. La operacin de cifrado ser:
Cifrado
c = 21^e modulo N
c = 21^1045 modulo 197111 = 63202
Si tuviramos un nmero par de dgitos se podra presentar como 63 20 etc, es decir .J
(punto jota, etc)
Para descifrar slo tenemos que calcular:
Descifrado
x = c^d modulo N
x =63202^5821 modulo 197111 = 21 = K
Ahora viene la pregunta fundamental: Cmo es posible que la operacin de descifrado
deshaga lo que hace la de cifrado, siendo tan distintas? Y la respuesta es: Debido al
Pequeo Teorema de Fermat: Si a no es divisible por p, siendo p primo, entonces a^(p-
1) - 1 es divisible por p
Ah queda eso. Si no veis la conexin entre ambas cosas, tened paciencia, y seguid
estudiando, que mi trabajo ha terminado. Uf.
La fortaleza del sistema, como ya sabis, radica en que la factorizacin de un nmero N
grande requiere mucho tiempo de computacin, pero algunos opinan que los avances en
hardware y, sobre todo los clculos con GPUs en paralelo, van a traer pronto la muerte
de RSA. La gente malpensada cree que alguna Agencia ya lo ha conseguido, y se calla,
la muy zorra.

Imgenes:

You might also like