Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Criptografa U.L.P.G.C.
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
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.
1
2
3
4
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.
Varios pueblos de la antigedad emplearon diversos mtodos de encriptacin/ desencriptacin
de escritos, como los Griegos, los Espartanos y los Hebreos, pero los rabes y los Indios fueron los
que mayor desarrollo lograron en este campo, destacndose un rabe, Muhammad al-Qalqashandi,
quien invent una tcnica para descifrar mensajes que todava se usa en la actualidad.
La criptografa se torn importante durante la Edad Media, cuando los gobiernos se
comunicaban con sus embajadores por medio de mensajes cifrados. En 1453, el gobierno Italiano
establece un grupo dedicado exclusivamente al estudio de la criptografa, con el fin de perfeccionar
los mtodos de encriptacin de sus mensajes, as como para descifrar los de sus enemigos.
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.
El desarrollo de los computadores marc otro hito en el desarrollo de la criptografa, al
permitir efectuar complejos clculos matemticos en corto tiempo, tanto para encriptar, como para
descifrar mensajes.
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 RijndaelAES, 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.
La criptografa asimtrica, que emplea un esquema de llave pblica y llave privada. La
informacin se encripta con la llave pblica, y se desencripta con la llave privada. No presenta el
problema de transmisin de la llave que tiene la criptografa simtrica, ya que la llave pblica no
sirve para desencriptar la informacin.
Los sistemas de criptografa asimtrica incluyen el DH (Diffie & Hellman), el ElGamal,el
DSA (Digital Signature Algorithm), el Merkle-Hellman, el Chor-Rivest , el LUC, el McEliece, y
finalmente el RSA (Rivest, Shamir & Adleman) que es el ms ampliamente usado y objeto de
estudio de este trabajo.
Tanto la criptografa simtrica como la asimtrica basan su fortaleza en problemas
matemticos difciles de resolver, como por ejemplo la factorizacin de nmeros enteros grandes.
Sin embargo y debido al avance en la potencia de computacin, se estima hoy en da que solamente
ofrecen muy buena seguridad las llaves de 2048 bits en el caso de RSA y 256 bits para AES.
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.
2. Calculamos la funcin de totient de n: totient(n) = (p-1)*(q-1)
3. Elegimos un entero e, tal que 1 < e < totient(n) y que ademas sea coprimo con totient(n).
4. Calculamos un d, tal que d * e = 1 mod totient(n).
5. La clave pblica es (n,e) y la privada (n,d).
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.
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
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
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:
* Descripcin:
* Autores:
*
* Entidad:
*/
RSA
Implementacin del algoritmo de clave pblica RSA
David Jesus Horat Flotats
Jorge Luis Caizales Daz
Universidad de Las Palmas de Gran Canaria
/**
* 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];
for(i=0; i<bigdigitos.length; i++) {
temp[0] = digitos[i];
bigdigitos[i] = new BigInteger(temp);
}
BigInteger[] encriptado = new BigInteger[bigdigitos.length];
for(i=0; i<bigdigitos.length; i++)
encriptado[i] = bigdigitos[i].modPow(e,n);
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];
for(i=0; i<desencriptado.length; i++)
desencriptado[i] = encriptado[i].modPow(d,n);
char[] charArray = new char[desencriptado.length];
for(i=0; i<charArray.length; i++)
charArray[i] = (char) (desencriptado[i].intValue());
}
return(new String(charArray));
public
public
public
public
public
public
BigInteger
BigInteger
BigInteger
BigInteger
BigInteger
BigInteger
damep() {return(p);}
dameq() {return(q);}
dametotient() {return(totient);}
damen() {return(n);}
damee() {return(e);}
damed() {return(d);}
}
System.out.println( "]" ) ;
System.out.println( "" ) ;
10
11
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