(Transport Layer Security/rfc8446)
(antes de TLS 1.0 $\rightarrow$ SSL, Secure Sockets Layer)
Ubicación de TLS dentro de la pila TCP/IP en aplicaciones HTTPS
Funcionalmente equivalente a un socket TCP aportándole:
PVK
PVK
$\dagger$) el certificado es una PBK
(veremos certificados en detalle en PKI)
$\ddagger$) PFS: Perfect Forward Secrecy implica no usar cifrado asimétrico
PVK
PVK
TLS es el succesor del SSL y ha ido evolucionando por diferentes versiones en respuesta a los diferentes ataques teóricos y prácticos que han ido surgiendo
los clientes cuando se conectan acuerdan utilizar la versión más moderna que soporten ambos extremos:
ClientHello
$\longrightarrow$
contiene un random, cipher-suites soportados, versión
$\longleftarrow$ ServerHello
contiene un random, session-ID, y la versión de TLS y el cipher-suite usado
$\longleftarrow$ Certificate
cadena de certificados incluyendo el del servidor
$\longleftarrow$ ServerKeyExchange
(si DHE) parámetros DH y su clave pública (efímera: InputSecret)
$\longleftarrow$ CertificateRequest
$\dagger$
(si el servidor requiere autenticación de cliente) DN's de las CA aceptadas
$\longleftarrow$ CertificateVerify
firma de los mensajes anteriores
Certificate
$\longrightarrow$
(si el servidor requiere autenticación de cliente) cadena de certificados incluyendo la del cliente
ClientKeyExchange
$\longrightarrow$
(si DHE) clave pública DH (efímera: InputSecret)
CertificateVerify
$\dagger$
$\longrightarrow$
(si el servidor requiere autenticación de cliente) firma de los mensajes anteriores
a partir de los dos InputSecret
se genera el MasterSecret
del MasterSecret
se derivan 4 claves y 2 IV:
InputSecretcliente
: $\alpha^i$
InputSecretservidor
: $\alpha^j$
MasterSecret
: $ = \alpha^{ij}$
En el caso de no usar DHE (ni ECDHE) el cliente debe enviar el MasterSecret
al servidor cifrándolo con la clave del servidor:
MasterSecret: PBKservidor(MasterSecretcliente)
En este caso (no-PFS) una revelación de la clave privada del servidor en cualquier momento, permite descifrar el tráfico futuro y también el tráfico pasado. Con PFS esto no sucede ya que las claves de efímeras (EDH ó ECDHE) cambian en cada acuerdo y no se almacenan nunca
los datos se fragmentan en bloques de hasta 16 kB
cada bloque está protegido por algoritmos simétricos acordados durante la inicialización y las claves y IV's
derivados de la MasterKey
...
y por un número de secuencia
Se identifican (aprox) con la cadena KEA_SIGN_WITH_CIPHER_HASH
Componente | Contenido |
KEA | algoritmo de acuerdo de claves |
SIGN | algoritmo de firma |
CIPHER | algoritmo de cifrado simétrico |
HASH | algoritmo de hash |
los siguientes cipher-suites son de obligada implementación (MUST):
{DHE|ECDHE}_ECDSA_WITH_AES_128_GCM_SHA256
{DHE|ECDHE}_RSA_WITH_AES_128_GCM_SHA256
y se recomienda la implementación de estos (SHOULD):
{DHE|ECDHE}_ECDSA_WITH_AES_256_GCM_SHA384
{DHE|ECDHE}_ECDSA_WITH_CHACHA20_POLY1305_SHA256
{DHE|ECDHE}_RSA_WITH_AES_256_GCM_SHA384
{DHE|ECDHE}_RSA_WITH_CHACHA20_POLY1305_SHA256
Notas:
DH-2048
, ECDH-256
, X25519
: longitudes mínimas para acuerdo de clavesRSA-2048
, ECDSA-256
, EdDSA25519
: longitudes mínimas para firmaDSA
, SHA-1
, SHA-224
, 3DES
Valores previstos para cada campo de KEA_SIGN_WITH_CIPHER_HASH
aunque pueden cambiar
Componente | Contenido |
KEA | DHE, ECDHE
$\quad \Rightarrow$ sólo variantes efímeras DH |
SIGN | RSA, ECDSA
$\quad \Rightarrow$ desaparece DSA |
CIPHER | AES-128, AES-256, ChaCha20
$\quad \Rightarrow$ desaparecen 3DES, RC4, |
HASH | SHA-2, Poly1305
$\quad \Rightarrow$ desaparecen MD5, SHA-1, SHA-2/224 |
TLS hasta la versión v1.2 permite configurar algoritmos obsoletos (v1.3 lo impide pero su publicación es muy reciente como para que todos los componentes lo hayan adoptado)
TLS hasta la versión v1.2 renegocia el mejor protocolo entre cliente y servidor. Un cliente "antiguo" puede forzar a usar o bien un cipher suite obsoleto o bien no dejarlo conectar
TLS_RSA_WITH_NULL_MD5
TLS_RSA_WITH_NULL_SHA
TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DH_anon_WITH_RC4_128_MD5
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA
TLS_DH_DSS_WITH_AES_128_CBC_SHA
TLS_DH_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DH_anon_WITH_AES_128_CBC_SHA
TLS_DH_DSS_WITH_AES_256_CBC_SHA
TLS_DH_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DH_anon_WITH_AES_256_CBC_SHA
TLS_DH_DSS_WITH_AES_128_CBC_SHA256
TLS_DH_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DH_anon_WITH_AES_128_CBC_SHA256
TLS_DH_DSS_WITH_AES_256_CBC_SHA256
TLS_DH_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DH_anon_WITH_AES_256_CBC_SHA256
|
TLS_ECDH_ECDSA_WITH_NULL_SHA
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_NULL_SHA
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDH_RSA_WITH_NULL_SHA
TLS_ECDH_RSA_WITH_RC4_128_SHA
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_NULL_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_anon_WITH_NULL_SHA
TLS_ECDH_anon_WITH_RC4_128_SHA
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_anon_WITH_AES_128_CBC_SHA
TLS_ECDH_anon_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
|
en la versión v1.3 se han eliminado cualquier algoritmo que resulte en un cipher-suite inseguro, facilitando la configuración segura de los servidores
⇒ eliminados NULL, ANON, sin acuerdo de claves, con acuerdo de claves no efímero, SHA-1, 3DES, DSS (DSA)
la lista de cipher-suites que se mantiene en v1.3 es:
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|
se debe vigilar que RSA y DHE sean de 2048 bit o más, y que ECDSA y ECDH usen P-256, P-384, P-521, Curve25519 ó Curve448
problema: S.O. antiguos no podrán conectarse
un ataque que revele una clave privada implica que se debe cambiar la clave privada
pero si no se usa _DHE_
ó _ECDHE_
el revelado de la clave privada permite el descifrado de tráfico pasado
problema: S.O. antiguos no podrán conectarse
hay muchas implementaciones de TLS: es recomendable usar implementaciones abiertas y ampliamente usadas (e.g. OpenSSL); pero también esto implica hay más difusión de herramientas para explotar las vulnerabilidades cuando las haya
los datos se protegen con CIPHER_HASH
$\downarrow$
derivadas con KEA
$\downarrow$
autenticadas (los secretos) con SIGN
$\downarrow$
Claves públicas de servidor y cliente (opcionalmente)
?