Vous êtes sur la page 1sur 67
TLS (Transport Secure Layer) Ahmed Serhrouchni Telecom ParisTech as@enst.fr

TLS (Transport Secure Layer)

Ahmed Serhrouchni Telecom ParisTech as@enst.fr

Plan

Plan • 1. CONTEXTE – 1.1 Historique, Standardisation – 1.2 Contexte: configuration et outils • 2.

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 à

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

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

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

Contexte: Historique, Standardisation • TLS V1.0 - Janvier 1999 RFC2246 – Basé sur SSL V3.0 –

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

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)

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.

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

https://www.ssllabs.com/ssl-pulse/

9

Contexte: Historique, Standardisation • Plusieurs autres contributions: – RFC2246 TLS Protocol Version 1.0 –

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,

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

Contexte: configuration et outils • Firefox – about:config ensuite un filtre sur security • IE (configuration

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

chrome.exe --cipher-suite-blacklist=0x0004,0x005

0x0004 = RSA-RC4128-MD5

0x0005 = RSA-RC4128-SHA

12

Contexte: configuration et outils • Test d’un client TLS: – https://cc.dcsec.uni-hannover.de/ –

Contexte: configuration et outils

Test d’un client TLS:

https://cc.dcsec.uni-hannover.de/

https://browsercheck.qualys.com/

Test d’un serveur TLS + générateur de config

/https://www.ssllabs.com/ssltest

openssl s_client host adresse -port port tls1 cipher xxx

nmap --script ssl-enum-ciphers site.xx

https://tls.imirhil.fr

https://mozilla.github.io/server-side-tls/ssl-config-generator/

13

Contexte: distribution de TLS

Contexte: distribution de TLS • Openssl – https://www.openssl.org • GnuTLS – https:// www.gnutls.org /

Openssl

https://www.openssl.org

GnuTLS

https:// www.gnutls.org/

LibreSSL: fork de OpenSSL (OpenBSD)

https:// www.libressl.org/

BoringSSL: fork de Openssl, intégré à Chrome

https://boringssl.googlesource.com/boringssl

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 –

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

Architecture et fonctionnalités:

Services et mécanismes cryptographiques

NFS FTP SMTP HTTP Telnet XDR TLS/SSL SNMP RPC TCP UDP IP
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

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

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

fonctionnalités: Services et mécanismes cryptographiques • Authentification – Serveur (obligatoire), client

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

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 …  

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

Architecture et fonctionnalités:

Composantes protocolaires et services

Application TLS&SSL Handshake Alert CCS Record TCP
Application
TLS&SSL
Handshake
Alert
CCS
Record
TCP

22

Architecture et fonctionnalités: Composantes protocolaires et services struct { ContentType type; ProtocolVersion

Architecture et fonctionnalités:

Composantes protocolaires et services

struct {

ContentType type; ProtocolVersion version; uint16 length; opaque fra[TLSPlaintext.length];

}

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

et fonctionnalités: Composantes protocolaires et services Application Protocol Handshake Protocol CCS Protocol Alert

Application Protocol

Handshake Protocol CCS Protocol Alert Protocol
Handshake Protocol
CCS Protocol
Alert Protocol

version

long. total

Payload

Content type

Record Protocol

24

Protocole TLS: Handshake • Tout de suite après la connexion TCP – Ouverture d’une session

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 Client Ouverture d'une session TLS Serveur Client Hello Serveur Hello Certificate

Protocole TLS: Handshake

Protocole TLS: Handshake Client Ouverture d'une session TLS Serveur Client Hello Serveur Hello Certificate

Client

Ouverture d'une session TLS

TLS: Handshake Client Ouverture d'une session TLS Serveur Client Hello Serveur Hello Certificate

Serveur

Client Hello
Client Hello

Serveur Hello Certificate (Serveur Key Exchange) (Certificate Request) Server Hello Done

Serveur Hello Certificate (Serveur Key Exchange) (Certificate Request) Server Hello Done

(Certificate) Client Key Exchange (Certificate Verify) ChangeCipherSpec Finished

(Certificate) Client Key Exchange (Certificate Verify) ChangeCipherSpec Finished
ChangeCipherSpec Finished
ChangeCipherSpec
Finished

Application Data

(Certificate Verify) ChangeCipherSpec Finished ChangeCipherSpec Finished Application Data   Application Data
(Certificate Verify) ChangeCipherSpec Finished ChangeCipherSpec Finished Application Data   Application Data
 

Application Data

26

Protocole TLS: Handshake Client Ouverture d'une connexion Serveur Client Hello Serveur Hello ChangeCipherSpec

Protocole TLS: Handshake

Protocole TLS: Handshake Client Ouverture d'une connexion Serveur Client Hello Serveur Hello ChangeCipherSpec

Client

Ouverture d'une connexion

Protocole TLS: Handshake Client Ouverture d'une connexion Serveur Client Hello Serveur Hello ChangeCipherSpec

Serveur

Client Hello
Client Hello

Serveur Hello ChangeCipherSpec Finished

Serveur Hello ChangeCipherSpec Finished
ChangeCipherSpec Finished
ChangeCipherSpec
Finished
Client Hello Serveur Hello ChangeCipherSpec Finished ChangeCipherSpec Finished   Application Data
Client Hello Serveur Hello ChangeCipherSpec Finished ChangeCipherSpec Finished   Application Data
 

Application Data

27

Protocole TLS: Handshake

Protocole TLS: Handshake PDU du protocole Handshake struct{ HandshakeType msg_type; uint24 length; select

PDU du protocole Handshake

struct{

HandshakeType msg_type; uint24 length; select (HandshakeType) { case hello_request:

HelloRequest;

case client_hello:

case server_hello:

case certificate:

case server_key_exchange: ServerKeyExchange; case certificate_request: CertificateRequest;

case server_hello_done:

case certificate_verify: CertificateVerify;

case client_key_exchange: ClientKeyExchange;

case finished:

ClientHello;

ServerHello;

Certificate;

ServerHelloDone;

Finished;

} body; } Handshake;

28

Protocole TLS: Handshake PDU du protocole Handshake struct { ProtocolVersion client_version; Random random; SessionID

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

Protocole TLS: Handshake PDU du protocole Handshake : 21 extensions sont définis enum { server_name(0),

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;

Valeur

0

1

Document de

référence

RFC 6066

RFC 6066

Année de

publication

2011

2011

Nom de

l’extension

server_name

max_fragt_length

30

Protocole TLS: Handshake • Extensions (suite) client_cert_url 2 RFC 6066 2011 trusted_ca_keys 3

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

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:

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),

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:

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]; }

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 message Sens de transmission Signification le numéro de

Protocole TLS: Handshake

Message Type de message Sens de transmission Signification le numéro de version du protocole SSL

Message

Type de

message

Sens de

transmission

Signification

le numéro de version du protocole SSL ; un nombre aléatoire : serveur_random ; l'identificateur

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.

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 :

37

Protocole TLS: Handshake Certificate Optionnel serveur  client client  serveur Ce message contient le

Protocole TLS: Handshake

Certificate Optionnel serveur  client client  serveur Ce message contient le certificat du serveur

Certificate

Optionnel

serveur client

client serveur

Ce message contient le certificat du

serveur ou celui du client si le serveur le lui

réclame et que le client en possède un.

messages ServerHello et subséquents. ServerKeyExchange Optionnel serveur  client Ce message est envoyé par

messages ServerHello et subséquents.

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

38

Protocole TLS: Handshake ClientKeyExchange Obligatoire client  serveur Ce message contient le

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

Protocole TLS: Record, Alert, CCS • Reçoit les données des couches supérieures : ( Handshake ,

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

maximum de 2 14 octets

blocs

de

taille

- 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

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,

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

Protocole TLS: Record, Alert, CCS enum { warning(1), fatal(2), (255) } AlertLevel; enum { close_notify(0),

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

Protocole TLS: Record, Alert, CCS /* suite … certificate_unknown(46), illegal_parameter(47), unknown_ca(48),

/* 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

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

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

TLS1.3: les extensions enum { server_name(0), max_fragment_length(1), status_request(5), supported_groups(10),

enum {

server_name(0),

max_fragment_length(1),

status_request(5),

supported_groups(10),

signature_algorithms(13),

use_srtp(14),

heartbeat(15),

app_layer_proto_nego (16),

signed_cert_timestamp(18),

client_certificate_type(19),

server_certificate_type(20),

padding(21),

….

} ExtensionType;

/* RFC 6066 */ /* RFC 6066 */ /* RFC 6066 */ /* RFC 8422, 7919 */

/* RFC 8446 */

/* RFC 5764 */ /* RFC 6520 */ /* RFC 7301 */ /* RFC 6962 */ /* RFC 7250 */ /* RFC 7250 */ /* RFC 7685 */

47

TLS1.3: les extensions (suite)

TLS1.3: les extensions (suite) enum { … pre_shared_key(41), early_data(42), supported_versions(43),

enum {

pre_shared_key(41),

early_data(42),

supported_versions(43),

cookie(44),

psk_key_exchange_modes(45),

certificate_authorities(47),

oid_filters(48),

post_handshake_auth(49),

signature_algorithms_cert(50),

key_share(51),

(65535)

} ExtensionType;

/* RFC 8446 */ /* RFC 8446 */ /* RFC 8446 */

/* RFC 8446 */

/* RFC 8446 */ /* RFC 8446 */ /* RFC 8446 */ /* RFC 8446 */ /* RFC 8446 */ /* RFC 8446 */

48

TLS1.3: les suites de chiffrement (obligatoires) • AEAD : Authenticated Encryption with Associated Data •

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 •

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 •

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

Encrypt-then-MAC (EtM) (TLS1.2)

• Encrypt-then-MAC (EtM) (TLS1.2) Source: wikipedia

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)

• MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2) Source: wikipedia

Source: wikipedia

53

Modèle de chiffrement des données • MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2) Source: wikipedia 54

Modèle de chiffrement des données

MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2)

• MAC-then-Encrypt (MtE) (TLS1.0, TLS1.1, TLS1.2) Source: wikipedia

Source: wikipedia

54

k

k AES-GCM ( NIST SP800-38D) Chiffrement Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn AES k AES k AES

AES-GCM (NIST SP800-38D) Chiffrement

Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn AES k AES k AES k AES k AES m1
Ctr0
Ctr1
Ctr2
Ctrn-1
Ctrn
AES
k
AES
k
AES
k
AES
k
AES
m1
m2
mn
mn-1
C1
C2
Cn
Cn-
1
H Mult
H
Mult
H
Mult
H
Mult
H
Mult
Len(M) II Len (C)
AAD
H
Mult
AuthTA
55
G

H = E(K, 0 128 )

AES GCM Operation Mode

Ctr0 = IV II

0 31 1

if len(IV ) = 96

Ctr i = Incr(CTR i1 )

for i = 1,

,n

C i = M i E(K, Ctr i )

for i = 1,

,n

1

C n = M n MSB u (E(K, Ctr n ))

AuthTAG = MSB t (GHASH(H, M, C) E(K, Ctr 0 ))

k

k AES-GCM ( NIST SP800-38D) Déchiffrement + Authentification Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn AES k AES

AES-GCM (NIST SP800-38D) Déchiffrement + Authentification

Ctr0 Ctr1 Ctr2 Ctrn-1 Ctrn AES k AES k AES k AES k AES m1
Ctr0
Ctr1
Ctr2
Ctrn-1
Ctrn
AES
k AES
k AES
k
AES
k AES
m1
m2
mn
mn-1
C1
C2
Cn
Cn-
1
AES GCM Operation Mode
H = E(K, 0 128 )
Ctr0 = IV II
0 31 1
if len(IV ) = 96
H Mult
H Mult
H Mult
H
Mult
,n
H
Mult
M i =
Ctr i = Incr(CTR i−1 )
C i ⊕ E(K, Ctr i )
for i = 1,
for i = 1,
,n
− 1
M n = C n ⊕MSB u (E(K, Ctr n ))
Len(M) II Len (C)
AuthTAG = MSB t (GHASH(H, M, C) ⊕ E(K, Ctr 0 ))
AAD
H
Mult
AuthTA
56
G
AES-GCM ( NIST SP800-38D) Application au protocole ModBus 7 253 Bytes Bytes TransID Protocol ID

AES-GCM (NIST SP800-38D) Application au protocole ModBus

7 253 Bytes Bytes
7
253
Bytes
Bytes
TransID Protocol ID Len UnitID 2 2 2 1 Bytes Bytes Bytes Byte
TransID
Protocol ID
Len
UnitID
2
2
2
1
Bytes
Bytes
Bytes
Byte

FC

Data

UnitID 2 2 2 1 Bytes Bytes Bytes Byte FC Data 1 252 Byte Byte Additional
1 252 Byte Byte
1
252 Byte
Byte

Additional Authenticated Data = HEADER

Message M = FC+DATA

Additional Authenticated Data = HEADER Message M = FC+DATA k AES-128- GCM Header IV Cipher Text

k

AES-128-

GCM

Data = HEADER Message M = FC+DATA k AES-128- GCM Header IV Cipher Text AuthTAG 12
Header IV Cipher Text AuthTAG 12 253 57 12 Bytes 7 Bytes Bytes Bytes
Header
IV
Cipher Text
AuthTAG
12
253
57
12 Bytes
7
Bytes
Bytes
Bytes
Record Protocol • AEADEncrypted = AEAD-Encrypt(write_key, nonce, additional_data, plaintext) • PlainText =

Record Protocol

AEADEncrypted =

AEAD-Encrypt(write_key, nonce, additional_data, plaintext)

PlainText =

AEAD-Decrypt(peer_write_key, nonce, additional_data, AEADEncrypted)

58

Protocole Handshake

Protocole Handshake struct { HandshakeType msg_type; uint24 length; select (Handshake.msg_type) { case client_hello:

struct { HandshakeType msg_type; uint24 length; select (Handshake.msg_type) { case client_hello:

case server_hello:

case end_of_early_data:

case encrypted_extensions:

case certificate_request:

case certificate:

case certificate_verify:

case finished:

case new_session_ticket:

case key_update:

/* handshake type */ /* bytes in message */

ClientHello;

ServerHello;

EndOfEarlyData;

EncryptedExtensions;

CertificateRequest;

Certificate;

CertificateVerify;

Finished;

NewSessionTicket;

KeyUpdate;

};

} Handshake;

59

Handshake: Etablissement de session avec partage du PSK Client Initial Handshake: ClientHello + key_share {Certificate*}

Handshake:

Etablissement de session avec partage du PSK

Client

Initial Handshake:

ClientHello

+ key_share

{Certificate*}

{CertificateVerify*}

{Finished}

[Application Data]

-------->

Server

ServerHello

+ key_share

{EncryptedExtensions}

{CertificateRequest*}

{Certificate*}

{CertificateVerify*}

{Finished}

<-------- [Application Data*]

-------->

<--------

<------->

[NewSessionTicket]

[Application Data]

60

Handshake: Etablissement de session avec 0-RTT Client ClientHello + early_data + key_share* + psk_key_exchange_modes +

Handshake:

Etablissement de session avec 0-RTT

Client

ClientHello

+ early_data

+ key_share*

+ psk_key_exchange_modes

+ pre_shared_key

(Application Data*)

-------->

Server

ServerHello

+ pre_shared_key

+ key_share*

{EncryptedExtensions}

+ early_data*

{Finished}

<-------- [Application Data*]

(EndOfEarlyData)

{Finished}

[Application Data]

-------->

<------->

61

[Application Data]

Handshake: Reprise de session avec PSK Client Server ClientHello + key_share* + pre_shared_key --------> ServerHello

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

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

Analyse et perspectives: Gestion des certificats • Configuration par défaut – flexible (absence de

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

Analyse et perspectives: Faiblesses et attaques • RFC 7457: – Summarizing Known Attacks on TLS and

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

opaque opaque } HeartbeatMessage;

payload_length;

payload[HeartbeatMessage.payload_length];

padding[padding_length];

65

Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2

Analyse et perspectives:

Faiblesses et attaques

Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2

Phase 1

Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2

66

Phase 2

Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Analyse et perspectives: Faiblesses et attaques Phase 1 66 Phase 2
Conclusion • TLS1.3 atteint les objectifs fixés: – Réduction de la latence du Handshake –

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