Suite cryptographique
Une suite cryptographique (cipher suite en anglais) est le nom de la combinaison des algorithmes d'échange de clés, d'authentification, de chiffrement par bloc et génération du code d'authentification de message (MAC) utilisée afin d'établir le paramétrage de sécurité pour une connexion réseau utilisant le protocole de communication Secure Socket Layer (SSL) et Transport Layer Security (TLS).
Usage
Lors de l'établissement d'une connexion TLS, un handshake s'effectue entre un client et un serveur. Au cours de ce processus, un message client hello (ClientHello) ainsi qu'un message server hello (ServerHello) sont échangés[1]. En premier lieu, le client émet au serveur la liste des suites cryptographiques qu'il supporte, par ordre de préférence (de la plus robuste à la plus faible). En retour, le serveur renvoie la suite cryptographique préférée pour l'établissement de la communication[2].
Il est possible d'obtenir la liste des suites cryptographiques supportées par un serveur à l'aide de logiciels scanner SSL/TLS (TLSSLed[3] ou TestSSLServer[4] par exemple).
Description détaillée
Chaque suite cryptographique définit un algorithme d'échange de clés et d'authentification, de chiffrement par bloc et de code d'authentification de message (MAC) usuellement représentés dans cet ordre[5] - [6].
- L'algorithme d'échange de clés est utilisé pour déterminer la méthode permettant au client et au serveur d'établir un canal de communication sécurisé (chiffrement asymétrique).
- L'algorithme d'authentification est utilisé pour déterminer si et comment le client et le serveur vont s'authentifier mutuellement durant la poignée de main[7] ;
- L'algorithme de chiffrement par bloc est utilisé pour chiffrer le flux de données (chiffrement symétrique). Il inclut également la taille de la clé ainsi que la longueur du vecteur d'initialisation (Nonce cryptographique) ;
- L'algorithme de code d'authentification de message (MAC) est utilisé pour créer un condensat (ou empreinte) afin de vérifier l'intégrité de chaque bloc composant le flux de données[8].
De plus, une fonction pseudo-aléatoire (PRF) est utilisée pour générer un secret partagé de 48 octets et utilisé entre les deux pairs lors de la connexion. Le secret partagé est utilisé comme source d'entropie lors de la création de la clé de session, utilisé pour la génération du MAC[9].
Par exemple, la suite ECDHE-RSA-AES128-GCM-SHA256 utilise l'algorithme ECDHE pour l'échange de clés, RSA pour l'authentification, AES (128bits) en mode GCM pour le chiffrement par bloc et enfin SHA256 pour le calcul du MAC.
Il existe un très grand nombre de suites cryptographiques supportés dans OpenSSL[10]. Certaines ne proposent pas d'authentification, ni chiffrement, ni contrôle d'intégrité.
Exemples des algorithmes utilisés
- Echange de clés
- RSA, Diffie-Hellman, ECDH, SRP, PSK.
- Authentification
- RSA, DSA, ECDSA.
- Chiffrement symétrique
- RC4, Triple DES, AES, IDEA, DES, ChaCha20 ou Camellia. Dans l'ancienne version de SSL, RC2 était également utilisé.
- Authentification de message
- Pour TLS, un HMAC basé sur l'algorithme MD5 ou l'un des algorithmes de hachage SHA peut être utilisé. Pour SSL, SHA, MD5, MD4 et MD2 peuvent être utilisés.
Références en programmation
En programmation, la syntaxe différencie deux éléments :
Notes et références
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 37.
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 40.
- (en) « TLSSLed v1.3 », sur taddong.com (consulté le ).
- « TestSSLServer », sur bolet.org (consulté le ).
- (en) « CipherSuites and CipherSpecs », IBM (consulté le )
- (en) « Cipher Suites in Schannel », Microsoft MSDN (consulté le )
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 47.
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 17.
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 16-17, 26.
- https://openssl.org/docs/manmaster/apps/ciphers.html
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 41.
- (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for comments no 5246, , p. 42-43, 64.