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

Article détaillé : Transport Layer Security.

Lors de é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 par bloc
RC4, Triple DES, AES, IDEA, DES, 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 :

CipherSuite cipher_suites
représente la liste des suites cryptographiques supportées par le client[11].
CipherSuite cipher_suite
représente la suite cryptographique sélectionnée par le serveur et retournée dans le message ServerHello[12].

Notes et références

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Cipher suite » (voir la liste des auteurs).
  1. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 37.
  2. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 40.
  3. http://blog.taddong.com/2013/02/tlssled-v13.html
  4. http://www.bolet.org/TestSSLServer
  5. (en) « CipherSuites and CipherSpecs », IBM (consulté le 25 octobre 2015)
  6. (en) « Cipher Suites in Schannel », Microsoft MSDN (consulté le 25 octobre 2015)
  7. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 47.
  8. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 17.
  9. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 16-17, 26.
  10. https://openssl.org/docs/manmaster/apps/ciphers.html
  11. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 41.
  12. (en) « The Transport Layer Security (TLS) Protocol Version 1.2 », Request for Comments no 5246, août 2008, p. 42-43, 64.