Vous êtes sur la page 1sur 67

TLS (Transport Secure Layer)

Ahmed Serhrouchni
Telecom ParisTech
as@enst.fr
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
• https://www.ssllabs.com/ssl-pulse/

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

• 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


– 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[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

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

Vous aimerez peut-être aussi