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).
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):
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:
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 |
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
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.
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.
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/