Zum Hauptinhalt springen

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.