Articulo de referencia

Conjunto de cifrado

Un conjunto de cifrado es un conjunto de algoritmos que ayudan a proteger una conexión de red. Los conjuntos suelen utilizar Transport Layer Security (TLS) o su predecesor obsol...

Un conjunto de cifrado es un conjunto de algoritmos que ayudan a proteger una conexión de red. Los conjuntos suelen utilizar Transport Layer Security (TLS) o su predecesor obsoleto, Secure Socket Layer (SSL), como protocolo. El conjunto de algoritmos que normalmente contienen los conjuntos de cifrado incluye: un algoritmo de intercambio de claves , un algoritmo de cifrado masivo y un algoritmo de código de autenticación de mensajes (MAC). [ 1 ]

El algoritmo de intercambio de claves se utiliza para intercambiar una clave entre dos dispositivos. Esta clave se emplea para cifrar y descifrar los mensajes que se envían entre dos máquinas. El algoritmo de cifrado masivo se utiliza para cifrar los datos que se envían. El algoritmo MAC proporciona comprobaciones de integridad de datos para garantizar que los datos enviados no se modifiquen durante la transmisión. Además, los conjuntos de cifrado pueden incluir firmas y un algoritmo de autenticación para ayudar a autenticar el servidor o el cliente.

En general, existen cientos de conjuntos de cifrado diferentes que contienen distintas combinaciones de estos algoritmos. Algunos conjuntos de cifrado ofrecen mayor seguridad que otros. Sin embargo, con la adopción de TLS 1.3, solo cinco conjuntos de cifrado han sido oficialmente compatibles y definidos. [ 2 ]

La estructura y el uso del concepto de conjunto de cifrado se definen en el documento estándar TLS. [ 3 ] TLS 1.2 es la versión más extendida de TLS. La versión más reciente de TLS (TLS 1.3) incluye requisitos adicionales para los conjuntos de cifrado. Los conjuntos de cifrado definidos para TLS 1.2 no se pueden usar en TLS 1.3, y viceversa, a menos que se indique lo contrario en su definición.

En el Registro de conjuntos de cifrado TLS se proporciona una lista de referencia de conjuntos de cifrado con nombre. [ 4 ]

Historia

El uso de cifrados ha sido parte del protocolo de tránsito Secure Socket Layer (SSL) desde su creación. SSL ha sido sucedido por TLS para la mayoría de los usos. Sin embargo, el nombre "Cipher Suite" no se usó en el borrador original de SSL. En cambio, la capacidad de un cliente y un servidor para elegir entre un pequeño conjunto de cifrados para proteger su conexión se denominó "Cipher-Choice". [ 5 ] [ 6 ] No fue hasta SSL v3 (la última versión de SSL) que se usó el nombre "Cipher Suite" . [ 7 ] Todas las versiones posteriores de TLS han usado "Cipher Suite" en su estandarización. El concepto y propósito de un Cipher Suite no ha cambiado desde que se acuñó el término por primera vez. Se ha usado y se sigue usando como una estructura que describe los algoritmos que una máquina admite para que dos máquinas decidan qué algoritmos usar para proteger su conexión. Lo que ha cambiado son las versiones de los algoritmos que se admiten en los Cipher Suites. Cada versión de TLS ha añadido compatibilidad con versiones más robustas de los algoritmos y ha eliminado la compatibilidad con las versiones de los algoritmos que se han identificado como inseguras.

TLS 1.3 supone un cambio en la forma en que se coordinan los conjuntos de cifrado entre máquinas. El conjunto de cifrado elegido para dos máquinas que se comunican se determina mediante el proceso de establecimiento de la conexión. En TLS 1.3 se realizaron modificaciones en este proceso para reducir la cantidad de mensajes que deben enviarse. Esto permite un menor procesamiento, menos tráfico de paquetes y una mayor eficiencia en comparación con las versiones anteriores de TLS.

Esquema de nomenclatura

Cada conjunto de cifrado tiene un nombre único que se utiliza para identificarlo y describir su contenido algorítmico. Cada segmento en el nombre de un conjunto de cifrado representa un algoritmo o protocolo diferente. Un ejemplo de nombre de conjunto de cifrado es: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

