proyecto_criptografia

3
UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS 1 Implementaci´ on del Algoritmo Criptogr´ afico RSA en Lenguaje Python Luis Alejandro Sosa B. 1 - Sandra Ximena Rengifo A. 1 - Esteban Andr´ es Guerrero N. 1 Curso de Criptografia Especializaci´ on en Proyectos Inform´ aticos Facultad de Ingenier´ ıa Universidad Distrital Fancisco Jose de Caldas Bogota D.C. , Colombia [email protected] - [email protected] - esteban [email protected] AbstractEl presente articulo detalla el an´ alisis, dise ˜ no e implementacion del algoritmo RSA sobre lenguaje python Palabras claves —Cifrado, RSA, algoritmo de Euclides, Euler, primos,coprimos, modulo, clave publica, clave pri- vada. I. I NTRODUCCI ´ ON Seg´ un el Diccionario de la Real Academia, la palabra Criptograf´ ıa proviene del griego y su definicion es: ”Arte de escribir con clave secreta o de un modo enigm´ atico”. Obviamente la Criptograf´ ıa hace a˜ nos que dej´ o de ser un arte para convertirse en una t´ ecnica, o m´ as bien un conglomerado de t´ ecnicas, que tratan sobre la protecci´ on y el ocultamiento frente a observadores no autorizados de la informaci´ on. Entre las disciplinas que engloba cabe destacar la Teor´ ıa de la Informaci´ on, la Teor´ ıa de N´ umeros o Matem´ atica Discreta, que estudia las propiedades de los n´ umeros enteros, y la Complejidad Algor´ ıtmica. El m´ etodo de encriptado de datos conocido como algoritmo RSA, por los nombres de sus inventores (Rivest, Shamir y Adleman) es uno de los m´ as usados hoy para la transmisi´ on segura de datos a trav´ es de canales inseguros. El presente artic- ulo pretende detallar las bases mat´ ematicas del algoritmo hasta llegar a su implementaci´ on en Phython, uno de los lenguajes de programacion mas usados en el area de Seguridad. II. AN ´ ALISIS MATEM ´ ATICO El algoritmo RSA va a permitir establecer una comunicacion segura entre un emisor E y un receptor R. Cuando el emisor envia un mensaje atraves del canal este no puede asegurarse que el mensaje no sea interceptado por lo que si sucediera el atacante no podra conocer el significado del mensaje ya que este se encuentra cifrado y solo puede ser descifrado con las claves privadas del receptor R El procedimiento matematico empleado para implementar el algoritmos RSA fue el siguiente. 1 Estudiantes Especializacion en Proyectos Inform´ aticos A. Codificacion del mensaje Debido a que el algoritmo RSA esta basado en la teoria de matematicas discretas y la factorizacion de numeros primos, este solomanete puede cifrar numeros, ya que para este caso en particular se debe cifrar un mensaje en texto plano este debe ser traducido a numeros, es decir, debe ser codificado, para tal caso se utilizara el metodo de codificaci´ on ASCII. . B. Definici´ on de n Para definir n R debe escoger dos numeros primos p y q lo suficientemente grandes para generar dificultad de factorizacion donde: n = p * q (1) C. Definicion de la funcion multiplicativa de Euler φ(n) El receptor R obtiene el valor de la funci´ on multiplicativa de Euler φ(n) apartir de n calculado en el paso B, de tal manera que: φ(n)= φ(pq)= φ(p)φ(q) (2) y dado que p y q son primos entre s´ ı, y cada uno de ellos es primo, entonces: φ(n)=(p - 1)(q - 1) (3) D. Definicion de claves publicas y privadas El emisor E debe realizar el cifrado del mensaje con la clave publica e del receptor R y este a su vez lo descifra con su clave privada d. Para generar e el receptor del mensaje debe escojer un numero tal que: 1 <e<φ(n) (4) de tal manera que esea primo relativo con φ(n)

Upload: alejandro-sosa

Post on 29-Sep-2015

10 views

Category:

Documents


3 download

DESCRIPTION

El presente articulo detalla el analisis, diseño e implementacion del algoritmo RSA sobre lenguaje python

TRANSCRIPT

  • 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