Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP Final

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

Matemática discreta y

autómatas
Algoritmo
Criptográfico RSA

Santiago Cuiñas
22 de diciembre del 2017
Introducción

El trabajo se centra en el algoritmo RSA dando un breve resumen de su historia y utilidad para
luego centrarse en su funcionamiento relacionándolo con temas vistos en clase. Luego se
extendió la investigación hacia la aplicación de estos métodos en la firma digital.

El algoritmo RSA fue creado al final de los años 70 por tres investigadores del MIT Rivest, Shamir
y Adleman, de ahí las siglas del nombre. Es uno de los algoritmos de encriptación más usados y
además es el principal para garantizar la firma digital.

Este algoritmo funciona bajo el concepto de clave asimétrica, en el cual hay dos claves para
cifrar y descifrar, una pública de conocimiento y acceso general y una privada de carácter
personal. Este algoritmo garantiza que, con la tecnología actual, si un mensaje es cifrado con una
clave pública, sólo se podrá descifrar con una clave privada correspondiente siempre que estas
claves hayan sido generadas a partir de dos números primos mayores a 1024 bits. Esta garantía
proviene de la complejidad que tienen las máquinas actualmente para factorizar el producto de
dos números primos grandes.

A continuación se hace una demostración de cómo se elige el número de cifrado, las claves
necesarias, como se cifra y descifra utilizando los conceptos que se vieron en clase.

1
Pasos iniciales:

Para encriptar un mensaje con el algoritmo RSA se debe empezar con la elección de dos
números primos a los cuales denominaremos p y q, usualmente por cuestiones de seguridad se
eligen números primos de 1024 bit o superiores pero por practicidad elegiremos números
muchos más chicos.

Los números elegidos son:

p = 31
q = 17

Con los productos de estos números calculamos el valor de n

n = 31 * 17
n = 527

Luego pasamos a calcular φ(n) que es igual a (p-1) * (q-1)

φ(n) = (31-1) * (17-1)


φ(n) = 30 * 16
φ(n) = 480

2
Generación de claves:

Se deben generar dos claves, una pública a la cual denominaremos e y otra privada a la cual
llamaremos d. Se comienza escogiendo la clave pública, para esta se puede elegir cualquier
número mientras cumpla con dos condiciones:

- Debe ser mayor que 1 y menos que phi de n, 1<e<φ(n).


- El maximo comun divisor entre e y φ(n) debe ser 1, MCD [e, φ(n)] = 1

Entonces elegimos un número para e y comprobamos que cumplan las condiciones.

e = 127

480 = 127 * 3 + 99
127 = 99 * 1 + 28
99 = 28 * 3 + 15
28 = 15 * 1 + 13
15 = 13 * 1 + 2
13= 2 * 6 + 1
2=1*2+0

Se comprueba que 1<127<480 y MCD [127,480] = 1 son verdaderas, por lo cual la clave pública
es válida.

La clave privada (d) va a ser siempre el inverso multiplicativo de la clave pública módulo phi de n.
Esto también se puede expresar con una ecuación de congruencia lineal:
e*d≡ 1 mod φ(n). En nuestro ejemplo seria asi:

127 * d ≡ 1 mod 480

Esta ecuación de congruencia se puede plantear muy fácilmente como una ecuación diofántica:

127 * d + 480 * y = 1

Habiendo calculado antes el máximo común divisor entre 127 y 480 utilizaremos sus restos para
despejar la ecuación.

1 = 13 - 6 * 2
1 = 13 - 6 * (15 - 13)

3
1 = 13 * 7 - 15 * 6
1 = 7 * (28 - 15) - 15 * 6

1 = 28 * 7 - 15 * 13
1 = 28 * 7 - 13 * (99 - 28 * 3)
1 = 28 * 46 - 99 * 13
1 = 46 * (127 - 99) - 99 * 13
1 = 127 * 46 - 99 * 59
1 = 127 * 46 - 59 * (480 - 127 * 3)

1 = 127 * 223 - 480 * 59

De esta manera ya sabemos que el inverso multiplicativo de 127 módulo 480 es 223, es decir el
valor de la clave privada, d = 223.

Con esto ya tenemos generadas las claves, la pública (e) que va a ser conocida por todo el
mundo junto a n y la privada (d) que solo va a ser conocida solo por el receptor junto a p y q.

4
Cifrado y descifrado:

Una vez ya generadas las claves tenemos todo lo necesario para cifrar nuestro mensaje. La
fórmula para cifrarlo es: el mensaje que queremos cifrar elevado a la clave pública módulo n.
Me mod n.