El significado de este nombre es:

TLS
Define el protocolo para el que está diseñado este conjunto de cifrado; normalmente será TLS.
ECDHE
Indica el algoritmo de intercambio de claves que se está utilizando.
RSA
mecanismo de autenticación durante el protocolo de enlace.
AES
cifrado de sesión.
128
Tamaño de la clave de cifrado de sesión (bits) para el cifrado.
GCM
tipo de cifrado (dependencia del bloque de cifrado y opciones adicionales).
SHA
Función hash (SHA2). Para un resumen de 256 o superior. Mecanismo de firma. Indica el algoritmo de autenticación de mensajes que se utiliza para autenticar un mensaje.
256
Tamaño del resumen (bits).

A partir de TLS 1.3, los nombres de los conjuntos de cifrado ya no incluyen un tipo de certificado (RSA) ni un mecanismo de intercambio de claves (ECDHE), ya que estos se negocian por separado en la nueva versión. [ 8 ] [ 9 ]

Apretón de manos completo: coordinación de conjuntos de cifrado

Para utilizar conjuntos de cifrado, el cliente y el servidor deben acordar el conjunto de cifrado específico que se utilizará para el intercambio de mensajes. Ambos deben ser compatibles con el conjunto de cifrado acordado. Si el cliente y el servidor no se ponen de acuerdo, no se establecerá la conexión. [ 10 ] Este proceso de selección se produce durante el protocolo de enlace TLS. TLS 1.3 incluye un protocolo de enlace TLS que difiere de las versiones anteriores y actuales de TLS/SSL.

Tras coordinar qué conjunto de cifrado utilizar, el servidor y el cliente aún tienen la posibilidad de cambiar los cifrados coordinados mediante el protocolo ChangeCipherSpec en el intercambio de claves actual o en un nuevo intercambio de claves.

Para comprobar qué cifrados TLS admite un servidor, se puede utilizar un escáner SSL/TLS.

Protocolo de enlace TLS 1.0–1.2

Representación visual de cómo un cliente y un servidor que operan en TLS 1.2 coordinan qué conjunto de cifrado utilizar.

El cliente inicia el proceso enviando un mensaje `clientHello` al servidor, que incluye la versión de TLS utilizada y una lista de conjuntos de cifrado en el orden de preferencia del cliente. En respuesta, el servidor envía un mensaje `serverHello` que incluye el conjunto de cifrado seleccionado y el ID de sesión . A continuación, el servidor envía un certificado digital al cliente para verificar su identidad. Si es necesario, el servidor también puede solicitar la certificación digital del cliente.

Si el cliente y el servidor no utilizan claves precompartidas , el cliente envía un mensaje cifrado al servidor que permite al cliente y al servidor calcular qué clave secreta se utilizará durante los intercambios.

Si el bit prefer server cipher del mensaje serverHello está configurado como verdadero, se prefiere el conjunto de cifrado negociado en la lista de conjuntos de cifrado del mensaje serverHello ; de lo contrario, se prefiere el conjunto de cifrado negociado en la lista de conjuntos de cifrado del mensaje clientHello . [ 11 ]

Tras verificar correctamente la autenticación del servidor y, si es necesario, intercambiar la clave secreta, el cliente envía un mensaje de confirmación para indicar que el proceso de establecimiento de la conexión ha finalizado. Al recibir este mensaje, el servidor envía otro mensaje de confirmación que indica que el establecimiento de la conexión se ha completado. Ahora, el cliente y el servidor han acordado qué conjunto de cifrado utilizar para comunicarse entre sí.

Representación visual de cómo un cliente y un servidor que operan en TLS 1.3 coordinan qué conjunto de cifrado utilizar.

Protocolo de enlace TLS 1.3

Si dos máquinas se comunican mediante TLS 1.3, coordinan qué conjunto de cifrado utilizar mediante el protocolo de enlace TLS 1.3. El protocolo de enlace en TLS 1.3 se redujo a un solo intercambio de datos, en comparación con los dos intercambios necesarios en versiones anteriores de TLS/SSL.

