2010-10-14 5 views
9

Ich habe eine kleine Verwirrung über SSL-Handshake zwischen Browser und Server in einem typischen https Web-Szenario:Wie Browser während SSL-Handshake symmetrische Schlüssel erzeugt

Was ich verstanden habe, so weit ist, dass im Prozess des SSL-Handshake, Client (Browser in diesem Fall) verschlüsselt einen zufällig ausgewählten symmetrischen Schlüssel mit dem öffentlichen Schlüssel (Zertifikat vom Server erhalten). Dies wird an den Server zurückgesendet, der Server entschlüsselt ihn (symmetrischer Schlüssel) mit dem privaten Schlüssel. Dieser symmetrische Schlüssel wird jetzt während des Rests der Sitzung zum Verschlüsseln/Entschlüsseln der Nachrichten an beiden Enden verwendet. Einer der Hauptgründe dafür ist eine schnellere Verschlüsselung mit symmetrischen Schlüsseln.

Fragen 1) Wie wählt der Browser diesen "zufällig" ausgewählten symmetrischen Schlüssel aus und generiert ihn?

2) Haben Entwickler (oder/und Browser-Benutzer) Kontrolle über diesen Mechanismus zur Erzeugung symmetrischer Schlüssel?

+0

Der Client generiert den Sitzungsschlüssel nicht; verschlüsselt es nicht; und überträgt es nicht. Der Sitzungsschlüssel wird über ein Schlüsselvereinbarungsprotokoll abgeleitet. Ihre Beschreibung ist grundsätzlich falsch. Ihre Frage beruht auf einer falschen Annahme. – EJP

Antwort

8

Here ist eine sehr gute Beschreibung der Funktionsweise des HTTPS-Verbindungsaufbaus. Ich werde Zusammenfassung geben, wie Sitzungsschlüssel von beiden Seiten (Client und Server) erworben wird, ist dieser Prozess als „ein Schlüsselvereinbarungsprotokoll“, hier bekannt ist, wie es funktioniert:

  1. Der Client den 48-Byte „erzeugt Pre- Master Geheimnis "Zufallswert.
  2. Der Client puffert diese Bytes mit zufälligen Daten, um die Eingabe gleich 128 Bytes zu machen.
  3. Der Client verschlüsselt ihn mit dem öffentlichen Schlüssel des Servers und sendet ihn an den Server.
  4. Dann beherrscht Schlüssel von beiden Seiten in folgenden Weise hergestellt:

    master_secret = PRF(
        pre_master_secret, 
        "master secret", 
        ClientHello.random + ServerHello.random 
    ) 
    

Die PRF die „Pseudo-Zufalls-Funktion“ ist, die auch in dem spec definiert ist und ist sehr klug. Es kombiniert das Geheimnis, das ASCII-Etikett und die Seed-Daten, die wir es geben, indem Sie die HMED-Versionen (HMAC-Versionen) der MD5- und SHA-1-Hash-Funktionen Hashed. Die Hälfte der Eingabe wird an jede Hash-Funktion gesendet. Es ist clever, weil es ziemlich resistent gegen Angriffe ist, auch angesichts der Schwächen in MD5 und SHA-1. Dieser Prozess kann sich selbst Feedback geben und iterieren, um so viele Bytes wie nötig zu generieren.

Nach dieser Prozedur erhalten wir ein 48 Byte "Master Secret".

+0

Der Client generiert den Sitzungsschlüssel nicht; verschlüsselt es nicht; und überträgt es nicht. Der Sitzungsschlüssel wird über ein Schlüsselvereinbarungsprotokoll abgeleitet. – EJP

+0

@EJP du hast Recht, meine Antwort war völlig inkorrekt, ich schrieb es um. Bitte überprüfen Sie es und sagen Sie mir, wenn Sie denken, dass es jetzt besser ist. – Andrey

Verwandte Themen