# 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. 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.
Il est possible d'obtenir la liste des suites cryptographiques supportées par un serveur à l'aide de logiciels scanner SSL/TLS (TLSSLed ou TestSSLServer 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$^,$.
* 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 ;
* 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.
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.
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. 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 :

### CipherSuite cipher_suites

    représente la liste des suites cryptographiques supportées par le client.

### CipherSuite cipher_suite

    représente la suite cryptographique sélectionnée par le serveur et retournée dans le message ServerHello.