En primer lugar, el cliente envía un mensaje clientHello al servidor que contiene una lista de cifrados compatibles en orden de preferencia del cliente y realiza una suposición sobre qué algoritmo de clave se está utilizando para poder enviar una clave secreta que se pueda compartir si es necesario.

Al adivinar qué algoritmo de clave se está utilizando, se elimina un intercambio de mensajes. Tras recibir el mensaje clientHello , el servidor envía un mensaje serverHello con su clave, un certificado, el conjunto de cifrado elegido y el mensaje finalizado .

Si el bit prefer server cipher del mensaje serverHello está configurado como verdadero, se prefiere el conjunto de cifrado negociado en la lista de conjuntos de cifrado del mensaje serverHello ; de lo contrario, se prefiere el conjunto de cifrado negociado en la lista de conjuntos de cifrado del mensaje clientHello . [ 12 ]

Después de que el cliente recibe el mensaje final del servidor , ahora se coordina con el servidor sobre qué conjunto de cifrado utilizar. [ 13 ]

Algoritmos compatibles

En TLS 1.0–1.2

Para obtener más información sobre los algoritmos compatibles con TLS 1.0–1.2, consulte también: Seguridad de la capa de transporte §  Aplicaciones y adopción

TLS 1.3

En TLS 1.3, se eliminaron muchos algoritmos heredados que eran compatibles con versiones anteriores de TLS en un esfuerzo por hacer que el protocolo sea más seguro. [ 15 ] Además, todos los algoritmos de cifrado y autenticación se combinan en el algoritmo de cifrado de cifrado autenticado con datos asociados (AEAD). También se debe usar un algoritmo hash en la derivación de clave basada en HMAC ( HKDF ). [ 16 ] Se eliminaron todos los cifrados que no son AEAD debido a posibles debilidades o vulnerabilidades, y los cifrados deben usar un algoritmo de intercambio de claves efímeras para que se generen nuevos pares de claves para cada intercambio. [ 17 ]

DTLS con conjuntos de cifrado

El protocolo Datagram Transport Layer Security (DTLS) se basa en TLS, pero se utiliza específicamente para conexiones UDP en lugar de conexiones TCP . Dado que DTLS se basa en TLS, puede utilizar la mayoría de los conjuntos de cifrado descritos para TLS. Existen casos especiales que deben tenerse en cuenta al utilizar conjuntos de cifrado TLS con DTLS. DTLS no admite el cifrado de flujo RC4, lo que significa que ningún conjunto de cifrado TLS que utilice RC4 puede utilizarse con DTLS. [ 18 ]

Para determinar si un conjunto de cifrado TLS es compatible con DTLS, mirar su nombre no será de ayuda. Cada conjunto de cifrado TLS seguirá incluyendo el espacio del identificador TLS en su nombre. Por ejemplo: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 . En cambio, todos los registros de parámetros TLS ahora incluyen la bandera DTLS-OK para indicar si un conjunto de cifrado admite DTLS. [ 19 ]

Vulnerabilidades

La seguridad de un conjunto de cifrado depende de la calidad de sus algoritmos. Si la versión del algoritmo de cifrado o autenticación de un conjunto de cifrado presenta vulnerabilidades conocidas, tanto el conjunto como la conexión TLS podrían ser vulnerables. Por lo tanto, un ataque común contra TLS y los conjuntos de cifrado se conoce como ataque de degradación . Una degradación en TLS ocurre cuando un cliente moderno se conecta a servidores heredados que utilizan versiones antiguas de TLS o SSL.

Al iniciar un handshake, el cliente moderno ofrecerá el protocolo más alto que admita. Si la conexión falla, volverá a intentarlo automáticamente con un protocolo inferior como TLS 1.0 o SSL 3.0 hasta que el handshake sea exitoso con el servidor. El propósito de la degradación es que las nuevas versiones de TLS sean compatibles con las versiones anteriores. Sin embargo, es posible que un adversario se aproveche de esta característica y haga que un cliente degrade automáticamente a una versión de TLS o SSL que admita conjuntos de cifrado con algoritmos conocidos por su seguridad débil y vulnerabilidades. [ 20 ] Esto ha dado lugar a ataques como POODLE .

