Revista Digital de Ciencias Bezmiliana ISSN:1989-497X

Criptografía asimétrica


La criptografía asimétrica consiste en utilzar dos claves distintas en el proceso criptográfico, una clave se emplea para cifrar y otra distinta para descifrar. Una de las claves será un clave pública que todo el mundo puede conocer y se distribuye públicamente. La otra claves es privada y se utiliza para descifrar todo aquello que se haya cifrado con la clave pública. Si queremos que alguien nos envíe un mensaje cifrado le enviamos nuestra clave pública para cifrar el mesaje que sólo podrá descifrarse con nuestra clave privada y que sólo nosotros conocemos. Análogamente todo lo cifrado con la clave privada sólo se puede descifrar con la clave pública. Ingenioso ¿no?

Este mecanismo de cifrado se usa con normalidad en las comunicaciones digitales. Por ejemplo se denomina servidor seguro a un servidor web que cifra sus comunicaciones, cuando aparece el "candado" cerrado en el navegador y que normalmente comienzan por https. Cuando conectamos con un servidor seguro, lo primero que hace el servidor es enviar su clave pública para que cifremos nuestros envíos que el descifrará con su clave privada, garantizando así que la información que enviamos sólo él la puede leer. El servidor seguro sólo garantiza la privacidad de las comunicaciones pero no el posible almacenamiento que se haga de los datos transmitidos.

El mecanismo de protección de los datos transmitidos también se usa en ciertos servidores de correo para proteger la privacidad de los mensajes aunque el propio usuario no sea consciente de ello.

Debemos desconfiar de las páginas web donde tengamos que introducir información sensible y no dispongan de un sistema de cifrado. Algunos navegadores incluso avisan antes de enviar los datos de un formulario sin cifrado.

La aparición de la criptografía asimétrica no supuso ni mucho menos la desaparición de la criptografía simétrica. La criptografía simétrica no requiere un cálculo intensivo en comparación con la asimétrica lo que puede ser un serio inconveniente cuando se necesita una alta velocidad de cálculo como es el caso de páginas web o más aun en transmisiones inalámbricas. Para resolver este problema el uso de la criptografía asimétrica se limita a la transmisión de una clave simétrica generada aleatoriamente y mediante la cual emisor y receptor cifran y descifran su comunicaciones. La criptografía asimétrica sólo se utiliza para poder transmitir la clave de forma segura, lo que se denomina establecer un canal seguro de comunicación. De esta forma lo que realmente hemos resuelto a efectos prácticos es el envío de claves, porque el resto sigue utilizando criptografía simétrica.



Fundamentos matemáticos de la criptografía asimétrica.

Si llamamos m al mensaje legible que queremos cifrar, c al mensaje cifrado, pu a la llave pública y pr a la clave privada, el objetivo de la criptografía asimétrica es encontrar una pareja de funciones que verifiquen que:



La criptografía parte de una premisa fundamental: Para que el cifrado sea consistente las funciones deben ser conocidas públicamente. La seguridad del cifrado no debe basarse en el desconocimiento de los algoritmos, sino en la solidez de las claves. Ocultar un algoritmo sólo ofrece una falsa apariencia de seguridad que en el momento más inoportuno puede ponerse al descubierto.


Algoritmo RSA

Diffie y Hellman
Diffie y Hellman
 

Diffie y Hellman realizaron a mediados de los años 70 una primera propuesta de intercambio de claves utilizando criptografía asimétrica pero fueron River, Shamir y Adelman (RSA) los que desarrollaron uno de los algoritmos base de esta criptografía.

El algoritmo RSA consta de dos partes, una primera para generar las parejas de llaves públicas y privadas y una segunda parte para cifrar y descifrar mensajes.

El algoritmo RSA se apoya en el álgebra modular, que como veremos no resulta demasiado complicado. A continuación vamos a recordar algunas definiciones y propiedades en los que se basa el algoritmo RSA.

Dos números se dicen primos relativos, primos entre sí o coprimos cuando no tienen factores comunes diferentes de 1, o lo que es lo mismo, su máximo común divisor es igual a 1.

Llamamos Zn={0, 1, 2, ···, n-1} al subconjunto de Z, conjunto de números enteros entre 0 y n-1. Este conjunto representa todos los restos posibles al dividir un número entero por n.