Suponemos que queremos cifrar el mensaje 123:

123127 mod 527 = 30

Nuestro mensaje cifrado (C) es 30, para descifrarlo hacemos el mensaje cifrado elevado a la
clave privada módulo n.

Cd mod n.
30223 mod 527 = 123

Asi apartir de el mensaje cifrado y con nuestra clave privada podemos recuperar el mensaje
original.

De esta manera podemos cifrar el mensaje que queramos con la clave pública de alguien y
asegurarnos al 100% que solo la persona con la clave privada correspondiente pueda descifrarlo.

Este tipo de cifrado es el utilizado en firma digital, de una manera inversa al del ejemplo. Para
firma digital se cifra el código hash un archivo con una clave privada personal proporcionada por
un token y con la clave pública que me corresponde cualquiera puede comprobar que ese
archivo no se modificó desde que yo lo envie.

5
Firma Digital:

La firma digital es un mecanismo de criptografía asimétrica donde el receptor de un mensaje


firmado digitalmente puede confirmar la identidad del emisor y asegurarse de que el mensaje no
fue modificado desde la firma.

Al tener un mensaje lo primero que se debe hacer es aplicarle una función hash la cual con un
conjunto de cadenas A devuelve una cadena B, normalmente de longitud fija. Uno de los
algoritmos hash es MD5 (Message Digest 5) el cual siempre devuelve un valor de 128 bits en 32
símbolos hexadecimales como se ve en el siguiente ejemplo:

Este trabajo merece un 10 → 64e0fe616d5b312c74e3ecc3fe9eb7f8

Si se modifica la parte mas mínima en el mensaje la función MD5 devuelve un valor hash
totalmente distinto:

Este trabajo merece un 9 → 8c9822f0ece647254c00d22fd81d83c6

De esta manera al recibir un documento se puede aplicar el algoritmo MD5 y verificar si el hash
es igual a cuando fue firmado. Los pasos para conseguir este valor hash mediante el algoritmo
MD5 son:

Paso 1:

Tomando L como la cantidad de bits del mensaje se debe cumplir que:

L ≡ 448 mod 512

Si el mensaje no tiene los suficientes bits se le agrega un 1 seguido de tantos ceros necesarios
para que sea válida la congruencia.

Paso 2:
Se le agrega al final un entero de 64 que representa la longitud del mensaje y la concatenación
de bit resultante se puede en bloques de 512 bits sin problemas.

Paso 3:

6
Se utilizan 4 palabras públicas para cualquier persona que se utilizan para calcular el resumen
del mensaje. Sus valores son:
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10

Paso 4:
Se definen 4 funciones que toman “palabras” de 32 bits (cada bloque de 512 bits contiene 16
palabras de 32 bits) y devuelven una sola palabra de 32 bits. Las funciones son:

F(B,C,D) = (B∧C) ∨(¬B∧D)


G(B,C,D) = (B∧D)∨(C∧¬D)
H(B,C,D) = B⊕C⊕D
I(B,C,D) = C⊕(B∨¬D)

(⊕ = XOR, ∧ = AND, ∨ = OR, ¬ = NOT)

Estas Funciones se puede representar como compuertas lógicas:

7
Paso 5:
Cada bloque de 512, dividido en 16 palabras de 32 bits, es pasado por 64 operaciones (cada
palabra es pasada por cada función, 16 * 4 ). Al final de todas las operaciones nos quedaremos
con un valor hash de 128 bit o 32 símbolos hexadecimales correspondiente al mensaje, si este se
modifica no dará el mismo valor al volver a calcularse.

Una vez que ya tengamos calculado el hash de nuestro documento los firmaremos, cifrando esa
firma con el algoritmo RSA explicado anteriormente. Para hacerlo, al contrario de como
cifraríamos un mensaje normal, utilizaremos la clave privada para cifrar la firma y cualquier
receptor que tenga la clave pública correspondiente y el hash del archivo podrá corroborar la
identidad del emisor así mismo que el documento no haya sido modificado posteriormente de la
firma del mismo.

8
Bibliografía:

Serie Píldora formativa Thoth - Universidad Politécnica de Madrid


Criptografía digital: fundamentos y aplicaciones - J Pastor López - 1998
https://en.wikipedia.org/wiki/Digital_signature
https://www.geeksforgeeks.org/rsa-algorithm-cryptography/

También podría gustarte