TLS (Transport Secure Layer)
Ahmed Serhrouchni
Telecom ParisTech
as@[Link]
Plan
• 1. CONTEXTE
– 1.1 Historique, Standardisation
– 1.2 Contexte: configuration et outils
• 2. Architecture et fonctionnalités
– 2.1 Services et mécanismes cryptographiques
– 2.2 Composantes protocolaires et services
– 2.3 Distribution de TLS
• 3. Protocoles TLS
– 3.1 Handshake
– 3.2 Record, Alert, CCS
• 4. Protocole TLS1.3
– 4.1 Apports et mécanismes
– 4.2 Handshake
– 4.3 Scénarios
• 4. Analyse et perspectives
– 4.1 Gestion des certificats
– 4.2 Faiblesses et attaques
– 4.3 Conclusion
2
Contexte: Historique, Standardisation
• Probablement le protocole de sécurité le plus
déployé
– grâce à son intégration aux browsers
– fonctionne aux niveau applicative
• En dehors du noyau
– ne nécessite pas une configuration particulière
du côté client
• Sécurisation des échanges applicatives
– totalement transparente
– de la famille TCP/IP
3
Contexte: Historique, Standardisation
• Initialement SSL a été défini par netsacpe et
intégré au browser Navigator
• SSL V1.0 (~Début 1994)
– Testé en interne, jamais diffusé
• SSL V2.0 (~Fin 1994)
– Encore supporté par les browsers et serveurs
mais très déconseillé
• RFC 6176: Prohibiting SSLv2
– « Maintenu pour raison de compatibilité »
4
Contexte: Historique, Standardisation
• SSL V3.0 (~Début 1997)
– Version actuelle supportée par tous jusqu’en
2013
• Récemment prohibé
– Attaque de Bleichenbacher sur PKCS#1 v1.5
• Capacité de distinguer deux types d’erreurs
(padding du CKE et Finished) + temps de
réponse!!
– Attaque POODLE en 2014
– RFC7568 prône la désactivation de SSLv3.0
5
Contexte: Historique, Standardisation
• TLS V1.0 - Janvier 1999 RFC2246
– Basé sur SSL V3.0
– Automate semblable à SSL V3.0
• Pas d’interopérabilité avec SSL V3.0
• Calcul sur la base de fonctions de hachage différents
• Introduction d’algo. crypto. libre (DSA, DH)
• Correction de Attaque de Bleichenbacher
– Apporte les extensions
– Extension SNI (Server Name Indication)
• RFC3546 intégré à TLS1.0
• Plusieurs sites sur la même adresse IP
– Des suites cryptographiques faibles
– PCI-DSS 3.2 préconise l’arrêt en Juin/2018
• Payment Card Industry Security Standard Council
6
Contexte: Historique, Standardisation
• WTLS (2001)
– Wireless Transport Layer Security
– Standard au sein du WAP Forum
– Automate semblable à SSL V3.0
• Pas d’interopérabilité avec TLS V1.0
• Taille de quelques paramètres diffèrent
• Des certificats spécifiques «légers»
– WTLS devenu «End-to-end Transport Layer
Security Specification »
7
Contexte: Historique, Standardisation
• TLS V1.1 RFC4346
– Correction de l’attaque de Rogway (BEAST)
(2002) sur le mode CBC
– Consolide TLS1.0
• TLS1.2 RFC5246
– Surtout AEAD (Authenticated Encryption with Associeted Data)
– Mode opératoire CCM et GCM RFC5116
– Inclusion des extensions dans le standard et d’autres RFC
– Ajout de suites cryptographiques HMAC SHA2,
AES-GCM, AES-CCM, Chacha20-Poly1305,
ECDHE
– …..mais maintien les anciennes « cipher suites »
8
Contexte: Historique, Standardisation
• TLS V1.3 RFC8446 – 08/2018
– Algorithmes « fort » obligatoires.
– Optimisation du handshake
– Extensions chiffrés
– … et aussi facilité de la configuration
• Qualys: test labs
– Statistiques sur les versions supportées
• [Link]
9
Contexte: Historique, Standardisation
• Plusieurs autres contributions:
– RFC2246 TLS Protocol Version 1.0
– RFC2716 EAP TLS Authentication Protocol
– RFC3546 TLS Extensions
– RFC4279 Pre-Shared Key Ciphersuites for TLS
– RFC4346 TLS Protocol Version 1.1
– RFC5216 The EAP-TLS Authentication Protocol
– RFC5246 TLS Protocol Version 1.2
– RFC4347 Datagram Transport Layer Security
– RFC8446 TLS Protocol Version 1.3
10
Contexte: configuration et outils
• Intégrer à tous les Browsers ou User Agents
– Firefox, IE, Safari, Opera, Outlook, Thunderbird, …
– Apache, NGINX, IIS, Postfix, Exchange, …
• Nécessité d’un magasin de certificats
– Propre à chaque distribution (faiblesse principale)
– Configuration spécifique
• Configuration propre à chaque distribution
client/serveur
– Difficile pour certains clients!
• Interopérabilité assuré entre client/serveur
11
Contexte: configuration et outils
• Firefox
– about:config ensuite un filtre sur security
• IE (configuration du module FIPS140-2)
– HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled 1
– [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders
\SCHANNEL\Ciphers\RC4 128/128] "Enabled"=dword:00000000
– [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders
\SCHANNEL\Ciphers\RC4 40/128] "Enabled"=dword:00000000
– [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders
\SCHANNEL\Ciphers\RC4 56/128] "Enabled"=dword:00000000
• Chrome
– [Link] --cipher-suite-blacklist=0x0004,0x005
• 0x0004 = RSA-RC4128-MD5
• 0x0005 = RSA-RC4128-SHA
12
Contexte: configuration et outils
• Test d’un client TLS:
– [Link]
– [Link]
• Test d’un serveur TLS + générateur de config
– /[Link]
– openssl s_client –host adresse -port port –tls1 –cipher xxx
– nmap --script ssl-enum-ciphers [Link]
– [Link]
– [Link]
13
Contexte: distribution de TLS
• Openssl
– [Link]
• GnuTLS
– https:// [Link]/
• LibreSSL: fork de OpenSSL (OpenBSD)
– https:// [Link]/
• BoringSSL: fork de Openssl, intégré à Chrome
– [Link]
• Schannel Microsoft
– HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet
Settings
• PolarSSL, Transport de Apple, NSS de Netscape, …
14
Architecture et fonctionnalités:
Services et mécanismes cryptographiques
• TLS/SSL au dessus du transport
– Avantage: au niveau « user space »
– de bout en bout
– Problème avec proxy/reverse proxy
– Problème avec la compression en entrée des WAN
• TLS/SSL au dessus d’un lien fiable
– EAPoL
• DTLS au dessus du protocole UDP
– Automate et mécanisme identique à TLS
– TLS + Mécanisme de timeout et de retransmission
15
Architecture et fonctionnalités:
Services et mécanismes cryptographiques
NFS
FTP SMTP HTTP Telnet XDR
TLS/SSL SNMP RPC
TCP UDP
IP
16
Architecture et fonctionnalités:
Services et mécanismes cryptographiques
Protocole Port Protocole non Application
sécurisé sécurisé
HTTPS 443 HTTP Transactions requête-
réponse sécurisées
SSMTP 465 SMTP Messagerie électronique
SNNTP 563 NNTP News sur le réseau Internet
SSL-LDAP 636 LDAP Annuaire X.500 allégé
SPOP3 995 POP3 Accès distant à la boîte aux
lettres avec rapatriement des
messages
17
Architecture et fonctionnalités:
Services et mécanismes cryptographiques
Protocole Port Protocole non Application
sécurisé sécurisé
FTP-DATA 889 FTP Transfert de fichiers
FTPS 990 FTP Contrôle du transfert de fichiers
IMAPS 991 IMAP4 Accès distant à la boîte aux lettres avec ou
sans rapatriement des messages
TELNETS 992 Telnet Protocole d’accès distant à un système
informatique
IRCS 993 IRC Protocole de conférence par l’écrit
18
Architecture et fonctionnalités:
Services et mécanismes cryptographiques
• Authentification
– Serveur (obligatoire), client (optionnel)
– Utilisation de certificat X509 V3
– A l’établissement de la session.
• Confidentialité
– Algorithme de chiffrement symétrique négocié, clé
généré à l’établissement de la session.
• Intégrité
– Fonction de hachage avec clé secrète
– hmac(clé secrète, h, Message)
• Non Rejeu
– Numéro de séquence
19
Architecture et fonctionnalités: RFC5246
Services et mécanismes cryptographiques
Appendix C. Cipher Suite Definitions
Cipher Suite Key Cipher Mac
Exchange
TLS_NULL_WITH_NULL_NULL NULL NULL NULL
TLS_RSA_WITH_NULL_MD5 RSA NULL MD5
TLS_RSA_WITH_NULL_SHA RSA NULL SHA
TLS_RSA_WITH_NULL_SHA256 RSA NULL SHA256
TLS_RSA_WITH_RC4_128_MD5 RSA RC4_128 MD5
TLS_RSA_WITH_RC4_128_SHA RSA RC4_128 SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA RSA 3DES_EDE_CBC SHA
TLS_RSA_WITH_AES_128_CBC_SHA RSA AES_128_CBC SHA
TLS_RSA_WITH_AES_256_CBC_SHA RSA AES_256_CBC SHA
TLS_RSA_WITH_AES_128_CBC_SHA256 RSA AES_128_CBC SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256 RSA AES_256_CBC SHA256
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA DH_DSS 3DES_EDE_CBC SHA
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA DH_RSA 3DES_EDE_CBC SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA DHE_DSS 3DES_EDE_CBC SHA
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA DHE_RSA 3DES_EDE_CBC SHA
TLS_DH_anon_WITH_RC4_128_MD5 DH_anon RC4_128 MD5
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA DH_anon 3DES_EDE_CBC SHA
20
Architecture et fonctionnalités: RFC5246
Services et mécanismes cryptographiques
• Suite …
TLS_DH_DSS_WITH_AES_128_CBC_SHA DH_DSS AES_128_CBC SHA
TLS_DH_RSA_WITH_AES_128_CBC_SHA DH_RSA AES_128_CBC SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA DHE_DSS AES_128_CBC SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA DHE_RSA AES_128_CBC SHA
TLS_DH_anon_WITH_AES_128_CBC_SHA DH_anon AES_128_CBC SHA
TLS_DH_DSS_WITH_AES_256_CBC_SHA DH_DSS AES_256_CBC SHA
TLS_DH_RSA_WITH_AES_256_CBC_SHA DH_RSA AES_256_CBC SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA DHE_DSS AES_256_CBC SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA DHE_RSA AES_256_CBC SHA
TLS_DH_anon_WITH_AES_256_CBC_SHA DH_anon AES_256_CBC SHA
TLS_DH_DSS_WITH_AES_128_CBC_SHA256 DH_DSS AES_128_CBC SHA256
TLS_DH_RSA_WITH_AES_128_CBC_SHA256 DH_RSA AES_128_CBC SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 DHE_DSS AES_128_CBC SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE_RSA AES_128_CBC SHA256
TLS_DH_anon_WITH_AES_128_CBC_SHA256 DH_anon AES_128_CBC SHA256
TLS_DH_DSS_WITH_AES_256_CBC_SHA256 DH_DSS AES_256_CBC SHA256
TLS_DH_RSA_WITH_AES_256_CBC_SHA256 DH_RSA AES_256_CBC SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 DHE_DSS AES_256_CBC SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 DHE_RSA AES_256_CBC SHA256
TLS_DH_anon_WITH_AES_256_CBC_SHA256 DH_anon AES_256_CBC SHA256
21
Architecture et fonctionnalités:
Composantes protocolaires et services
Application
TLS&SSL
Handshake
Alert CCS
Record
TCP
22
Architecture et fonctionnalités:
Composantes protocolaires et services
struct { ContentType type;
ProtocolVersion version;
uint16 length;
opaque fra[[Link]];
} TLSPlaintext;
struct {
uint8 major, minor;
} ProtocolVersion;
SSL V3.0 => major= 3, minor= 0
TLS V1.0 => major= 3, minor= 1
TLS V1.1 => major= 3, minor= 2
enum { change_cipher_spec(20),
alert(21),
handshake(22),
application_data(23),
(255)
} ContentType;
23
Architecture et fonctionnalités:
Composantes protocolaires et services
Application Protocol
Handshake Protocol
CCS Protocol
Alert Protocol
Content type version long. total Payload Record Protocol
24
Protocole TLS: Handshake
• Tout de suite après la connexion TCP
– Ouverture d’une session
• durée de vie indépendante de la cx TCP
• authentification à l’établissement de la session
• Négociation des ciphersuite
• Etablissement de paramètres de session
• Génération de clés
– Réouverture d’une session
– Rafraichissement des clés en cours de
session
25
Protocole TLS: Handshake
Ouverture d'une
session TLS
Client Serveur
Client Hello
Serveur Hello
Certificate
(Serveur Key Exchange)
(Certificate Request)
Server Hello Done
(Certificate)
Client Key Exchange
(Certificate Verify)
ChangeCipherSpec
Finished
ChangeCipherSpec
Finished
Application Data
Application Data
26
Protocole TLS: Handshake
Ouverture d'une
connexion
Client Serveur
Client Hello
Serveur Hello
ChangeCipherSpec
Finished
ChangeCipherSpec
Finished
Application Data
27
Protocole TLS: Handshake
PDU du protocole Handshake
struct{
HandshakeType msg_type;
uint24 length;
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case server_key_exchange: ServerKeyExchange;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
} body;
} Handshake;
28
Protocole TLS: Handshake
PDU du protocole Handshake
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-1>;
CompressionMethod compression_methods<1..2^8-1>;
Extension client_hello_extension_list<0..2^16-1>;
} ClientHello;
struct {
ProtocolVersion server_version;
Random random;
SessionID session_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
Extension server_hello_extension_list<0..2^16-1>;
} ServerHello;
29
Protocole TLS: Handshake
PDU du protocole Handshake : 21 extensions sont définis
enum {
server_name(0), max_fragment_length(1),
client_certificate_url(2),trusted_ca_keys(3),
truncated_hmac(4), status_request(5), …
(65535)
} ExtensionType;
Nom de Valeur Document de Année de
l’extension référence publication
server_name 0 RFC 6066 2011
max_fragt_length 1 RFC 6066 2011
30
Protocole TLS: Handshake
• Extensions (suite)
client_cert_url 2 RFC 6066 2011
trusted_ca_keys 3 RFC 6066 2011
truncated_hmac 4 RFC 6066 2011
status_request 5 RFC 6066 2011
user_mapping 6 RFC 4681 2006
client_authz 7 RFC 5878 2010
server_authz 8 RFC 5878 2010
cert_type 9 RFC 6091 2011
elliptic_curves 10 RFC 4492 2006
ec_pt_formats 11 RFC 4492 2006
31
Protocole TLS: Handshake
• Extensions (suite)
srp 12 RFC 5054 2007
signature_alg 13 RFC 5246 2008
use_srtp 14 RFC 5764 2010
heartbeat 15 RFC 6520 2012
appli prot_nego 16 Draft-friedl-tls- 2013
status_req_v2 17 RFC-ietf-tls- 2013
multiple-cert[…]
signed_certe_ti 18 RFC-laurie- 2013
SessTicket TLS 35 RFC 4507 2006
- 36-65280 - -
renego_info 65281 RFC 5746 2010
- 65282-65535 - -
32
Protocole TLS: Handshake
PDU du protocole Handshake
struct {
select (KeyExchangeAlgorithm) {
case dh_anon:
ServerDHParams params;
case dhe_dss:
case dhe_rsa:
ServerDHParams params;
digitally-signed struct {
opaque client_random[32];
opaque server_random[32];
ServerDHParams params;
} signed_params;
case rsa:
case dh_dss:
case dh_rsa:
struct {} ;
/* message is omitted for rsa, dh_dss, and
dh_rsa */
/* may be extended, e.g., for ECDH -- see [TLSECC]
*/
} ServerKeyExchange;
33
Protocole TLS: Handshake
PDU du protocole Handshake
enum {
rsa_sign(1), dss_sign(2), rsa_fixed_dh(3),
dss_fixed_dh(4),rsa_ephemeral_dh_RESERVED(5),
dss_ephemeral_dh_RESERVED(6),
fortezza_dms_RESERVED(20),(255)
} ClientCertificateType;
34
Protocole TLS: Handshake
PDU du protocole Handshake
struct {
select (KeyExchangeAlgorithm) {
case rsa:
EncryptedPreMasterSecret;
case dhe_dss:
case dhe_rsa:
case dh_dss:
case dh_rsa:
case dh_anon:
ClientDiffieHellmanPublic;
} exchange_keys;
} ClientKeyExchange;
35
Protocole TLS: Handshake
PDU du protocole Handshake
struct {
ProtocolVersion client_version;
opaque random[46];
} PreMasterSecret;
struct {
public-key-encrypted PreMasterSecret
pre_master_secret;
} EncryptedPreMasterSecret;
struct {
opaque verify_data[verify_data_length];
} Finished;
36
Protocole TLS: Handshake
Message Type de Sens de Signification
message transmission
HelloRequest optionnel serveur client Ce message demande au client d'entamer
le Handshake.
ClientHello obligatoire client serveur Ce message contient :
le numéro de version du protocole SSL ;
le nombre aléatoire : client_random ;
l'identificateur de session : session_ID ;
la liste des suites de chiffrement choisies
par le client ;
la liste des méthodes de compression
choisies par le client.
ServerHello obligatoire serveur client Ce message contient :
le numéro de version du protocole SSL ;
un nombre aléatoire : serveur_random ;
l'identificateur de session : session_ID ;
une suite de chiffrement ;
une méthode de compression.
37
Protocole TLS: Handshake
Certificate Optionnel serveur client Ce message contient le certificat du
client serveur serveur ou celui du client si le serveur le lui
réclame et que le client en possède un.
ServerKeyExchange Optionnel serveur client Ce message est envoyé par le serveur que
s’il ne possède aucun certificat, ou
seulement un certificat de signature.
CertificateRequest Optionnel serveur client Par ce message, le serveur réclame un
certificat au client.
ServerHelloDone Obligatoire serveur client Ce message signale la fin de l’envoi des
messages ServerHello et subséquents.
38
Protocole TLS: Handshake
ClientKeyExchange Obligatoire client serveur Ce message contient le PreMasterSecret
crypté à l’aide de la clé publique du
serveur.
CertificateVerify Optionnel client serveur Ce message permet une vérification
explicite du certificat du client.
Finished obligatoire serveur client Ce message signale la fin du protocole
client serveur Handshake et le début de l’émission des
données protégées avec les nouveaux
paramètres négociés.
39
Protocole TLS: Record, Alert, CCS
• Reçoit les données des couches supérieures : (Handshake,
Alert, CCS, HTTP, FTP ...), et les transmet au protocole TCP.
• Après application de :
- la fragmentation des données en blocs de taille
maximum de 214 octets
- la compression des données, fonction prévue mais non
supportée actuellement
- la génération d’un condensât pour assurer le service
d’intégrité
- le chiffrement des données pour assurer le service de
confidentialité
40
Protocole TLS: Record, Alert, CCS
• Le protocole Record
assure:
– La fragmentation
– La compression
– Le MAC
– Le chiffrement, et
– La transmission des
données.
41
Protocole TLS: Record, Alert, CCS
• Le protocole Alert peut être invoqué par:
– l’application,
- pour signaler la fin d’une connexion
- le protocole Handshake
- suite à un problème survenu au cours de son
déroulement
- la couche Record
• si l'intégrité d'un message est mise en doute
42
Protocole TLS: Record, Alert, CCS
enum {
warning(1), fatal(2), (255) } AlertLevel;
enum {
close_notify(0),
unexpected_message(10),
bad_record_mac(20),
decryption_failed(21),
record_overflow(22),
decompression_failure(30),
handshake_failure(40),
no_certificate_RESERVED (41),
bad_certificate(42),
unsupported_certificate(43),
certificate_revoked(44),
43
Protocole TLS: Record, Alert, CCS
/* suite …
certificate_unknown(46),
illegal_parameter(47),
unknown_ca(48),
access_denied(49),
decode_error(50),
decrypt_error(51),
export_restriction_RESERVED(60),
protocol_version(70),
insufficient_security(71),
internal_error(80),
user_canceled(90),
no_renegotiation(100),
(255)
} AlertDescription; 44
Protocole TLS: Record, Alert, CCS
• ChangeCipherSpec signale au Record toute
modification des paramètres de sécurité,
• Constitué d’un message (1 octet)
45
Analyse et perspectives:
Perspectives avec TLS1.3
• Réduire la latence du Handshake à 1 RTT
– 0-RTT
• Exiger des ciphersuites ROBUSTES
• Chiffrer un maximum de message du Handshake
• Eliminer les fonctions inutiles et un code plus
compact
– Réduire les options
• Interdire la renégociation pour le «backward
compatibility»
– Eliminer : la renégociation, le message CCS
• Eliminer « length field » qui n’est pas nécessaire
• …. 46
TLS1.3: les extensions
enum {
server_name(0), /* RFC 6066 */
max_fragment_length(1), /* RFC 6066 */
status_request(5), /* RFC 6066 */
supported_groups(10), /* RFC 8422, 7919 */
signature_algorithms(13), /* RFC 8446 */
use_srtp(14), /* RFC 5764 */
heartbeat(15), /* RFC 6520 */
app_layer_proto_nego (16), /* RFC 7301 */
signed_cert_timestamp(18), /* RFC 6962 */
client_certificate_type(19), /* RFC 7250 */
server_certificate_type(20), /* RFC 7250 */
padding(21), /* RFC 7685 */
…. } ExtensionType;
47
TLS1.3: les extensions (suite)
enum {
…
pre_shared_key(41), /* RFC 8446 */
early_data(42), /* RFC 8446 */
supported_versions(43), /* RFC 8446 */
cookie(44), /* RFC 8446 */
psk_key_exchange_modes(45), /* RFC 8446 */
certificate_authorities(47), /* RFC 8446 */
oid_filters(48), /* RFC 8446 */
post_handshake_auth(49), /* RFC 8446 */
signature_algorithms_cert(50), /* RFC 8446 */
key_share(51), /* RFC 8446 */
(65535) } ExtensionType;
48
TLS1.3: les suites de chiffrement
(obligatoires)
• AEAD: Authenticated Encryption with Associated Data
• TLS_AES_128_GCM_SHA256 0x1301
• TLS_AES_256_GCM_SHA384 0x1302
• TLS_CHACHA20_POLY1305_SHA256 0x1303
• TLS_AES_128_CCM_SHA256 0x1304
• TLS_AES_128_CCM_8_SHA256 0x1305
49
TLS1.3: les suites de chiffrement
(obligatoires)
• AEAD: Authenticated Encryption with Associated Data
• TLS_AES_128_GCM_SHA256 0x1301
• TLS_AES_256_GCM_SHA384 0x1302
• TLS_CHACHA20_POLY1305_SHA256 0x1303
• TLS_AES_128_CCM_SHA256 0x1304
• TLS_AES_128_CCM_8_SHA256 0x1305
50
TLS1.3: les algorithmes asymétriques
(obligatoires)
• Pour la signature:
• rsa_pkcs1_sha256
• rsa_pss_rsae_sha256
• ecdsa_secp256r1_sha256.
• Pour l’échange des clés
• Secp256r1 (NIST P-256)
• X25519 [RFC7748].
51
Modèle de chiffrement des données
• Encrypt-then-MAC (EtM) (TLS1.2)
Source: wikipedia
52
Modèle de chiffrement des données
• MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2)
Source: wikipedia
53
Modèle de chiffrement des données
• MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2)
Source: wikipedia
54
AES-GCM (NIST SP800-38D) Chiffrement
Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn
k AES k AES k AES k AES k AES
m1 m2 mn-1 mn
C1 C2 Cn- Cn
1
… • AES GCM Operation Mode
H = E(K, 0128)
H Mult H Mult H Mult … H Mult H Mult
Ctr0 = IV II 0311
Ctri= Incr(CTRi−1)
if len(IV ) = 96
for i = 1,...,n
Ci = Mi ⊕ E(K, Ctri) for i = 1,...,n − 1
Len(M) II Len (C) Cn= Mn ⊕MSBu(E(K, Ctrn))
AAD
AuthTAG = MSBt(GHASH(H, M, C) ⊕ E(K, Ctr0))
H Mult
AuthTA
55 G
AES-GCM (NIST SP800-38D)
Déchiffrement + Authentification
Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn
k AES k AES k AES k AES k AES
m1 m2 mn-1 mn
C1 C2 Cn- Cn
1
AES GCM Operation Mode
…
H = E(K, 0128)
Ctr0 = IV II 0311 if len(IV ) = 96
H Mult H Mult H Mult …H Mult H Mult
Ctri= Incr(CTRi−1)
Mi = Ci ⊕ E(K, Ctri)
for i = 1,...,n
for i = 1,...,n − 1
Mn= Cn ⊕MSBu(E(K, Ctrn))
Len(M) II Len (C) AuthTAG = MSBt(GHASH(H, M, C) ⊕ E(K, Ctr0))
AAD
H Mult
AuthTA
56 G
AES-GCM (NIST SP800-38D)
Application au protocole ModBus
7 253
Bytes Bytes
TransID
UnitID
Protocol ID Len
FC Data
2 2 2 1 1 252 Byte
Bytes Bytes Bytes Byte Byte
Additional Authenticated Message M = FC+DATA
Data = HEADER
AES-128-
k
GCM
Header IV Cipher Text AuthTAG
12 Bytes
7
Bytes
12
Bytes
253
Bytes 57
Record Protocol
• AEADEncrypted =
AEAD-Encrypt(write_key, nonce, additional_data, plaintext)
• PlainText =
AEAD-Decrypt(peer_write_key, nonce, additional_data, AEADEncrypted)
58
Protocole Handshake
struct {
HandshakeType msg_type; /* handshake type */
uint24 length; /* bytes in message */
select (Handshake.msg_type) {
case client_hello: ClientHello;
case server_hello: ServerHello;
case end_of_early_data: EndOfEarlyData;
case encrypted_extensions: EncryptedExtensions;
case certificate_request: CertificateRequest;
case certificate: Certificate;
case certificate_verify: CertificateVerify;
case finished: Finished;
case new_session_ticket: NewSessionTicket;
case key_update: KeyUpdate; };
} Handshake;
59
Handshake:
Etablissement de session avec partage du PSK
Client Server
Initial Handshake:
ClientHello
+ key_share -------->
ServerHello
+ key_share
{EncryptedExtensions}
{CertificateRequest*}
{Certificate*}
{CertificateVerify*}
{Finished}
<-------- [Application Data*]
{Certificate*}
{CertificateVerify*}
{Finished} -------->
<-------- [NewSessionTicket]
[Application Data] <-------> [Application Data]
60
Handshake:
Etablissement de session avec 0-RTT
Client Server
ClientHello
+ early_data
+ key_share*
+ psk_key_exchange_modes
+ pre_shared_key
(Application Data*) -------->
ServerHello
+ pre_shared_key
+ key_share*
{EncryptedExtensions}
+ early_data*
{Finished}
<-------- [Application Data*]
(EndOfEarlyData)
{Finished} -------->
[Application Data] <-------> [Application Data]
61
Handshake:
Reprise de session avec PSK
Client Server
ClientHello
+ key_share*
+ pre_shared_key -------->
ServerHello
+ pre_shared_key
+ key_share*
{EncryptedExtensions}
{Finished}
<-------- [Application Data*]
{Finished} -------->
[Application Data] <-------> [Application Data]
62
Analyse et perspectives:
Gestion des certificats
• Magasin de certificat propre à chaque éditeur ou
application
– problème de confiance
• certificat avec label EV
• certificat qualifié
– problème d’intégrité
• Corruption du magasin.
– Fausse autorité: Pays-Bas, …
• Autorité de certification
– Absence de standard dans la politique de certification.
• Emission de faux certificats: microsoft (verisign), google
(comodo), …
63
Analyse et perspectives:
Gestion des certificats
• Configuration par défaut
– flexible (absence de vérification de la révocation)
– Chaîne de certificat longue
• latence dans la vérification
• Solution
– Magasin scellé
• Choix pris dans les réseaux véhiculaires
– Vérification au niveau du HSM
• Choix des banquiers
– Serveur mutualisé RFC5055:
• Server-Based Certificate Validation Protocol (SCVP)
• Centralisation de la confiance.
64
Analyse et perspectives:
Faiblesses et attaques
• RFC 7457:
– Summarizing Known Attacks on TLS and DTLS
• Attaque sur la crypto: (LUCKY 13, RC4 biases, BEAST)
• Attaque sur la compression: (CRIME, BREACH)
– Compression Ratio Info-leak Made Easy
– Browser Reconnaissance and Exfiltration via Adaptive
Compression of Hypertext
• Attaque sur l’implantation: Heartbleed RFC6520
struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;
65
Analyse et perspectives:
Faiblesses et attaques
Phase 1 Phase 2
66
Conclusion
• TLS1.3 atteint les objectifs fixés:
– Réduction de la latence du Handshake
– Endurcissement des ciphers suites
– Endurcissement du protocole
– Fonctionnalités suffisantes … pour le moment
• Disponibilité de TLS1.3
– Browser et Serveur applicatif
– Openssl + GnuTLS
• Support des grands comptes
– Google, Facebook, Twiter, …
67