algoritmo rsa
TRANSCRIPT
RSA
En criptografía, RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave pública desarrollado en 1977.
Es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente.
Introducción.
La seguridad de este algoritmo radica en el problema de la factorización dé números enteros.
Los mensajes enviados se representan mediante números, y el funcionamiento se basa en el producto, conocido, de dos números primos grandes elegidos al azar y mantenidos en secreto.
Intreducción.
Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado: una pública y otra privada.
Se cree que RSA será seguro mientras no se conozcan formas rápidas de descomponer un número grande en producto de primos.
Técnicamente, Bob envía a Alicia un «mensaje llano» ”M” en forma de un número ”m” menor que otro número ”n”, mediante un protocolo reversible conocido como padding scheme («patrón de relleno»). A continuación genera el «mensaje cifrado» mediante la siguiente operación:
donde ”e” es la clave pública de Alicia.
Ahora Alicia descifra el mensaje en clave “c” mediante la operación inversa dada por
donde ”d” es la clave privada que solo Alicia conoce.
Ejemplo
En el siguiente ejemplo, supongamos que la persona A quiere hacer una clave pública, y que persona B quiere usar esa tecla para enviar un mensaje. En este ejemplo, vamos a suponer que el mensaje A envía a B es sólo un número. Suponemos que A y B han acordado en un método para codificar el texto como números. Estos son los pasos:
1. La persona A selecciona dos números primos. Usaremos p = 23 y q = 41 para el ejemplo, pero hay que tener en cuenta que el número real de la persona A debe ser mucho más grande.
2. La persona A multiplica p y q juntos para conseguir pq = (23) (41) = 943. 943 es la "clave pública", que le dice a la persona B (y en el resto del mundo, si lo desea).
Ejemplo
3. La persona A también elige otro número e que debe ser primos entre sí (p - 1) (q - 1). En este caso, (p - 1) (q - 1) = (22) (40) = 880, por lo que e = 7 está muy bien. e es también forma parte de la clave pública, por lo que B también se cuenta el valor de e.
4. Ahora B sabe lo suficiente para codificar un mensaje a A. Supongamos, que el mensaje es el numero M = 35.
5. B calcula el valor de C = Me (mod N) = 357 (mod 943) .
6. 357 = 64,339’296,875 y 64,339’296,875 (mod 943) = 545. El número 545 es la codificación que B envía a A.
Ejemplo
7. Ahora A quiere descifrar 545. Para ello, tiene que encontrar un número tal que ed = 1 (mod (p - 1) (q - 1)), o en este caso, de tal manera que 7d = 1 (mod 880). La solución es d = 503, desde el 7*503 = 3521 = 4 (880) + 1 = 1 (mod 880).
8. Para encontrar la decodificación, A debe calcular Cd (N mod) = 545503 (mod 943). Este parece que será un cálculo horrible, y al principio parece que lo es, pero hay que darse cuenta que 503 = 256 + 128 + 64 + 32 + 16 + 4 + 2 + 1 (esto es sólo la expansión binaria de 503). Así que esto significa que:
545503 = 545256 + 128 + 64 + 32 + 16 + 4 + 2 + 1 = 545256 545128 · · · 5451.
Ejemplo
Pero ya que sólo importa el resultado (mod 943), podemos calcular todo el parcial resultados en ese módulo, y elevando al cuadrado repetido de 545, podemos obtener toda los exponentes que son potencias de 2.
Por ejemplo, 5452 (MOD 943) = 545 · 545 = 297,025 (mod 943) = 923. Entonces cuadrado de nuevo: 5454 (mod 943) = (5452)2(mod 943) = 923 · 923 = 851 929 (mod 943) = 400, y así sucesivamente. Podremos obtener:
Ejemplo
Podríamos obtener:
Así que el resultado que queremos es:
545503 (mod 943) = 324 · 18 · 215 · 795 · 857 · 400 · 923 · 545 (mod 943) = 35.
El cálculo de esto es tedioso (pero simple para una computadora) cálculo, A puede decodificar el mensaje de B y obtener el mensaje original N = 35.
5451 (mod 943) = 545
5458 (mod 943) = 633
54564 (mod 943) = 215
5452 (mod 943) = 923
54516 (mod 943) = 857
545128 (mod 943) = 18
5454 (mod 943) = 400
54532 (mod 943) = 795
545256 (mod 943) = 324