Una forma de evitar esta vulnerabilidad de seguridad es deshabilitar la capacidad de un servidor o cliente para degradar a SSL 3.0. El inconveniente de esta solución es que algunos dispositivos antiguos no pueden ser accedidos por dispositivos más nuevos. Si se requiere compatibilidad con SSL 3.0 para dispositivos antiguos, existe un conjunto de cifrado TLS_FALLBACK_SCSV aprobado que verifica que las degradaciones no se activen con fines maliciosos. [ 21 ]

Conjuntos de cifrado para dispositivos con recursos limitados

Los algoritmos de cifrado, intercambio de claves y autenticación suelen requerir una gran cantidad de potencia de procesamiento y memoria. Para brindar seguridad a dispositivos con recursos limitados, como los que alimentan el Internet de las cosas, se utilizan conjuntos de cifrado específicos. Dos ejemplos son:

  1. TLS_PSK_WITH_AES_128_CCM_8 ( clave precompartida ) [ 22 ]
  2. TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 ( clave pública sin procesar )

Cada uno de estos conjuntos de cifrado se ha implementado para ejecutarse en dispositivos con limitaciones de potencia de procesamiento y memoria. Ambos están implementados en el proyecto de código abierto TinyDTLS . La razón por la que pueden funcionar en estos dispositivos limitados es que se pueden implementar de forma ligera. Las implementaciones del conjunto de cifrado de clave precompartida utilizaron solo 1889 bytes de RAM y 38266 de ROM flash, lo que resulta muy eficiente en el uso de recursos en comparación con la mayoría de los algoritmos de cifrado y seguridad. [ 23 ] Este bajo consumo de memoria se debe a que estos conjuntos de cifrado utilizan algoritmos probados y eficientes que son seguros, aunque quizás no tan seguros como los algoritmos que requieren más recursos; por ejemplo: usar cifrado de 128 bits frente a cifrado de 256 bits. Además, utilizan clave precompartida o clave pública sin procesar , lo que requiere menos espacio de memoria y potencia de procesamiento en comparación con el uso de la infraestructura de clave pública tradicional (PKIX). [ 24 ]

Referencias de programación

En programación, un conjunto de cifrado se menciona tanto en plural como en singular. Cada uno tiene definiciones diferentes:

Conjunto de cifrados conjuntos de cifrados
una lista de las opciones criptográficas admitidas por el cliente. [ 25 ] Un ejemplo de cómo se suele usar cipher_suites durante el proceso de establecimiento de la conexión:
struct { ProtocolVersion client_version ; Random random ; SessionID session_id ; CipherSuite cipher_suites < 2 .. 2 ^ 16 - 2 >; CompressionMethod compression_methods < 1 .. 2 ^ 8 - 1 >; select ( extensions_present ) { case false : struct {}; case true : Extension extensions < 0 .. 2 ^ 16 - 1 >; }; } ClientHello ;
Conjunto de cifrado conjunto_de_cifrado
el conjunto de cifrado seleccionado por el servidor de entre los conjuntos de cifrado del cliente . [ 26 ] Un ejemplo de cómo se suele utilizar cipher_suite durante el proceso de establecimiento de la conexión:
struct { ProtocolVersion server_version ; Random random ; SessionID session_id ; CipherSuite cipher_suite ; CompressionMethod compression_method ; select ( extensions_present ) { case false : struct {}; case true : Extension extensions < 0 .. 2 ^ 16 - 1 >; }; } ServerHello ;

Véase también

