Muchas veces cuando estamos analizando o configurando la seguridad de nuestras conexiones en Internet nos encontramos con que tenemos que entender qué significan esos nombres largos asignados a las suites de cifrado y determinar si son seguras o no.
Las suites de cifrado se utilizan en una gran variedad de escenarios en los que se necesita una comunicación segura. Algunos ejemplos de los escenarios de uso son:
▪️Redes privadas virtuales (VPN): Las suites de cifrado se utilizan para establecer un canal de
comunicación seguro entre un cliente VPN y un servidor VPN. Esto permite a los usuarios
acceder de forma segura a redes y recursos remotos como si estuvieran conectados
directamente a la red. Las suites de cifrado también se usan en el caso específico de los
túneles hechos con el protocolo de seguridad de internet IPSec cuando se establecen túneles
entre dos hosts o entre un host y una red. IPsec proporciona confidencialidad, integridad y
autenticidad a los paquetes IP.
▪️Correo electrónico seguro: Las suites de cifrado se utilizan para cifrar y firmar mensajes de
correo electrónico con el fin de protegerlos contra escuchas y manipulaciones.
▪️Otras aplicaciones: Las suites de cifrado se utilizan para asegurar la conexión entre el cliente y
el servidor para proteger los datos intercambiados contra escuchas y manipulaciones, algunos
ejemplos: Protocolo Seguro de Transferencia de Archivos (SFTP), Hypertext Transfer Protocol
Secure (HTTPS).
Las suites de cifrado
Para entender estos galimatías de los nombres de las suites de cifrado debemos entender qué es una suite de cifrado. Podríamos definir una suite de cifrado como un conjunto de algoritmos criptográficos que se utilizan para crear e intercambiar claves, así como cifrar y descifrar la información, de forma que cada uno de los algoritmos definidos dentro del conjunto cubre una función específica dentro del proceso de proteger la información en la transmisión.
Para establecer una comunicación entre un servidor y un cliente, previamente se debe configurar al servidor con un conjunto de suites de cifrado que se consideran aceptables para la organización, una vez esto está hecho, a partir de este punto se habilita para recibir conexiones que siguen este flujo (el flujo puede cambiar un poco dependiendo de la versión de TLS):
- El cliente envía las versiones de las suites de cifrado y métodos de compresión que soporta, en orden de preferencia (ClientHello).
- El servidor escoge entre ellas la suite más favorable para comenzar a cifrar los datos (ServerHello).
- El servidor envía su certificado con las llaves de cifrado públicas.
- El cliente hace la verificación del certificado donde se valora tanto la vigencia de este como la identidad del servidor, si la verificación es exitosa se procede a negociar una clave secreta llamada Master Secret, teniendo en cuenta la suite de cifrado escogida.
- El cliente envía un mensaje cifrado al servidor.
- El servidor verifica que el Message Authentication Code (MAC) es correcto y el mensaje puede ser descifrado correctamente.
- El servidor responde al mensaje, el cual es verificado también por el cliente.
Al analizar este flujo se ve, que se usan varios tipos de cifrado en diferentes partes del proceso de establecimiento de la comunicación, es por esto por lo que las suites de cifrado deben identificar cada una de sus partes. Para entender cada una de ellas usemos un ejemplo sobre el que identificaremos los elementos en el siguiente diagrama:
normalmente será TLS
▪️ECDHE: indica el algoritmo de intercambio de claves
▪️PSK: indica la firma digital o método de autenticación empleado en el establecimiento
de comunicación
▪️AES: es el cifrado de sesión;
▪️256: es el tamaño (en bits) de la clave de cifrado de sesión;
▪️GCM: indica el tipo o modo de cifrado (dependencia de bloques de cifrado y
opciones adicionales);
▪️SHA: es el código de autenticación de mensaje (MAC);
▪️384: es el tamaño (en bits) del digesto o hash.
▪️P384: es el tamaño de la llave en caso de usar curva elíptica (a veces no se identifica y
se considera un parámetro opcional)
En caso de que no se esté usando un algoritmo de cifrado para alguna de las tareas dentro de la suite, se documenta con NULL. El ejemplo de una suite que no cifra (que no se debería usar nunca) en ninguna de las tareas sería:
TLS_NULL_WITH_NULL_NULL
Por supuesto, no todos los algoritmos son seguros, y tampoco podemos usar siempre los más exigentes ya sea porque el activo a proteger no tiene un valor alto o por que los clientes con los que se intercambia información acceden desde plataformas con bajos poderes computacionales o desactualizadas, lo que nos lleva a tener que configurar diferentes alternativas dentro de nuestro servidor.
La fortaleza de una suite de cifrado vendrá dada por su componente más débil, es por eso por lo que debemos escoger diferentes alternativas que provean un nivel de seguridad adecuado para la situación específica.
A continuación, se presenta una tabla donde se muestran algunos ejemplos de algoritmos partiendo del más seguro al menos seguro, pero es importante tener en cuenta que el criterio de valoración del algoritmo puede cambiar con el tamaño de la clave de cifrado usada, allí donde se pueda cambiar.
| Protocolo | Intercambio de llaves | Algoritmo de intercambio de Claves | Algoritmo de cifrado de datos | Algoritmo de Hash |
| TLS | 1. ECDHE: Elliptic Curve Diffie-Hellman | 1. ECDSA (Elliptic Curve Digital Signature Algorithm) | 1. AES (Advanced Encryption Standard) | 1. SHA3 (Secure Hash Algorithm 3) |
| 2. DHE: Diffie-Hellman | 2. RSA (Rivest-Shamir-Adleman) | 2. ChaCha20 | 2. SHA384 (Secure Hash Algorithm384) | |
| 3. DSA (Digital Signature Algorithm) | 3. Camellia | 3. SHA256 (Secure Hash Algorithm256) | ||
| 4. Aria |
Hay ciertos algoritmos de cifrado y métodos de intercambio de claves que generalmente se consideran inseguros y deben evitarse a la hora de elegir una suite de cifrado. Los siguientes son algunos ejemplos:
▪️Protocolos obsoletos y rotos: Algunos cifrados y protocolos que han sido obsoletos y se
consideran débiles, como SSLv2, SSLv3 y TLSv1.0, y deben evitarse. Se recomienda como
mínimo el uso de TLS 1.2.
▪️Algoritmos de cifrado débiles: Algunos algoritmos de cifrado, como Data Encryption Standard
(DES) y Blowfish, son vulnerables a los ataques y deben evitarse.
▪️Métodos de intercambio de claves débiles: Algunos métodos de intercambio de claves, como
RSA con un tamaño de clave inferior a 2048 bits, son vulnerables a los ataques y deben
evitarse.
▪️Modo de funcionamiento CBC: Se ha descubierto que el modo Cipher Block Chaining (CBC)
es vulnerable a varios ataques y debería evitarse.
▪️MD5 y SHA-1: Se ha descubierto que las funciones hash MD5 y SHA-1 son vulnerables a
colisiones y ataques de preimagen, y deben evitarse cuando se necesite una función hash
segura.
La longitud de la clave de un algoritmo de cifrado es un factor importante para determinar su seguridad. Una longitud de clave más larga suele proporcionar mayor seguridad.
Para los algoritmos de clave simétrica, como AES y Blowfish, las claves de 128 bits o más se consideran seguras. Para RSA, la longitud de clave mínima recomendada es de 2048 bits, mientras que para la Criptografía de Curva Elíptica (ECC) el mínimo es de 256 bits.
También es importante señalar que la longitud de la clave por sí sola no es garantía de seguridad. Otros factores como la gestión segura de claves, el diseño seguro del protocolo y la implementación segura también desempeñan un papel importante en la seguridad general de un sistema.
Además, es importante tener en cuenta que los requisitos de longitud de clave evolucionan constantemente a medida que aumenta la potencia de cálculo, por lo que es importante evaluar y actualizar periódicamente la seguridad de sus sistemas para asegurarse de que está utilizando las longitudes de clave que no ponen en peligro la seguridad de la información transmitida y del propio sistema.
Es importante mantener el software actualizado para asegurarse de que no se está utilizando ningún cifrado obsoleto o roto. Además, es importante consultar normas y directrices como la publicación especial SP 800-52r2 del NIST o el OWASP para obtener una lista de cifrados recomendados y obsoletos y de longitudes de clave recomendadas.
También es importante tener en cuenta que la seguridad de una suite de cifrado depende de varios factores, como la seguridad de los algoritmos de cifrado subyacentes, el tamaño y la fuerza de las claves utilizadas y la implementación de la suite de cifrado en el software. Por lo tanto, es importante evaluar y actualizar periódicamente la seguridad de sus sistemas para asegurarse de que utiliza suites de cifrado que proporcionen los niveles adecuados de seguridad tanto para la información como para el sistema y que estén libres de vulnerabilidades conocidas.
Algoritmos para Usar en Ambientes Altamente Seguros
En entornos de alta seguridad, como las instituciones gubernamentales o financieras, se debe mantener el máximo nivel de seguridad. Por lo tanto, es importante utilizar las suites de cifrado consideradas más seguras. Estos son algunos ejemplos de suites de cifrado que se utilizan habitualmente en entornos de alta seguridad:
▪️AES-256-GCM: Esta suite de cifrado utiliza el cifrado AES con una clave de 256 bits en modo
Galois/Counter Mode (GCM). Se considera uno de los algoritmos de cifrado más seguros que
existen.
▪️ChaCha20-Poly1305: Se trata de una suite de cifrado relativamente nueva que utiliza el cifrado
de flujo ChaCha20 y el autenticador Poly1305. Se considera muy segura y se recomienda su
uso en protocolos de seguridad de la capa de transporte (TLS) y de seguridad del protocolo de
Internet (IPsec).
▪️ECDHE-ECDSA-AES256-GCM-SHA384: esta suite de cifrado utiliza el intercambio de claves
de curva elíptica Diffie-Hellman (ECDHE), el algoritmo de firma digital de curva elíptica (ECDSA)
para la autenticación, el cifrado AES-256-GCM y SHA384 para la integridad de los mensajes.
▪️ECDHE-RSA-AES256-GCM-SHA384: similar a la anterior, esta utiliza RSA para la autenticación
y ECDHE para el intercambio de claves.
Es importante tener en cuenta que la seguridad de una suite de cifrado depende de varios factores, como la seguridad de los algoritmos de cifrado subyacentes, el tamaño y la fuerza de las claves utilizadas y la implementación de la suite de cifrado en el software. Por lo tanto, es importante evaluar y actualizar periódicamente la seguridad de sus sistemas para asegurarse de que utiliza las suites de cifrado más seguras disponibles.
También es importante tener en cuenta que, para los entornos de alta seguridad, también es importante considerar el cumplimiento de las normas y reglamentos de la industria, como la Publicación Especial 800-52r2 del NIST o OWASP, que enumeran los cifrados y protocolos recomendados y obsoletos.
A continuación, se presentan un par de listados con suites de cifrado que (a día de hoy) pueden ser configurados en entornos seguros.
Listado de suites de cifrado recomendadas:
TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECCPWD_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
TLS_ECCPWD_WITH_AES_256_GCM_SHA384
TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8
TLS_AES_128_CCM_8_SHA256
TLS_ECCPWD_WITH_AES_128_CCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CCM
TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256
TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256
TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
TLS_ECCPWD_WITH_AES_256_CCM_SHA384
TLS_AES_128_CCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
TLS_ECDHE_ECDSA_WITH_AES_128_CCM
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
Algoritmos para Usar en Dispositivos con Limitaciones de Cómputo
Algunos dispositivos de propósito específico, como por ejemplo los dispositivos IoT, suelen tener recursos limitados, como memoria y capacidad de procesamiento, lo que puede dificultar el uso de algunas suites de cifrado. Los siguientes son algunos ejemplos de suites de cifrado que pueden utilizarse en dispositivos con limitaciones:
▪️AES-128-GCM: Esta suite de cifrado utiliza el cifrado AES con una clave de 128 bits
en modo Galois/Counter Mode (GCM). Se considera seguro y es relativamente
eficiente en términos de potencia de procesamiento y uso de memoria.
▪️ChaCha20-Poly1305: se trata de una suite de cifrado relativamente nueva que
utiliza el cifrado de flujo ChaCha20 y el autenticador Poly1305. Se considera muy
segura y es relativamente eficiente en términos de potencia de procesamiento y
uso de memoria.
▪️ECDHE-ECDSA-AES128-GCM-SHA256: esta suite de cifrado utiliza el intercambio
de claves de curva elíptica Diffie-Hellman (ECDHE), el algoritmo de firma digital de
curva elíptica (ECDSA) para la autenticación, el cifrado AES-128-GCM y SHA256
para la integridad de los mensajes.
▪️ECDHE-RSA-AES128-GCM-SHA256: similar a la anterior, esta utiliza RSA para la
autenticación y ECDHE para el intercambio de claves.
Es importante tener en cuenta que, para los dispositivos con limitaciones, la seguridad no es la única preocupación, también hay que considerar otros factores como el consumo de energía y el ancho de banda de las comunicaciones, por eso es necesario un equilibrio entre seguridad y rendimiento.
Vulnerabilidades de las suites de cifrado
Un algoritmo de cifrado débil es vulnerable a una serie de ataques que pueden comprometer la seguridad de la comunicación. He aquí algunos ejemplos de ataques que pueden utilizarse contra cifrados débiles:
▪️Fuerza bruta: Un ataque de fuerza bruta consiste en probar todas las claves
posibles hasta encontrar la correcta. Con suites de cifrado débiles, el espacio de
claves puede ser menor, lo que facilita al atacante encontrar la clave correcta.
▪️Criptoanálisis: El criptoanálisis es el proceso de analizar un cifrado o sistema
criptográfico para encontrar debilidades que puedan ser explotadas. Con suites de
cifrado débiles, los algoritmos utilizados pueden ser vulnerables a ataques
criptoanalíticos conocidos, lo que facilita a un atacante romper el cifrado.
▪️Ataques de canal lateral: Los ataques de canal lateral explotan la información que
se filtra durante el proceso de cifrado o descifrado, como el consumo de energía o
la radiación electromagnética. Con suites de cifrado débiles, los algoritmos
utilizados pueden ser vulnerables a los ataques de canal lateral, facilitando a un
atacante la extracción de la clave de cifrado.
▪️Man-in-the-middle: Un ataque de intermediario es un tipo de ataque de escucha en
el que el atacante intercepta la comunicación entre dos partes y puede leer, insertar
o modificar los datos. Con suites de cifrado débiles, la comunicación puede ser
vulnerable a ataques de intermediario, lo que facilita que un atacante intercepte y
modifique la comunicación.
Es importante tener en cuenta que estos son sólo algunos ejemplos de ataques que pueden utilizarse contra cifrados débiles, y que continuamente se están desarrollando nuevos métodos de ataque. Es importante evaluar y actualizar periódicamente la seguridad de tus sistemas para asegurarte de que utilizas suites de cifrado considerada seguras en cada momento.
Verificación de los algoritmos configurados
Cuando se usan suites de cifrado, se deben verificar las configuraciones en los dos extremos de la comunicación es decir el cliente y el servidor o los dos extremos de una conexión punto a punto. Para esto se debe partir de la inspección de los ajustes de configuración que provee el fabricante del software o sistema operativo, que en los casos de los clientes al ser sistemas operativos o navegadores pueden ser sitios de difícil acceso como llaves de registro, el objetivo es que desde el lado del servidor no ofrezcamos configuraciones de protocolos inseguras y que desde el lado del cliente no se permita establecer conexiones a servidores con protocolos inseguros.
Existen herramientas de terceros que ayudan a verificar el estado de la configuración para sitios públicos como una página web y también pueden ayudar a verificar los algoritmos soportados por el cliente (navegador). Algunos ejemplos:
▪️https://www.immuniweb.com/ssl/
▪️https://www.site24x7.com/es/tools/tls-checker.html
▪️https://www.ionos.es/tools/ssl-checker
Estas son algunas herramientas de línea de comandos que pueden ser útiles para hacer pruebas de configuraciones de cifrado:
▪️testssl.sh: Una herramienta gratuita en bash que verifica el servicio en cualquier
puerto para compatibilidad con TLS/SSL, fallos criptográficos y más.
▪️Cipherscan: Comprueba el orden de los cifrados SSL/TLS en un objetivo,
extrayendo información sobre certificados y opciones TLS.
▪️OpenSSL: Kit de herramientas versátil para verificar soportes específicos, como el
secreto de reenvío (Forward Secrecy).
Referencias:
🔗Microsoft Learn. (14 julio 2023). Cipher Suites in TLS/SSL (Schannel SSP).
https://learn.microsoft.com/en-au/windows/win32/secauthn/cipher-suites-in-schannel
🔗Dierks, T., Rescorla, E. Internet Engineering Task Force (IETF). (agosto 2008). RFC 5246. The Transport Layer Security (TLS) Protocol Version 1.2.
https://datatracker.ietf.org/doc/html/rfc5246
🔗Rescorla, E. Internet Engineering Task Force (IETF). (agosto 2018). RFC 8446. The Transport Layer Security (TLS) Protocol Version 1.3.
https://www.rfc-editor.org/rfc/rfc8446
🔗Blake-Wilso, S., Bolyard, N., Gupta, V, Hawk C., Moeller B. Bochum R. Internet Engineering Task Force (IETF). (MAYO 2006). RFC 4492. Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS).
https://datatracker.ietf.org/doc/html/rfc4492
🔗IANA - Internet Assigned Numbers Authority. (12 diciembre 2023). Transport Layer 🔗Security (TLS) Parameters.
https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4
🔗Ciphersuite. 348 Cypher Suites.
https://ciphersuite.info/cs/?singlepage=true&sort=sec-desc
🔗Muscat, A. The Acunetix Blog - Web Security Zone. (10 abril 2019). Recommendations for TLS/SSL Cipher Hardening.
https://www.acunetix.com/blog/articles/tls-ssl-cipher-hardening/
🔗Giry, D. BlueKrypt (24 mayo 2020). Cryptographic Key Length Recommendation. https://www.keylength.com/