Aller au contenu principal

8. Calculs cryptographiques (Cryptographic Computations)

8.1. Calcul du secret maître (Computing the Master Secret)

Pour toutes les méthodes d'échange de clés, le même algorithme est utilisé pour convertir le pre_master_secret en master_secret. Le pre_master_secret doit être supprimé de la mémoire une fois que le master_secret a été calculé.

master_secret = PRF(pre_master_secret, "master secret",
ClientHello.random + ServerHello.random)
[0..47];

Le secret maître fait toujours exactement 48 octets de long. La longueur du secret prémaître varie en fonction de la méthode d'échange de clés.

8.1.1. RSA

Lorsque RSA est utilisé pour l'authentification du serveur et l'échange de clés, un pre_master_secret de 48 octets est généré par le client, chiffré avec la clé publique du serveur et envoyé au serveur. Le serveur utilise sa clé privée pour déchiffrer le pre_master_secret. Les deux parties convertissent ensuite le pre_master_secret en master_secret, comme spécifié ci-dessus.

Structure du message de secret prémaître chiffré RSA:

struct {
ProtocolVersion client_version;
opaque random[46];
} PreMasterSecret;

client_version

  • La dernière version (la plus élevée) prise en charge par le client. Ceci est utilisé pour détecter les attaques de retour arrière de version.

random

  • 46 octets aléatoires générés de manière sécurisée.

8.1.2. Diffie-Hellman

Un calcul Diffie-Hellman conventionnel est effectué. La clé négociée (Z) est utilisée comme pre_master_secret et est convertie en master_secret, comme spécifié ci-dessus. Les octets de tête de Z qui contiennent tous des bits zéro sont supprimés avant qu'il ne soit utilisé comme pre_master_secret.

Note: Les paramètres Diffie-Hellman sont spécifiés par le serveur et peuvent être soit éphémères, soit contenus dans le certificat du serveur.

Pour des détails de calcul complets et des informations sur d'autres algorithmes d'échange de clés, veuillez vous référer au texte complet de la section 8 de la RFC 5246.