Implementaci´on del Algoritmo Criptogr´afico RSA en Lenguaje Python

2
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 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 —ocultamiento frente a observadores no autorizados— de la informaci´ on. Entre las disciplinas que engloba cabe destacar la Teor´ ıa de la Informacion, la Teor´ ıa de Numeros —o Matem´ atica Discreta, que estudia las propiedades de los n´ umeros enteros—, y la Complejidad Algor´ ıtmica. 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. 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 el algoritmo normalmente hace uso del codigo ASCII 1 Estudiantes Especializacion en Proyectos Inform´ aticos La lista contiene 26 elementos que indican las letras del abecedario, pero debido a que la posicion en una lista comienza en cero(0) la lista ir´ a de la posicion 0 a la posicion 25. 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) a partir de la porcion de la clave publica e calculamos la porcion de clave privada d la cual representa el inverso de e en modulo φ(n) quedando: d =(e -1 ) φ (n) (5)

description

El presente articulo detalla el an´alisis, dise ˜no eimplementacion del algoritmo RSA sobre lenguaje python

Transcript of Implementaci´on del Algoritmo Criptogr´afico RSA en Lenguaje Python

  • 1Implementacion del Algoritmo Criptografico RSAen Lenguaje Python

    Luis Alejandro Sosa B.1 - Sandra Ximena Rengifo A.1 - Esteban Andres Guerrero N.1

    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 ocultamientofrente a observadores no autorizados de la informacion.Entre las 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.

    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.

    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 el algoritmo normalmente hace uso del codigoASCII

    1Estudiantes Especializacion en Proyectos Informaticos

    La lista contiene 26 elementos que indican las letrasdel abecedario, pero debido a que la posicion en una listacomienza en cero(0) la lista ira de la posicion 0 a la posicion25.

    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)a partir de la porcion de la clave publica e calculamos la

    porcion de clave privada d la cual representa el inverso de een modulo (n) quedando:

    d = (e1)(n) (5)

  • 2Calculados 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 claves

    e y d, genera q y p apartir de la funcion propia de pythongenprime(bitn) la cual genera nuemeros primos de ciertotamano de bits,n ,(n) y la clave privada d apartir de lafuncion inversemod para obtener el inverso.

    Todas estas funciones fueron generadas a partir de unallamada al modulo rsamath creado por un colaborador depython.

    def genclaves(bitn):p = genprime(bitn)q = genprime(bitn)n = p * qphi = (p - 1) * (q - 1)\seleccionar ewhile (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 cambiandoa la clave 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 = Cadena = Cadena.replace(","," ")for i in Cadena.split(): .

    decod += chr(int(i))return decod

    IntroduccinAnlisis MatemticoCodificacion del mensajeDefinicin de n Definicion de la funcion multiplicativa de Euler (n)Definicion de claves publicas y privadasCifrado con clave pblicaDescifrado con clave privada

    Implementacion del Algoritmo en PythonCodificacon de Texto planoDefinicion de Claves Publicas y privadasProcedimiento de cifradoProcedimiento de descifradoDecodificacin a Texto Plano