proyecto_criptografia
DESCRIPTION
El presente articulo detalla el analisis, diseño e implementacion del algoritmo RSA sobre lenguaje pythonTRANSCRIPT
-
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS 1
Implementacion del Algoritmo Criptografico RSAen Lenguaje Python
Luis Alejandro Sosa B.1 - Sandra Ximena Rengifo A.1 - Esteban Andres Guerrero N.1
Curso de CriptografiaEspecializacion en Proyectos Informaticos
Facultad de IngenieraUniversidad Distrital Fancisco Jose de Caldas
Bogota D.C. , [email protected] - [email protected] - esteban [email protected]
AbstractEl presente articulo detalla el analisis, diseno eimplementacion del algoritmo RSA sobre lenguaje python
Palabras clavesCifrado, RSA, algoritmo de Euclides,Euler, primos,coprimos, modulo, clave publica, clave pri-vada.
I. INTRODUCCION
Segun el Diccionario de la Real Academia, la palabraCriptografa proviene del griego y su definicion es: Artede escribir con clave secreta o de un modo enigmatico.Obviamente la Criptografa hace anos que dejo de ser un artepara convertirse en una tecnica, o mas bien un conglomeradode tecnicas, que tratan sobre la proteccion y el ocultamientofrente a observadores no autorizados de la informacion. Entrelas disciplinas que engloba cabe destacar la Teora de laInformacion, la Teora de Numeros o Matematica Discreta,que estudia las propiedades de los numeros enteros, y laComplejidad Algortmica.
El metodo de encriptado de datos conocido como algoritmoRSA, por los nombres de sus inventores (Rivest, Shamir yAdleman) es uno de los mas usados hoy para la transmisionsegura de datos a traves de canales inseguros. El presente artic-ulo pretende detallar las bases matematicas del algoritmo hastallegar a su implementacion en Phython, uno de los lenguajesde programacion mas usados en el area de Seguridad.
II. ANALISIS MATEMATICO
El algoritmo RSA va a permitir establecer una comunicacionsegura entre un emisor E y un receptor R. Cuando el emisorenvia un mensaje atraves del canal este no puede asegurarseque el mensaje no sea interceptado por lo que si sucediera elatacante no podra conocer el significado del mensaje ya queeste se encuentra cifrado y solo puede ser descifrado con lasclaves privadas del receptor R
El procedimiento matematico empleado para implementarel algoritmos RSA fue el siguiente.
1Estudiantes Especializacion en Proyectos Informaticos
A. Codificacion del mensaje
Debido a que el algoritmo RSA esta basado en la teoria dematematicas discretas y la factorizacion de numeros primos,este solomanete puede cifrar numeros, ya que para este casoen particular se debe cifrar un mensaje en texto plano estedebe ser traducido a numeros, es decir, debe ser codificado,para tal caso se utilizara el metodo de codificacion ASCII. .
B. Definicion de n
Para definir n R debe escoger dos numeros primos py q lo suficientemente grandes para generar dificultad defactorizacion donde:
n = p q (1)
C. Definicion de la funcion multiplicativa de Euler (n)
El receptor R obtiene el valor de la funcion multiplicativade Euler (n) apartir de n calculado en el paso B, de talmanera que:
(n) = (pq) = (p)(q) (2)
y dado que p y q son primos entre s, y cada uno de ellos esprimo, entonces:
(n) = (p 1)(q 1) (3)
D. Definicion de claves publicas y privadas
El emisor E debe realizar el cifrado del mensaje con laclave publica e del receptor R y este a su vez lo descifra consu clave privada d.
Para generar e el receptor del mensaje debe escojer unnumero tal que:
1 < e < (n) (4)
de tal manera que esea primo relativo con (n)
-
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS 2
a partir de la porcion de la clave publica e calculamos laporcion de clave privada d la cual representa el inverso de een modulo (n) quedando:
d = (e1)(n) (5)
Calculados e y d las claves publicas y privadas quedarandefinidas por los pares de numeros (e, n) y (d, n) as:
ClavePublica = (e, n) (6)
ClavePrivada = (d, n) (7)
E. Cifrado con clave publica
Al tener definida la clave publica se puede pasar a realizar elcifrado del mensaje m que E le envia a R, para ello el mensajeluego de ser codificado se cifra elevandolo a la potencia e enmodulo n asi:
mcifrado = (me)n (8)
F. Descifrado con clave privada
Como lo indica la ecuacion (6) la porcion de la claveprivada d es el inverso de e, por eso cuando R recibe elmensaje cifrado de E, lo descifra utilizando el inverso d:
mdescifrado = ((mcifrado)d)n (9)
y reemplazando 9 :
mdescifrado = ((me)d)n = (m
ed)n (10)
y como e y d son inversos en modulo (n) entonces
mdescifrado = (med)n = (m)n (11)
En resumen R ya puede conocer el mensaje enviado por E
III. IMPLEMENTACION DEL ALGORITMO EN PYTHON
A. Codificacon de Texto plano
Para realizar la codificacion de la cadena de texto plano quese desea cifrar se utilizo la funcion ord(), la cual convierteun caracter unicode a su equivalente en ASCII, para realizarla codificacion del texto completo se creo una funcion querealiza el procedimiento recorriendo cada caracter de maneraque codifique el texto entero, esta funcion se definio comotext2ascii para luego de solicitar el texto llamarla y realizarla codificacion correspondiente
def text2ascii(Cadena):cod = for i in Cadena:
cod += str(ord(i)) + ,return cod
B. Definicion de Claves Publicas y privadas
Para la generacion de claves publicas y privadas se creo lafuncion genclaves(bitn) la cual ademas de calcular la clavese y d, genera q y p apartir de la funcion genprime(bitn)1 lacual genera nuemeros primos de cierto tamano de bits,n ,(n)y la clave privada d apartir de la funcion inverse mod paraobtener el inverso.
Todas estas funciones fueron generadas a partir de unallamada al modulo rsa math
def genclaves(bitn):p = genprime(bitn)q = genprime(bitn)n = p * qphi = (p - 1) * (q - 1)e=65537while (phi%e) == 0:e=genprime(17)
d = inverse_mod(e, phi)
public = (n, e)private = (n, d)return public, private
C. Procedimiento de cifrado
Para el procedimiento de cirfrado se creo la fun-cion cifrar(n, public) la cual hace uso de la funcionmodex(base, exponente,modulo) tambien llamada desde elmodulo rsamath.
def cifrar(m, public):c = modex(m, public[1], public[0])return c
D. Procedimiento de descifrado
Para el procedimiento de descifrado se utiliza la mismafuncion del paso anterior solamente que que se cambia dela clave publica a la privada:
def descifrar(c, private):p = modex(c, private[1], private[0])return p
E. Decodificacion a Texto Plano
Para realizar la decodificacion y poder tener el texto enclaro y entendible se hizo uso de la funcion chr() la cual esla inversa de la funcion ord() que se utilizo para codificarlaquedando:
def ascii2text(Cadena):decod = for i in Cadena.split(): .
decod += chr(int(i))return decod
1La funcion genprime(bitn) se genera apartir del test de primalidad defermat
-
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS 3
IV. COMO SE ATACA EL ALGORITMOSi un atacante intercepta el mensaje cifrado, no puede
ejecutar la operacion de descifrado porque no conoce d.La unica manera en que pudiera conocerla es calculandolacomo la inversa de e (que es publica) en modulo (n), yeso no es posible porque no conoce (n). Aun as, se podrapensar que no es difcil conocer (n) dado n (que es publico):
se descompone n en factores primos, lo que dara n = pq,y se calcula (n) como (p 1)(q 1). El problema estaen que descomponer un numero en factores primos es unalgoritmo que se supone NP-completo (o sea, su complejidades exponencial con el tamanodel numero), y actualmente ladescomposicion de un numero de 200 cifras llevara del ordende un millon de anos de calculo, incluso el computador maspotente.
La clave de todo este algoritmo esta precisamente aqu:calcular un numero dada su descomposicion en factoresprimos es trivial, pues basta multiplicar los factores. Sinembargo, hallar los factores dado el numero es costossimocomputacionalmente.
Otras alternativas mas eficiente para atacar exitosamente elalgoritmo son:
A. Ataque al secreto mediante cifrado cclico
Este ataque consiste en encontrar el numero en claroN(Mensaje codificado) sin necesidad de conocer d, la claveprivada del receptor. Como C = Nemodn, se realizan cifradossucesivos de los criptogramas Ci resultantes con la mismaclave publica hasta obtener nuevamente el cifrado C original.
Ci = Ce( i 1)mod(n) (12)
Con(i = 1, 2, 3, 4...) (13)
yC0 = C (14)
Si en el cifrado iesimo se encuentra el criptograma Cinicial, entonces es obvio que el cifrado anterior (i-1) serael numero buscado. Esto se debe a que RSA es un grupomutiplicativo. Para evitarlo hay que usar primos seguros deforma que los subgrupos de trabajo sean lo suficientementealtos.
Ejemplo
Sea p = 13, q = 19, n = 247, (n) = 216, e = 29 (d =149, no conocido) El numero a cifrar sera M = 123de donde C = 12329 mod 247 = 119
iCi (15)
i = 0C0 = 119 (16)
i = 1C1 = 11929mod247 = 6 (17)
i = 2C2 = 629mod247 = 93 (18)
i = 3C3 = 9329mod247 = 175 (19)
i = 4C4 = 17529mod247 = 54 (20)
i = 5C5 = 5429mod247 = 123 (21)
i = 6C6 = 12329mod247 = 119 (22)
El ataque a dado resultado rapidamente: como se haobtenido otra vez el criptograma C = 119, es obvio que elpaso anterior con C = 123 se corresponda con el texto enclaro.
B. La paradoja del cumpleanos
Este algoritmo fue propuesto por Merkle y Hellman en 1981y consiste en:
El atacante elige dos numeros aleatorios distintos i, jque esten contenidos en n.Ademas se elige un mensajeo numero N.
Para i = i+1 y para j = j +1 calcula N i mod n y N j
mod n. Cuando encuentra una coincidencia de igual resultado
de cifra para una pareja (i, j), sera capaz de encontrar d
V. CODIGO RSA EN LENGUAJE PYTHON
El codigo de implementacion RSA en Python se puededescargar atraves del siguiente enlace:
Codigo Implementacion RSA en python
REFERENCES[1] Seguridad Informatica y Criptografa v 4.1, de marzo de 2006. Dr. Jorge
Ramio Aguirre - Universidad Politecnica de Madrid. Capitulo 14, ElAlgoritmo RSA
[2] Guia Matematicas para computacion, Curso Ingeniera en Informatica,Universidad de Valencia, Capitulo 12
https://www.dropbox.com/s/fwv0ch4l1ybsk0l/CodigoRSAPython.rtf?dl=0IntroduccinAnlisis MatemticoCodificacion del mensajeDefinicin de n Definicion de la funcion multiplicativa de Euler (n)Definicion de claves publicas y privadasCifrado con clave pblicaDescifrado con clave privadaImplementacion del Algoritmo en PythonCodificacon de Texto planoDefinicion de Claves Publicas y privadasProcedimiento de cifradoProcedimiento de descifradoDecodificacin a Texto PlanoComo se ataca el algoritmo Ataque al secreto mediante cifrado cclicoLa paradoja del cumpleaosCodigo RSA en lenguaje PythonReferences