¿Qué significa cifrar? Aplicar un algoritmo de cifrado determinado junto con una clave, a una determinada información que se quiere transmitir confidencialmente. Dentro del cifrado digital encontramos dos tipos de criptografía: simétrica y asimétrica. En este artículo hablaremos sobre la Criptografía de clave asimétrica.
La criptografía de clave asimétrica también es conocida como cable pública, emplea dos llaves diferentes en cada uno de los extremos de la comunicación. Cada usuario tendrá una clave pública y otra privada. La clave privada tendrá que ser protegida y guardada por el propio usuario, será secreta y no la deberá conocer nadie. La clave pública será accesible a todos los usuarios del sistema de comunicación.
Los algoritmos asimétricos están basados en funciones matemáticas fáciles de resolver en un sentido, pero muy complicadas realizarlo en sentido inverso, a menos que se conozca la llave. Las claves públicas y privadas se generan simultáneamente y están ligadas la una a la otra. Esta relación debe ser muy compleja para que resulte muy difícil que obtengamos una a partir de la otra.
Las parejas de claves tienen funciones diversas y muy importantes, entre las que destacan:
- Cifrar la información.
- Asegurar la integridad de los datos transmitidos.
- Garantizar la autenticidad del emisor.
Cifrado con clave asimétrica
Si una persona con una pareja de claves cifra un mensaje con la llave privada, ese mensaje sólo podrá ser descifrado con la llave pública asociada. Y si se cifra con la pública, se descifra con la privada.
Si «ciframos» un mensaje con la clave privada, no podremos descifrarlo con la propia llave privada, deberemos usar la pública (en este caso no es cifrado, sino firma/autenticación, comprobaremos que el emisor es quien realmente dice ser).
Como hemos contado en el artículo de criptografía de clave simétrica, el cifrado simétrico aporta confidencialidad (sólo podrá leer el mensaje el destinatario). La criptografía asimétrica proporciona autenticidad, integridad y no repudio.
Para que un algoritmo sea considerado seguro debe cumplir:
- Si se conoce el texto cifrarlo, debe resultar muy difícil o imposible extraer el texto en claro y la clave privada.
- Si se conoce el texto en claro y el cifrado, debe resultar más costoso obtener la clave privada que el texto en claro.
- Si los datos han sido cifrados con la clave pública, sólo debe existir una clave privada capaz de descifrarlo, y viceversa.
La ventaja del cifrado asimétrico sobre el simétrico radica en que la clave pública puede ser conocida por todo el mundo, no así la privada, sin embargo, en el cifrado simétrico deben conocer la misma clave los dos usuarios (y la clave debe hacerse llegar a cada uno de los distintos usuarios por el canal de comunicación).
Cifrado con clave de sesión
El principal inconveniente es la lentitud, el empleo de este tipo de llaves ralentiza el proceso de cifrado. La solución a esto es usar el cifrado asimétrico como el simétrico (como hace IPSec o SSL).
Creamos la clave del algoritmo simétrico, la ciframos con la clave pública del receptor, enviamos los datos cifrados por el canal inseguro, y a continuación, el receptor descifrará los datos mediante su llave privada. Entonces podrán empezar a comunicarse mediante el cifrado simétrico (mucho más rápido).
En las VPN como OpenVPN TLS/SSL la clave de sesión, que es conocida por los usuarios, se regenera cada cierto tiempo para incrementar la seguridad.
Desafío-Respuesta
Podemos comprobar que el emisor es realmente quien dice ser, para ello enviamos un texto al emisor y éste la «cifrará» con su clave privada (realmente lo firmará), el emisor nos enviará el texto «cifrado» y nosotros «desciframos» la clave (comprobamos la firma) ya que tenemos la clave pública del emisor, y comparamos que el mensaje obtenido sea el mismo que enviamos anteriormente.
Si alguien se hace pasar por el emisor real, no tendría la clave privada y el desafío no hubiera resultado satisfactorio.
Firma digital
La firma digital permite al receptor de un mensaje que el origen es auténtico, también podremos comprobar si el mensaje ha sido modificado. Falsificar una firma digital es casi imposible a no ser que conozcan la clave privada del que firma (y ya hemos dicho anteriormente que la clave privada debe estar guardada y que no la debe saber nadie).
Hay dos fases para la realización de la firma digital:
- Proceso de firma: el emisor cifra los datos con la clave privada y lo manda al receptor.
- Verificar la firma: el receptor descifra los datos usando la clave pública de el emisor y comprueba que la información coincide con los datos originales (si coincide es que no se ha modificado).
En las firmas digitales se hace uso de las funciones HASH como SHA256 y SHA512 ya que como hemos comentado anteriormente, el cifrado asimétrico es lento.
El emisor aplicará la función hash al mensaje original para obtener la huella digital. A continuación, se cifra la huella con la clave privada y se envía al destinatario para que la descifre. El destinatario también aplicará la función hash a sus datos y comparará los resultados (la que ha obtenido y la que ha recibido). Así podrá comparar que la información no ha sido alterada. Si alguien altera los datos, la huella digital será diferente.
Con todo esto hemos cumplido:
- Autenticidad (el emisor es quien dice ser).
- Integridad (el mensaje no ha sido modificado).
- No repudio (el emisor no puede negar haber enviado el mensaje al receptor).
Si queremos introducir la confidencialidad basta que el emisor cifre el mensaje original con la clave pública del receptor.
Algoritmos de cifrado de clave asimétrica
Tenemos dos algoritmos principales, el Diffie-Hellman y el famoso RSA.
Diffie-Hellman
No es un algoritmo asimétrico propiamente dicho, se usa para generar una clave privada simétrica a ambos extremos de un canal de comunicación inseguro. Se emplea para obtener la clave secreta con la que posteriormente cifrar la información, junto con un algoritmo de cifrado simétrico. Su seguridad radica en la dificultad de calcular el logaritmos discreto de números grandes (DH también permite el uso de curvas elípticas).
El problema de este algoritmo es que no proporciona autenticación, no puede validar la identidad de los usuarios, por tanto si un tercer usuario se pone en medio de la «conversación», también se le facilitaría las claves y por tanto, podría establecer comunicaciones con el emisor y el receptor suplantando las identidades. Para evitar esto existen varias soluciones que mitigan y solucionan el problema.
RSA
Este algoritmo se basa en la pareja de claves, pública y privada de las que ya hemos hablado antes. La seguridad de este algoritmo radica en el problema de la factorización de números enteros.
Ventajas:
- Resuelve el problema de la distribución de las llaves simétricas (cifrado simétrico).
- Se puede emplear para ser utilizado en firmas digitales.
Desventajas:
- La seguridad depende de la eficiencia de los ordenadores.
- Es más lento que los algoritmos de clave simétrica.
- La clave privada debe ser cifrada por algún algoritmo simétrico.
Algoritmos de autenticación (o hash)
Los más conocidos y usados son MD5 y el SHA-1, aunque no son seguros actualmente, hoy en día (2016) se debe usar SHA256 o SHA512, y nunca utilizar MD5 y SHA-1. Son algoritmos que a partir de un bloque de entrada, generan otro bloque de salida de una longitud fija determinada. Puedes leer más sobre algoritmos de autenticación aquí:
Hasta aquí hemos llegado con los algoritmos de cifrado de clave asimétrica. Ya sabéis sus ventajas e inconvenientes y los dos tipos de algoritmos que hay.