Anda di halaman 1dari 10

Facultad de Ingeniera

Escuela de Ingeniera de Sistemas


Departamento de Sistemas Computacionales
Anlisis y Diseo de Algoritmos









Criptografa:
Descripcin e Implementacin en Pseudocdigo del
Mtodo RSA






Por:

Marianne Aymard V-20545483
Carlos Caldern V-22628599
Breytner Fernndez V-20851699





2014 Universidad de Los Andes Mrida, Venezuela
1. Criptografa
La historia de la criptografa es larga y abunda en ancdotas. El primer mtodo de
criptografa data del siglo V a.C, era conocido como "Esctala". El segundo criptosistema que
se conoce fue documentado por el historiador griego Polibio: un sistema de sustitucin
basado en la posicin de las letras en una tabla. Tambin los romanos utilizaron sistemas de
sustitucin, conocido actualmente como mtodo de Csar, porque Julio Csar lo emple en
sus campaas. En la figura 1 se muestra en qu consiste.


Figura 1. Codificacin por el Mtodo de Csar
A lo largo de la historia han surgido numerosos mtodos criptogrficos, entre los cuales
destacan:
1. El sistema de sustitucin polifactica de Leon Battista Alberti (1465)
2. El tratado sobre la escritura secreta de Blaise de Vigenre.
3. "Cryptomenytices et Cryptographiae" de Selenus.
4. El cifrado ADFGVX usado por los alemanes en La Primera Guerra Mundial.
5. El mtodo de Auguste Kerckhoffs.
6. El mtodo de Friedrich Kasiski.
7. La maquina Enigma usada por los alemanes en La Segunda Guerra Mundial.
8. El Estndar de Cifrado de Datos o DES.
9. Mtodo RSA.
2. Breve Descripcin del Algoritmo RSA de Criptografa
El algoritmo RSA es un sistema criptogrfico de clave pblica desarrollado por Ron
Rivest, Adi Shamir y Leonard Adlemanen en 1977; utilizado para cifrar y firmar digitalmente.
Un sistema de clave pblica consiste en que cada usuario receptor de mensajes posee dos
claves de cifrado, una pblica y otra privada. Para enviar un mensaje, el emisor busca la clave
pblica del receptor, cifra el mensaje con esa clave y lo enva. Cuando el mensaje cifrado llega
al receptor, este lo descifra usando su clave privada.
La idea del algoritmo RSA es que el emisor pueda enviar un mensaje secreto que solo el
receptor planeado pueda leer.
El algoritmo RSA consta de tres pasos:
1. Generacin de Claves:
1.1 El receptor elige aleatoriamente dos nmeros primos distintos y con longitud binaria
similar.
1.2 El receptor calcula = ; es el mdulo que se usa para ambas claves, pblica y
privada.
1.3 Se calcula () = ( 1)( 1), donde () se conoce como funcin de Euler.
1.4 Se escoge un entero positivo menor que () y que sea primo relativo de (); es el
exponente de la clave pblica.
1.5 Se determina un nmero entero que satisfaga . 1 mod (); es decir, que sea el
multiplicador modular inverso de ; es la clave privada.
La clave pblica es (, ), esto es, el mdulo y el exponente de cifrado. La clave privada es ,
esto es, el exponente de descifrado, que debe mantenerse en secreto. Luego de obtener y
, el receptor debe destruir , y () puesto que con cualquiera de estos valores, un
atacante podra calcular rpidamente la clave secreta y vulnerar el sistema criptogrfico.
2. Cifrado:
El receptor comunica su clave pblica (, ), al emisor y guarda la clave privada en secreto.
Cuando el emisor desea enviarle un mensaje , al receptor, debe convertir en un nmero
entero menor que , mediante un protocolo reversible conocido como padding
scheme (patrn de relleno). Luego debe cifrar el mensaje mediante el siguiente clculo.



RSA debe ser combinado con algn patrn de relleno, de otro modo el valor de puede
llevar a textos cifrados inseguros.
3. Desciframiento:
El receptor puede recuperar a partir de usando su exponente de clave privada , como
en la siguiente operacin.

mod = (

)