Referencias

  1. "Conjuntos de cifrado en TLS/SSL (Schannel SSP) (Windows)" . docs.microsoft.com . Consultado el 2 de julio de 2018 .
  2. "Configuración de una lista de conjuntos de cifrado mediante TLS v1.3" . www.microfocus.com . Consultado el 30 de noviembre de 2023 .
  3. RFC 5246 
  4. Registro de conjuntos de cifrado TLS
  5. "El protocolo SSL 0.2" . www-archive.mozilla.org . Consultado el 7 de diciembre de 2017 .
  6. Elgamal, Taher; Hickman, Kipp EB (19 de abril de 1995). "draft-hickman-netscape-ssl-00" . tools.ietf.org . Consultado el 7 de diciembre de 2017 .
  7. "Especificación SSL 3.0" . www.freesoft.org . Consultado el 7 de diciembre de 2017 .
  8. Eric Rescorla (agosto de 2018). "El protocolo de seguridad de la capa de transporte (TLS) versión 1.3" . Grupo de trabajo de ingeniería de Internet. pág. 41. Consultado el 10 de marzo de 2026 . 
  9. "TLS1.3" . GitHub.com . OpenSSL. 10 de marzo de 2025. Consultado el 10 de marzo de 2026. Los nuevos conjuntos de cifrado se definen de manera diferente y no especifican el tipo de certificado (por ejemplo, RSA, DSA, ECDSA) ni el mecanismo de intercambio de claves (por ejemplo, DHE o ECDHE).
  10. Villanueva, John Carl. "Una introducción a los conjuntos de cifrado" . Recuperado el 25 de octubre de 2017 .
  11. "Mod_ssl - Servidor HTTP Apache Versión 2.4" .
  12. Rescorla, Eric (agosto de 2018). "El protocolo de seguridad de la capa de transporte (TLS) versión 1.3" .
  13. Valsorda, Filippo (23 de septiembre de 2016). "Una descripción general de TLS 1.3 y preguntas y respuestas" . El blog de Cloudflare . Recuperado el 1 de septiembre de 2020 .
  14. ECDHE_PSK con conjuntos de cifrado AES-GCM y AES-CCM para TLS 1.2 y DTLS 1.2 . IETF . doi : 10.17487/RFC8442 . RFC 8442 .
  15. "Soporte para el protocolo TLS 1.3 | Biblioteca SSL/TLS integrada wolfSSL" . wolfSSL . Consultado el 26 de octubre de 2017 .
  16. E. Rescorla (4 de noviembre de 2016). "El protocolo de seguridad de la capa de transporte (TLS) versión 1.3" . Recuperado el 11 de noviembre de 2016 .
  17. Sullivan, Nick (11 de agosto de 2018). "Una mirada detallada a RFC 8446 (también conocido como TLS 1.3)" . El blog de Cloudflare . Recuperado el 11 de agosto de 2020 .
  18. N., Modadugu; E., Rescorla (abril de 2006). "Seguridad de la capa de transporte de datagramas" . tools.ietf.org . Recuperado el 25 de octubre de 2017 .
  19. Eric, Rescorla; Nagendra, Modadugu (enero de 2012). "Seguridad de la capa de transporte de datagramas, versión 1.2" . tools.ietf.org . Consultado el 25 de octubre de 2017 .
  20. Bodo, Moeller; Adam, Langley (abril de 2015). "Valor de conjunto de cifrado de señalización de reserva TLS (SCSV) para prevenir ataques de degradación de protocolo" . tools.ietf.org . Consultado el 25 de octubre de 2017 .
  21. Bodo, Moeller; Adam, Langley (abril de 2015). "Valor de conjunto de cifrado de señalización de reserva TLS (SCSV) para prevenir ataques de degradación de protocolo" . tools.ietf.org . Consultado el 25 de octubre de 2017 .
  22. Daniel, Bailey; David, McGrew (julio de 2012). "Conjuntos de cifrado AES-CCM para seguridad de la capa de transporte (TLS)" . tools.ietf.org . Consultado el 26 de octubre de 2017 .
  23. Perelmen, Vladislav (29 de junio de 2012). "Seguridad en redes de sensores inalámbricas habilitadas para IPv6: una implementación de TLS/DTLS para el sistema operativo Contiki" (PDF) : 38. Archivado del original (PDF) el 29 de agosto de 2017. Recuperado el 7 de diciembre de 2017 .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  24. Samuel, Weiler; John, Gilmore; Hannes, Tschofenig; Tero, Kivinen; Paul, Wouters (junio de 2014). "Uso de claves públicas sin procesar en seguridad de la capa de transporte (TLS) y seguridad de la capa de transporte de datagramas (DTLS)" . tools.ietf.org . Consultado el 7 de diciembre de 2017 .
  25. RFC 5246 , pág. 41 
  26. RFC 5246 , págs. 42–43, 64