El cifrado asimétrico: características, ventajas y algoritmos que lo utilizan
Introducción
Aunque dentro de los tipos de cifrado el
simétrico sigue siendo el más utilizado en la informática, debido precisamente
a que es más sencillo de implementar –tanto en hardware como en software–
que el asimétrico, no debemos olvidarnos de este último, también llamado de
clave pública. Este cifrado nos garantiza un poco más de seguridad y
confidencialidad al momento de enviar y recibir datos, puesto que utiliza dos
tipos diferentes de claves en vez de una: una pública para cifrar los datos, y
una privada para descifrarlos.
Algo similar es lo que hace la autenticación,
es decir, el servicio de seguridad encargado de verificar y validar que los
datos recibidos efectivamente fueron enviados por la fuente original. Sin
embargo, la autenticación hace lo contrario que el cifrado asimétrico: cifra
los datos con clave privada, y los descifra con una pública, justamente para
comprobar la entidad de origen de los datos.
Desarrollo
El cifrado asimétrico fue desarrollado en 1976
por los estadounidenses Whitfield Diffie y Martin Hellman, y significó un gran
avance en el tema de la criptografía, pues por primera vez se usaban dos claves
para cifrar y descifrar los datos, una para cada proceso, en vez de una única
clave secreta, como se había venido haciendo desde que se creó la criptografía
como ciencia.
Además, este tipo de cifrado es mucho más
avanzado, por dos razones: utiliza operaciones aritméticas decimales en lugar
de lógicas binarias, y éstas no son necesariamente reversibles. Esto último es
un requisito del cifrado simétrico, pues utiliza una misma clave para cifrar y
descifrar, pero las claves asimétricas no necesitan de ello.
Como todo cifrado, el de clave pública posee un
texto claro que va a ser cifrado mediante un algoritmo de cifrado, pero su
diferencia radica en la utilización de una clave (privada si se va a
autentificar, pública si se va a cifrar), así como un algoritmo de descifrado
que utiliza una clave diferente a la primera (pública en autenticación, privada
en cifrado).
Los pasos para realizar un cifrado de clave
pública son relativamente sencillos, aunque, obviamente, no tanto como aquellos
del cifrado simétrico: primero, un usuario crea, mediante un algoritmo (de los
cuales hablaré en breve), una pareja de claves, la privada y la pública; la
privada la guarda y sólo él la conoce, mientras que la pública la anuncia en
algún sitio. Cuando alguien quiera mandar un mensaje a otro usuario, lo cifra
con la clave pública del destinatario, quien lo descifrará con su clave
privada.
Existen algunos algoritmos para realizar
cifrados de clave pública, los cuales deben cubrir ciertas especificaciones
para que puedan funcionar. Diffie y Hellman enunciaron al menos cinco, todos
desde el punto de vista computacional: que le sea fácil a un usuario generar su
pareja de claves, que sea fácil cifrar un mensaje con una clave pública, que
sea fácil descifrarlo con una privada, que le sea imposible a un atacante obtener
la clave privada a partir de la pública, y que le sea imposible encontrar un
mensaje original dado uno cifrado. William Stallings, en Fundamentos de Seguridad en Redes, enuncia otro más: que ambas
claves pueden usarse ya sea para cifrar o para descifrar.
Uno de los algoritmos más utilizados para el
cifrado asimétrico es el RSA, cuyas siglas provienen de los apellidos de sus
autores, Ron Rivest, Adi Shamír y Len Adleman, estudiantes del Instituto
Tecnológico de Massachusetts (MIT). De este algoritmo, se obtienen tres números
decimales, d, e y n, los cuales, por sí
mismos, conforman las claves pública {e, n} y privada {d, n}. El texto cifrado C y el dato M descifrado se
calculan mediante C=Me mod(n)
y M=Cd mod(n).
El algoritmo se ejecuta de la
siguiente manera: se seleccionan dos primos p
y q, se obtiene n multiplicando pq, y se
obtiene §(n) multiplicando (p-1)(q-1).
Luego, se obtiene e como el primer
entero positivo que no tenga otro divisor común con §(n) más que 1, y se obtiene d
dividiendo 1 entre el producto (e mod§(n)).
Este algoritmo, en mi opinión, es
más fácil que alguno de los de cifrado simétrico, pues tiene sólo 7 pasos y muy
cortos. Sin embargo, puede llegar a ser complicado encontrar los valores de e y d
si no se tienen los conocimientos aritméticos necesarios, y puede ser muy
tardado el cálculo de potencias y módulos para las computadoras. Pero lo que me
parece, hasta cierto punto, gracioso, es la anécdota que nos cuenta Stallings:
que los autores ofrecían 100 dólares de recompensa a quien lograra tronar por
la fuerza bruta el algoritmo, algo logrado 17 años después, con 1600 equipos y 8
meses de trabajo; supongo que eso tuvo un costo mucho mayor que la recompensa
mencionada.
Otra de las aplicaciones de la
criptografía de clave pública es la autentificación. En este caso, como ya lo
he mencionado, se intercambia el orden de las claves: la privada sirve para
cifrar, y la pública para descifrar. El proceso es similar al del cifrado
asimétrico: el emisor cifra con su clave privada un mensaje, y el receptor lo
descifra con la clave pública del emisor; con ello, verifica que efectivamente
él es la fuente de los datos.
Existe un algoritmo, el DSS
(Estándar de Firma Digital), con el cual podemos generar firmas digitales. Fue
creado en 1991 por el Instituto Nacional de Estándares y Tecnología de EUA,
como el Federal Information Proccessing
Standard (FIPS) 186. Este algoritmo emplea el uso de funciones hash (más precisamente, SHA-1), y por lo
tanto no ahondaré demasiado en él. El DSS se utiliza únicamente para crear
firmas digitales, es decir, no se pueden cifrar o descifrar datos con él;
además, su algoritmo es más complejo que el del RSA, y, por lo tanto, más
difícil de implementar.
Cabe mencionar que existe una
diferencia entre firma digital, sello digital y certificado digital. Mientras
que la firma digital se encarga de verificar que el emisor de los datos es
realmente quien dice ser, es decir, autentifica a la persona o usuario, un
certificado digital es aquel que autentifica a la empresa u organización que
emite los datos, y le da autorización para realizar ciertas acciones. Por otro
lado, el sello digital es quien valida que el documento es genuino, es decir,
auténtico, y que no ha sido modificado o alterado.
Sin embargo, y contrario a lo que muchos creen –incluyéndome–,
la autenticación puede hacerse también sin la necesidad de un cifrado. Según Stallings,
esta técnica es únicamente conveniente en algunas circunstancias, como cuando
un mensaje se envía a muchos destinos y cada uno tendría que descifrarlo, gastando
memoria innecesaria; o cuando se envían mensajes urgentes y no hay tiempo de
descifrarlos. En mi opinión, debido a que el cifrado proporciona confidencialidad
además de autenticación es mejor utilizar un cifrado, aunque con un uso
relativamente moderado (como sólo cifrar algunos mensajes aleatorios, o que
haya un único proceso central de descifrado y no que cada nodo lo haga).
Y también es posible que se dé la
autentificación mediante el uso de cifrado simétrico. Si emisor y receptor
comparten una clave secreta, el emisor puede calcular algo llamado Código de
Autentificación de Mensajes, el cual se crea en función del mensaje y de la
clave secreta, y se anexa al mensaje. De esta manera, si el mensaje es
alterado, también se alteraría el código, y el receptor vería uno diferente al
que calculó por sí mismo usando la clave. Si el código es correcto, se verifica
que el emisor es auténtico y que el mensaje no ha sido alterado. Esto puede
hacerse sin cifrar el propio mensaje, reduciendo así el costo de cifrar todo el
mensaje, aunque no se garantice la confidencialidad.
Una tercera aplicación de la criptografía de
clave pública es la gestión de claves, ya sea secretas (cifrado simétrico), o públicas.
Con ello, como bien señala Stallings, podemos garantizar dos cosas. La primera,
que la clave pública de algún usuario que se encuentre en un registro público
es efectivamente de aquel usuario, lo cual puede lograrse mediante un
certificado de clave pública, emitido por una autoridad de certificación (CA);
así, aparecerán en el registro tanto la clave como el certificado que sustenta
la validez de la clave.
La segunda acción que podemos garantizar con
este proceso es el envío de claves secretas, destinadas para utilizarse en
cifrados convencionales. Así, si dos personas desean generar una clave secreta,
pueden hacer uso del cifrado asimétrico para crearla: mediante una serie de
cálculos con valores diferentes, cada usuario por su cuenta puede generar una
misma clave.
Fue precisamente para este fin por lo que
Diffie y Hellman crearon el primer algoritmo de clave pública en 1976. Para
obtener la clave, se necesitan cuatro números, dos públicos y dos privados: un
número primo q y una raíz primitiva α de q son los
públicos, mientras que los usuarios, emisor y receptor, escogen cada uno un
número aleatorio x1 y x2, respectivamente, ambos menores
que q. Posteriormente, el emisor calcula
y1 = ax1mod(q)
y el receptor y2=ax2mod(q),
y envían los valores calculados al otro, sin revelar nunca el valor de x1 o x2.
Aquí viene lo más interesante: el emisor calcula y2x1mod(q) y el receptor y1x2mod(q), e
increíblemente ambos valores son iguales. El valor calculado es la clave
secreta que usarán para sus futuros cifrados.
Existe un cuarto algoritmo, llamado de Curva
Elíptica, propuesto por Neal Koblitz y Victor Miller en 1985, con el cual
podemos realizar todas las funciones para las que fue creada la criptografía de
clave pública: cifrar/descifrar, autentificar, y gestionar e intercambiar claves.
Este algoritmo se ve como buen competidor para el RSA, pues este último suele
ser más lento con claves que tengan tamaños mayores de bits, generando más
costos, mientras que el ECC (Elyptic
Curve Criptography) garantiza igual seguridad con claves menores.
Como su nombre lo indica, este algoritmo
utiliza la ecuación general de una curva elíptica, y2 = x3 + ax + b, para el cálculo de las
claves. Primero, se escoge un punto en un plano cartesiano y se hace público,
para ser usado en la ecuación de la curva; después, se escoge un número k como clave privada, y se calcula P = kG, usado también como clave pública.
El emisor y receptor tienen las claves privadas kA y kB, y
las claves públicas PA y PB, respectivamente; con ello, el emisor calcula kAPB = kAkBG,
y el receptor kBPA
= kBkAG, dando, obviamente, valores idénticos.
Conclusión
Como ya hemos visto, la criptografía de clave
pública tiene muchas ventajas sobre el cifrado simétrico, siendo las principales
el uso de dos claves en lugar de una –haciendo más difícil que un oponente pueda
encontrar ambas–, el empleo de números decimales en lugar de bits, la
irreversibilidad de las operaciones efectuadas, la posibilidad de utilizar el
servicio de autentificación tanto de las entidades de origen como del origen de
los datos mismos, entre muchas otras cosas.
Pero, a pesar de todas las ventajas del uso del
cifrado asimétrico o de clave pública, el uso de dos claves no quiere decir que
el cifrado asimétrico sea por sí mismo más seguro; de hecho, eso depende más de
la longitud de los datos y las claves (para contrarrestar ataques de fuerza
bruta) y de que le sea más caro al oponente romper el cifrado que usar la
información descifrada. Además, tampoco es el más utilizado, debido a lo que
comenté al inicio de este texto, que el cifrado convencional es más fácil de
implementar.
En mi opinión, se debe escoger el tipo de
cifrado que vamos a utilizar dependiendo del valor de la información que vamos
a cifrar, y de los recursos computacionales con los que disponemos para ello. Es
decir, podemos cifrar información con valor relativamente bajo con un cifrado
simétrico o con un asimétrico de clave corta, y así ahorrar recursos; mientras
que se puede cifrar información valiosa con clave pública, o bien usando
convencional de clave larga, aunque se gasten más recursos. Pero todo esto
depende, como siempre, de la confianza que nosotros manifestemos con las
personas con quienes compartamos la información, y de las precauciones que
tomemos al respecto.
Fuentes Bibliográficas
- Stallings, Williams. Fundamentos de Seguridad en Redes: Aplicaciones y Estándares (segunda edición). Pearson Educación, S.A. Madrid, 2004. Págs. 56-59, 71-84.
- https://www.gnupg.org/gph/es/manual/x212.html
- www.cert.fnmt.es/curso-de-criptografia/criptografia-de-clave-asimetrica
- www.dma.fi.upm.es/recursos/aplicaciones/matematica_discreta/web/.../rsa.html
- www.criptored.upm.es/crypt4you/temas/ECC/leccion1/leccion1.html
Comentarios
Publicar un comentario