Decimos que dos números a y b son equivalentes modulo n cuando ambos tienen el mismo resto al dividirlos por n. El número de valores equivalentes módulo n distintos es precisamente n y van desde 0 hasta n-1. Por ejemplo 1, 6 y 11 son equivalentes módulo 5 porque es resto de dividirlos por 5 es en los tres casos 1.

Rivest, Shamir, Adelman
Rivest, Shamir, Adelman
 

El indicador de Euler, φ(n), representa la cantidad de números naturales menores o iguales a n y primos relativos con n. Evidentemente si n es primo φ(n)=n-1

El indicador de Euler verifica que dados dos p y q son números primos distintos

φ(p·q)=φ(p)· φ(q)=(p-1)·(q-1)

Euler
Euler

El Pequeño Teorema de Fermat afirma que si se cumple que p es primo y m y n son enteros positivos con

entonces

para cualquier entero a. Dicho de otra forma si m y n tienen el mismo resto al dividir por p-1 entonces am y an tienen el mismo resto al dividir por p.

 

Más detalles en http://es.wikipedia.org/wiki/Pequeño_teorema_de_Fermat

Fermat
Fermat

Para generar las llaves RSA nos basamos en las anteriores propiedades para determinar dos valores que actúen como llave pública y privada.

En primer lugar es necesario tomar dos números primos, p y q y calculamos su producto:

n=p . q

Este valor es público y forma parte tanto de la llave pública como de la llave privada.

Para generar la llave privada primero tenemos que calcular un número, que sólo tendrá un uso temporal, que verifique que:

X = (p-1)(q-1) que representa cuantos primos relativos tiene n=p·q según las propiedades del indicador de Euler.

Ahora calculamos un número cualquiera e que sea primo relativo con X. Este número e constituye la llave privada junto con n, por lo que la denominaremos (e,n). En la realidad e es un número muy grande.

Por último escogemos un número d, que va a formar parte de la llave pública, que verifique:

e·d=1 mod X

Bajo estas condiciones se cumple que:



Es decir si m es el mensaje legible la función de cifrado c es



y la función para descifrar es :



Si leemos el proceso con un mínimo de atención podemos pensar que si las claves privadas y públicas las podemos obtener a partir de p y q y n=p·q es público cualquiera podría obtener una llave privada siguiendo el mismo proceso a partir del valor conocido n, y esto es cierto, pero la solidez del cifrado RSA se basa en la dificultad de factorizar números grandes para poder obtener los valores p y q.

Se han realizado cálculos del tiempo requerido para determinar una clave de 1024 bits y con las posibilidades de cálculo actuales se tardarían millones de años, unos trescientos mil millones de años. Si la claves es de sólo 512 bits sólo se tardarían treinta mil años en averiguarla.

Una de la líneas actuales de investigación del criptoanálisis consiste en desarrollar algoritmos que faciliten esta factorización en tiempos razonables.


Ejemplo:

Tomamos dos números primos

p=3, q=5

n= p·q = 15

X= (p-1)·(q-1)=8

Buscamos un número primo relativo con X=8:

e=3 que va a ser parte de nuestra llave privada junto con n

Ahora calculamos la clave pública, que debe verificar que

d·e=1 mod X o lo que es lo mismo, existe una constante k tal que

Por ejemplo para k=4 obtenemos d=11

d=11 es parte de nuestra llave pública junto con n

Ahora vamos a comprobar mediante algunos mensajes que el cifrado efectivamente funciona:

Tenemos el mensaje m=2 que queremos cifrar y vamos a representar c el mensaje cifrado:



Entonces nuestro mensaje cifrado es 8. Observamos que para cifrar el mensaje sólo hemos usado la llave privada (e,n).

Ahora vamos a descifrar el mensaje cifrado c=8



y observamos como obtenemos el mensaje original utilizando sólo la llave pública (d,n).


Veamos otro ejemplo.

Tenemos el mensaje m=7

y hemos cifado el mensaje m=7 con la llave (3,15) y obtenemos c=13

Ahora desciframos el mensaje c=13 con la llave (11,15):

 

 

Con este simple ejemplo hemos comprobado como es posible utilizar una clave  para cifrar los datos y otra distinta para descifrarlos y de esta forma evitamos tener que transmitir las claves para poder coordinar al emisor y al receptor.

Pedro Pablo



ISSN:1989-497X
Creative Commons License
Esta obra está bajo una licencia de Creative Commons. ©2012 Revista Científica.