8. Kryptografische Berechnungen (Cryptographic Computations)
8.1. Berechnung des Master Secrets (Computing the Master Secret)
Für alle Schlüsselaustausch-Methoden wird derselbe Algorithmus verwendet, um das pre_master_secret in das master_secret zu konvertieren. Das pre_master_secret sollte aus dem Speicher gelöscht werden, sobald das master_secret berechnet wurde.
master_secret = PRF(pre_master_secret, "master secret",
ClientHello.random + ServerHello.random)
[0..47];
Das Master Secret ist immer genau 48 Bytes lang. Die Länge des Premaster Secrets variiert je nach Schlüsselaustausch-Methode.
8.1.1. RSA
Wenn RSA für Server-Authentifizierung und Schlüsselaustausch verwendet wird, wird ein 48-Byte-pre_master_secret vom Client generiert, mit dem öffentlichen Schlüssel des Servers verschlüsselt und an den Server gesendet. Der Server verwendet seinen privaten Schlüssel, um das pre_master_secret zu entschlüsseln. Beide Parteien konvertieren dann das pre_master_secret in das master_secret, wie oben spezifiziert.
RSA-verschlüsselte Premaster-Secret-Nachrichtenstruktur:
struct {
ProtocolVersion client_version;
opaque random[46];
} PreMasterSecret;
client_version
- Die neueste (höchste) vom Client unterstützte Version. Dies wird verwendet, um Version-Rollback-Angriffe zu erkennen.
random
- 46 sicher generierte Zufallsbytes.
8.1.2. Diffie-Hellman
Eine konventionelle Diffie-Hellman-Berechnung wird durchgeführt. Der ausgehandelte Schlüssel (Z) wird als pre_master_secret verwendet und in das master_secret konvertiert, wie oben spezifiziert. Führende Bytes von Z, die alle Null-Bits enthalten, werden entfernt, bevor es als pre_master_secret verwendet wird.
Hinweis: Diffie-Hellman-Parameter werden vom Server spezifiziert und können entweder ephemer sein oder im Zertifikat des Servers enthalten sein.
Für vollständige Berechnungsdetails und Informationen zu anderen Schlüsselaustausch-Algorithmen siehe den vollständigen Text von Abschnitt 8 der RFC 5246.