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

Entradas populares de este blog

Kerberos: una de las aplicaciones más utilizadas como servicio de autentificación

El cifrado simétrico y asimétrico como mecanismo de seguridad para garantizar la confidencialidad, autentificación e integridad de los datos