TLS

(Transport Layer Security/rfc5246)

(abans de TLS 1.0 $\rightarrow$ SSL, Secure Sockets Layer)

Creative Commons License
“Curs d'Introducció a la criptografia” by Jordi Íñigo Griera is licensed under a
Creative Commons Attribution 4.0 International License.
Project hosted at github.com/jig/crypto

xarxa

Ubicació de TLS dins la pila TCP/IP en aplicacions HTTPS

Layer 1 HTTP TLS TCP IP Ethernet HTTPS

TLS: funcions

Funcionalment equivalent a un socket TCP aportant-hi:

  • autenticitat: Clau pública
    • autenticació mútua: client i servidor tenen certificat/PVK
    • autenticació de servidor: al client no li cal certificat/PVK
  • integritat: HMAC/MAC
  • confidencialitat: acord de claus + xifrat simètric
  • confidencialitat persistent* (opcional fins TLS v1.2)


*) PFS: Perfect Forward Secrecy; acord de claus independent de l'autenticació

TLS: autenticació

  • autenticació mútua: client i servidor tenen certificat/PVK
  • autenticació de servidor: al client no li cal certificat/PVK

  • servidor: clau privada habitualment en fitxer en clar protegit únicament pel SO (ACL) o en HSM amb activació automàtica
  • client:
    • sense autenticació de client: anònim, usuari i contrasenya, etc.
    • amb autenticació de client: fitxer PKCS #12, o accedint a un HSM en forma d'SmartCard o de token USB via llibreria PKCS #11

TLS: història

TLS és el successor de l'SSL i ha anat evolucionant per diferents versions en resposta als diferents atacs teòrics i pràctics que han anat sortint

els clients quan es connecten acorden fer servir la versió més moderna que suportin ambdós extrems:

  • SSL 3.0 $\rightarrow$ obsolet
  • TLS 1.0 $\rightarrow$ mínim versió del protocol utilitzable
  • TLS 1.1
  • TLS 1.2 $\rightarrow$ versió recomanda
  • TLS 1.3 draft $\rightarrow$ es força a utilitzar DHE/ECDHE per acord de claus

inicialització (resum; suposant caché TLS buida) *

ClientHello $\longrightarrow$
conté un random, cipher-suites suportats, versió

$\longleftarrow$ ServerHello
conté un random, session-ID, i la versió de TLS i el cipher-suite usat

$\longleftarrow$ Certificate
cadena de certificats incloent el del servidor

$\longleftarrow$ ServerKeyExchange
(si DHE) paràmetres DH i la seva clau pública (efímera: InputSecret)

$\longleftarrow$ CertificateRequest$\dagger$
(si el servidor requereix autenticació de client) DN's de les CA acceptades

$\longleftarrow$ CertificateVerify
signatura dels missatges anteriors

Certificate $\longrightarrow$
(si el servidor requereix autenticació de client) cadena de certificats incloent la del client

ClientKeyExchange $\longrightarrow$
(si DHE) clau pública DH (efímera: InputSecret)

CertificateVerify$\dagger$ $\longrightarrow$
(si el servidor requereix autenticació de client) signatura dels missatges anteriors

Protocol: inicialització

a partir dels dos InputSecret es genera el MasterSecret

del MasterSecret se'n deriven 4 claus i 2 IV:

  • clau de xifrat de client a servidor (i viceversa)
  • IV, pel xifrat de client a servidor (i viceversa)
  • clau HMAC de client a servidor (i viceversa)

protocol: transport (record)

les dades es fragmenten en blocs de fins 16 kB

cada bloc està protegit pels algorismes simètrics acordats durant la inicialització i les claus i IV's derivats de la MasterKey...

i per un nombre de seqüència

Cipher suites

S'identifiquen (aprox) amb la cadena KEA_SIGN_WITH_CIPHER_HASH

Component Contingut
KEAalgorisme d'acord de claus
SIGNalgorisme de signatura
CIPHERalgorisme de xifrat simètric
HASHalgorisme de hash

Algorismes a TLS v1.3 (esborrany-18/git)

els següents cipher-suites són d'obligatòria implementació (MUST):

{DHE|ECDHE}_ECDSA_WITH_AES_128_GCM_SHA256
{DHE|ECDHE}_RSA_WITH_AES_128_GCM_SHA256

i es recomana l'implementació d'aquests (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

Notes:

  • eliminació d'acord de claus no efímers
  • RSA-2048, ECDSA-224, ECDH-224: longituds mínimes;
  • desapareixen DSA, SHA-1, SHA-224, 3DES

Cipher suites

Valors previstos per a cada camp de KEA_SIGN_WITH_CIPHER_HASH
encara que poden canviar

Component Contingut
KEADHE, ECDHE
$\quad \Rightarrow$ només variants efímeres DH
SIGNRSA, ECDSA
$\quad \Rightarrow$ desapareix DSA
CIPHERAES-128, AES-256, ChaCha20
$\quad \Rightarrow$ desapareixen 3DES, RC4,
HASHSHA-2, Poly1305
$\quad \Rightarrow$ desapareixen MD5, SHA-1, SHA-2/224

Confiança

les dades es protegeixen amb CIPHER_HASH

$\downarrow$

derivades amb KEA

$\downarrow$

autenticats (els secrets) amb SIGN

$\downarrow$

Claus públiques de servidor i client (opcionalment)
?