mod
Y al tener el valor de , puede recuperar el mensaje original invirtiendo el patrn de
relleno.
Seguridad:
La seguridad del criptosistema RSA est basado en dos problemas matemticos: el problema
de factorizar nmeros grandes y el problema RSA. El descifrado completo de un texto cifrado
con RSA es computacionalmente intratable, no se ha encontrado un algoritmo polinmico en
tiempo de ejecucin para ambos problemas.
Con la capacidad para recuperar factores primos, un atacante puede calcular el exponente
secreto desde una clave pblica (, ). Para conseguir esto, un atacante debe
factorizar en y , y calcular () = ( 1)( 1). Conociendo y () el atacante
puede usar el Algoritmo de Euclides Extendido para determinar . No se ha encontrado
ningn mtodo en tiempo polinmico para la factorizacin de enteros largos en sus factores
primos, lo que hace inviable completar el primer paso del proceso de ataque.

3. Bases Matemticas
En la figura 2, se muestra a grandes rasgos el proceso general de transmisin de un mensaje
cifrado usando el mtodo RSA (Es instructivo leer la descripcin al pie de la figura antes de
seguir avanzando). La idea fundamental del mtodo es el uso de dos enteros y tales que
(

mod .

Figura 2. Idea general del mtodo RSA. El receptor ofrece una llave pblica conformada por
dos enteros y . Quienquiera puede cifrar un mensaje usando esa llave. El emisor del
mensaje, convierte su mensaje original a un entero y lo cifra elevndolo al exponente ,
para obtener

. El receptor utiliza una clave nica y privada para descifrar el mensaje:


(

mod , que es el mensaje original.


Es obligatorio que esos enteros y tengan la siguiente propiedad: debe ser muy difcil
calcular la clave privada, conocida solo por el receptor- dados y . En la figura 3 se
muestra cmo opera matemticamente el proceso de descriframiento. Est claro que a
primera vista parece una ecuacin muy complicada, pero se presenta tempranamente para
motivar el estudio de los teoremas que la acompaan.

Figura 3. Demostracin matemtica del proceso de descifrado RSA junto con los teoremas
bsicos que lo permiten.
1. Pequeo Teorema de Fermat: Si es un nmero primo y , entonces

mod
Corolario: Si no divide a , entonces

(1)
1 mod
2. Pequeo Teorema de Fermat Mejorado: Sean y dos nmeros primos distintos
y sea = . Para todo tal que MCD(, ) = 1, se tiene

(1)(1)
1 mod
As, con el Pequeo Teorema de Fermat se puede demostrar el paso de (
(1)(1)
)


a (1)

en la ecuacin de la figura 3, que se repite a continuacin marcado en rojo.


(

=
1+()
=
1+(1)(1)
= (
(1)(1)
)

= (1)

= mod

El paso de
1+(1)(1)
a (
(1)(1)
)

es inmediato aplicando propiedades de la


exponenciacio n:
+
=

. Por cuestiones dida cticas, se sen ala abajo.


(

=
1+()
=
1+(1)(1)
= (
(1)(1)
)

= (1)

= mod
3. Funcin de Euler, definicin: Sean y dos nmeros primos distintos y sea = .
Se define la funcin de Euler como
() = ( 1)( 1)
Es importante recordar que una vez seleccionados y , () es un entero.
() se utiliza como se muestra:
(

=
1+()
=
1+(1)(1)
= (
(1)(1)
)

= (1)

= mod

4. Inverso Mdulo (): Si y () son primos relativos, es decir, MCD(, ()) = 1;
entonces, existe un inverso nico de que puede llamarse - , modulo (). Escrito de otra
manera,
= 1 mod ()
La ltima ecuacin, puede interpretarse diciendo que, al dividir por () se
obtiene como resto 1. En trminos del algoritmo de la divisin:
= 1 + (),
donde . Este resultado se utiliza en la ecuacin de inters como seala.
(

=
1+()
=
1+(1)(1)
= (
(1)(1)
)

= (1)

= mod

Adems, del Inverso Mdulo () puede obtenerse informacin sobre la escogencia
de para la llave pu blica: debe escogerse una clave pu blica tal que (, ()) =
1

Hasta este punto, ya se ha logrado justificar cada paso del proceso de desciframiento del
mensaje. A continuacin se presenta un teorema ms, y se introducen dos algoritmos (que
ms adelante se tratan con mayor profundidad) que permitirn hallar , la clave privada.
5. Teorema de Bzout: Si y () son enteros positivos, entonces existen enteros y
(que reciben el nombre de coeficientes de Bzout) tales que
MCD(, ()) = ().
Pero se haba dicho que MCD(, ()) = 1 ( y () son primos relativos), luego
() = 1 = 1 +()
Todo esto quiere decir que si se tiene un mtodo para hallar los coeficientes de
Bzout, se tendr un mtodo para hallar , la clave privada. Afortunadamente, el
Algoritmo de Euclides Extendido puede calcular tales coeficientes, cuyo pseudocdigo se
presentar ms adelante (puede ver un ejemplo de clculo en las diapositivas que acompaan
este informe).
Por ltimo, es importante tener en cuenta que para cifrar y descifrar el mensaje ,
este debe elevarse a alguna potencia, para el caso del cifrado, por ejemplo. Por lo general,
el exponente es un nmero bastante grande (puede llegar a los cientos de dgitos); as pues,
se hace necesario contar con un algoritmo eficiente para realizar exponenciacin. Se remite
al lector a revisar el ejemplo dado en las diapositivas que acompaan este informe para
observar un ejemplo. El algoritmo se dar ms adelante.

4. Pseudocdigos
A continuacin se presentan los pseudocdigos de los algoritmos que se utilizan en la
codificacin RSA. Un ejemplo de corrida en fro se encuentra en la dispositivas que
acompaan este informe.


(, ): Regresa el Mximo Comn Divisor entre dos nmeros enteros y utilizando
el Algoritmo de Euclides.




_(, ): Regresa el mximo comn divisor entre dos nmeros enteros y y
dos valores , tales que (, ) puede escribirse como combinacin lineal de ellos.
(, ) = +

(, ): regresa un nmero tal que a = 1 mod ; es decir, un multiplicador
modular inverso de . Se usa para obtener el valor de la clave privada , donde =
inverse(, ()); donde es la clave pblica y () la funcin de Euler







euclide_extend(a, b)
x = 1, xx = 0 , y = 0, yy = 1 ;
Mientras (b != 0) Hacer
q = a / b;
r = a % b;
a = b ;
b = r;
xx = x q*xx;
x = xx ;
yy = y - q*yy;
y = yy;
retorna (a, x, y) ;
inverse(a, n)
c, u, v = euclide_extend(a, n) ;
Si (c != 1) Entonces
retorna -1;
Caso Contrario
retorna u % n;
euclide(a, b)
Mientras (b !=0) Entonces
r = a % b;
a = b;
b = r;
retorna a;
_(, , ): Con esta funcin se obtiene el valor elevado al equivalente binario de .
Se usa para transformar un mensaje numrico en mensaje cifrado en el caso de que = , y
de mensaje cifrado a mensaje numrico cuando =


validar_mensaje(mensaje): agrega un '-' al final del mensaje si la longitud del mensaje es
impar. Si es par el mensaje queda igual. Ejemplo: mensaje = maria longitud: 5(impar)
mensaje vlido = maria-
Expo_Bin(x, k, n)
b = 1
Mientras (k>0) Hacer
Si (k % 2 != 0) Entonces
b = (b*x) % n;
x = (x*x) % n;
k = k / 2;
return(b);
validar_mensaje(mensaje)
mensaje_valido = mensaje;
Si (Longitud(mensaje) % 2 != 0) entonces
mensaje_valido += "-";
retorna mensaje_valido;

Referencias Bibliogrficas

Cormen, T., C. Leiserson, R. Rivest& C. Stein. (2009). Introduction to Algorithms. 3th Ed. The
MIT Press, Cambridge.
Cours de mathmatiques Premire anne. Universit Lille 1 & UniSciel. Disponible en:
http://exo7.emath.fr/cours/cours-exo7.pdf

K. H. Rosen (2012). Discrete Mathematics and its Applications. Sptima Edicin. McGraw Hill.
Nueva York, Estados Unidos.

R.L. Rivest, A. Shamir, y L. Adleman. (1978) A Method for Obtaining Digital Signatures and
Public-Key Cryptosystems. Massachusetts Institute of Technology. Estados Unidos.

Anda mungkin juga menyukai