Documente Academic
Documente Profesional
Documente Cultură
NDICE
Introduccin..........................................................................................................................................2
Un poco de historia...............................................................................................................................3
El pasado..........................................................................................................................................3
El Presente....................................................................................................................................... 4
Funcionamiento del RSA..................................................................................................................... 5
Generacin de claves....................................................................................................................... 5
Encriptacin..................................................................................................................................... 6
Desencriptacin............................................................................................................................... 6
Ataques al RSA................................................................................................................................6
Implementacin.................................................................................................................................... 8
Cdigo fuente...................................................................................................................................8
Traza del programa........................................................................................................................ 11
Bibliografa.........................................................................................................................................12
Libros............................................................................................................................................. 12
Webs.............................................................................................................................................. 12
1
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Introduccin
El objetivo de esta prctica es el anlisis y la implementacin del algoritmo de clave pblica
RSA. Para ello estudiaremos un poco la historia del criptoanlisis y luego pasaremos a estudiar
directamente este algoritmo. La implementacin se realizar en Java 1.5.01 de Sun Microsystems2
usando como entorno integrado de desarrollo Eclipse 3.03. Aunque para comprobar la validez de
nuestro programa y para probar otros entornos de desarrollo, tambin usamos NetBeans 4.04, un
entorno diseado exclusivamente para Java.
2
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Un poco de historia
El pasado
La primera aplicacin conocida de la criptografa se remonta a 4000 aos atrs, cuando los
Egipcios utilizaban jeroglficos crpticos para narrar la vida y hazaas de sus faraones. La
encriptacin no se empleaba para esconder el significado del texto sino para darle un carcter ms
solemne.
En la antigua China, el carcter ideogrfico del idioma serva para esconder el significado de
las palabras, aunque no parece que esta particularidad se hubiera empleado para
encriptar/desencriptar mensajes.
Con el tiempo, adems de los mtodos manuales aparecieron mquinas simples, como la
rueda de Thomas Jefferson. La llegada del telgrafo signific un importante avance en la
criptografa, al generalizarse el uso de mquinas electromecnicas para la encriptacin de mensajes.
Las dos guerras mundiales tambin impulsaron significativamente el avance de la criptografa y del
criptoanlisis.
3
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
El Presente
El fruto de las funciones criptogrficas inventadas en las ltimas tres dcadas se observa a
diario en el desarrollo de las firmas digitales, los certificados digitales, los sistemas de autenticacin
y el correo electrnico seguro. En la actualidad se emplean dos tipos de criptografa:
La criptografa simtrica, en la cual se usa la misma contrasea o llave para encriptar y para
desencriptar la informacin. Entre los sistemas de criptografa simtrica, podemos mencionar
Blowfish, IDEA (International Data Encryption Algorithm), FEAL (Fast Data Encipherment
Algorithm), DES (Data Encryption Standard) y los ms comunes que son el 3-DES, y el Rijndael-
AES, adoptado en 2000.
El usar la misma llave para encriptar y para desencriptar es un problema a la hora de enviar
datos, ya que el remitente debe enviar previamente la llave al destinatario para que ste pueda
desencriptar la informacin, y debe hacerlo por un canal seguro. Por lo tanto la criptografa
simtrica se emplea especialmente para almacenamiento seguro de datos (solamente una persona
necesita la llave). Para envo de datos es preferible la criptografa asimtrica.
4
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Generacin de claves
Supongamos que Alicia desea permitir que Benito le mande un mensaje cifrado sobre un
canal inseguro. Lo primero que ha de hacer es generar los pares de clave pblica (n,e) y privada
(n,d).
1. Elegimos dos nmeros muy grandes p y q (del orden de 300 cifras) que sean diferentes y
totalmente independientes el uno del otro. Calculamos n = p * q.
3. Elegimos un entero e, tal que 1 < e < totient(n) y que ademas sea coprimo con totient(n).
Alicia le transmite su clave pblica a Benito y conserva la clave privada en secreto. Los
valores p y q son muy sensibles, ya que son la descomposicin en factores primos de n y los que
dieron lugar a e y d. Generalmente destruidos, aunque pueden conservarse en secreto, junto con la
clave privada, para acelerar el proceso de desencriptacin usando el Teorema del Resto Chino5.
5
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Encriptacin
Ahora supongamos que Benito desea mandarle un mensaje a Alicia. Lo nico que tendr que
hacer es consultar la clave pblica de Alicia, dividir el mensaje que quiere enviarle, asignarle un
alfabeto numrico a cada trozo y calcular para cada divisin: c = ne mod n.
Desencriptacin
Con el mensaje que le ha llegado a Alicia, lo que tiene que hacer es dividirlo y usar su clave
privada para calcular: n = cd mod n.
Ataques al RSA
Ataque a mdulo comn: Una posible implementacin de RSA consiste en asignar el mismo
mdulo n a distintos usuarios, pero distintos valores para los exponentes e y d. Esto tiene el fallo de
que si el mismo mensaje se cifra con distintos exponentes y el mismo mdulo y ambos exponentes
son primos entre s (y generalmente lo sern), el texto en claro puede recuperarse sin ninguno de los
exponentes privados6. Sea P el texto en claro. Sean e1 y e2 los exponentes pblicos (claves de
cifrado) y n el mdulo. Los textos cifrados son: C1=Pe1 mod n y C2=Pe2 mod n. El criptoanalista
tiene acceso a C1, C2, e1, e2 y n. As es como recupera P: Al ser e1 y e2 primos entre si, existen
enteros r y s tales que r.e1+ s.e2 = 1. Supongamos sin prdida de generalidad que r es negativo
(alguno de los dos ha de serlo) entonces puede calcularse el inverso de C1 y se tendr que:
Ataque basado en un exponente pblico "bajo": Aunque un exponente bajo acelera el cifrado,
tambin lo hace ms inseguro. Si se encriptan e (e+1)/2 mensajes linealmente dependientes con
diferentes claves pblicas y el mismo valor de e hay un ataque contra el sistema7. Si los mensajes
son idnticos entonces es suficiente con e mensajes. La solucin ms sencilla a este problema es
aadir a los mensajes valores aleatorios independientes, PGP por ejemplo hace esto de modo que un
mismo mensaje no se cifrar dos veces de la misma manera.
6 G.J. Simmons, "A 'Weak' Privacy Protocol Using the RSA Cryptosystem.", Cryptologia, v.7, n.2, Abr 1983
7 J. Hastad, "On using RSA with Low Exponents in a Public Key Network", Advances in Cryptology, CRYPTO '85
Proceedings, Springer Verlag 1986
6
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Ataque basado en un exponente privado "bajo": Otro ataque8, permite recuperar d cuando ste
no supera un cuarto de n y e es menor que n. Esto ocurre raramente si e se elige al azar. El
fundamento matemtico del ataque es la representacin de los nmeros racionales como fracciones
continuas finitas.
8 M.J. Wiener, "Cryptanalysis of Short RSA Secret Exponents", IEEE Transactions on Information Theory, v.36, n.3,
May 1990
7
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Implementacin
Para implementar este algoritmo hemos decidido hacerlo todo en una sla clase, incluido el
programa de prueba que estar en el mtodo main de la clase. En caso de querer usarla en proyectos
futuros, con quitar el main se tiene y tambin sera aconsejable destruir los valores p y q despus de
generar las claves pblica y privada.
Cdigo fuente
import java.math.BigInteger ;
import java.util.* ;
import java.io.* ;
/*
* Clase: RSA
* Descripcin: Implementacin del algoritmo de clave pblica RSA
* Autores: David Jesus Horat Flotats
* Jorge Luis Caizales Daz
* Entidad: Universidad de Las Palmas de Gran Canaria
*/
8
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
/**
* Encripta el texto usando la clave pblica.
*
* @param mensaje Ristra que contiene el mensaje a encriptar.
* @return El mensaje cifrado como un vector de BigIntegers.
*/
public BigInteger[] encripta(String mensaje) {
int i ;
byte[] temp = new byte[1];
byte[] digitos = mensaje.getBytes();
BigInteger[] bigdigitos = new BigInteger[digitos.length];
return(encriptado);
}
/**
* Desencripta el texto cifrado usando la clave privada
*
* @param encrypted BigInteger array containing the ciphertext
to be decrypted.
* @return The decrypted plaintext.
*/
public String desencripta(BigInteger[] encriptado) {
int i ;
BigInteger[] desencriptado = new BigInteger[encriptado.length];
return(new String(charArray));
}
9
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
if( i != ciphertext.length - 1 )
System.out.print( " " ) ;
}
System.out.println( "]" ) ;
System.out.println( "" ) ;
10
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
p: [D1AAA6FE79B4DD2B]
q: [F0062810287E3A85]
Texto a encriptar:
esto es una prueba para el RSA
Texto encriptado:
[14D9A38D1F97129E83F76B1ED133BE15 89D92914F7937FC1A55298A9225221E6
963CFC27B8A5481CB41037A83512945A 943A28D621C8A572D582693BAF1328A3
862863B02FA92A6D71F35441C6BFDEB 14D9A38D1F97129E83F76B1ED133BE15
89D92914F7937FC1A55298A9225221E6 862863B02FA92A6D71F35441C6BFDEB
1390740563F9DDB1612F135F3755EA46 46294A4D33C5C42304510BCEDC9F6B9B
4CDF839D7363C9EB1EFC36655801D321 862863B02FA92A6D71F35441C6BFDEB
56D8188F0B496F590A5E77845A339C0E 3E91E0F8B6C3D931B169E7224B3EC4DA
1390740563F9DDB1612F135F3755EA46 14D9A38D1F97129E83F76B1ED133BE15
3915C6448A6207BD4AB2628B289D8B77 4CDF839D7363C9EB1EFC36655801D321
862863B02FA92A6D71F35441C6BFDEB 56D8188F0B496F590A5E77845A339C0E
4CDF839D7363C9EB1EFC36655801D321 3E91E0F8B6C3D931B169E7224B3EC4DA
4CDF839D7363C9EB1EFC36655801D321 862863B02FA92A6D71F35441C6BFDEB
14D9A38D1F97129E83F76B1ED133BE15 AE66BF15F1F70F2DE0377B6E264BD36D
862863B02FA92A6D71F35441C6BFDEB 8FF348A92A8105F4339EDDA45CA8BFE3
BC913C9CB18152A231B7399047FE6A78 5FC98AE889EB283DACDD233B5601542B]
11
Anlisis e implementacin del RSA David Jess Horat Flotats
Criptografa U.L.P.G.C. Jorge Luis Caizales Daz
Bibliografa
Libros
1. Handbook of applied cryptography / Alfred J. Menezes, Paul C. van Oorschot, Scott A.
Vanstone. -- Boca Ratn [etc.] : CRC, 1996
2. Public-key cryptography : state of the art and future directions : E.I.S.S. workshop
Oberwolfach, Germany, July 3-6, 1991 final report. -- Berlin : Springer, 1992
3. Computer networks / Andrew S. Tanenbaum. -- 4th. ed. -- Englewood Cliffs (New Jersey) :
Prentice Hall, 2003
Webs
http://en.wikipedia.org/wiki/RSA
http://www.matematicas.net/paraiso/cripto.php?id=rsa1
http://www.matematicas.net/paraiso/cripto.php?id=rsa2
http://www.matematicas.net/paraiso/cripto.php?id=rsa3
http://webs.ono.com/usr005/jsuarez/rsa1.html
http://www.htmlweb.net/seguridad/cripto/cripto_10.html
http://www.rsasecurity.com/rsalabs/node.asp?id=2146
http://es.tldp.org/Manuales-LuCAS/doc-unixsec/unixsec-html/node316.html
12