Erstens sollte Ihre Mseed-Datei (Label + Seed-Wert in der PRF) 77 Byte und nicht 69 Byte betragen. Sie müssen die Client- und / oder Server-Nonces irgendwie durcheinander gebracht haben.
Zweitens -hmac spre.key
ist schlimm falsch. Als HMAC-Schlüssel werden die tatsächlichen Zeichen verwendet, s p r e . k e y
dh die Oktette 73 70 72 65 2e 6b 65 79. Sie müssen den Wert des entschlüsselten Premaster-Secret verwenden, der den Inhalt Ihrer Datei spre.key darstellt. Und da dies binäre Daten sind, die Bytes enthalten können, die Sonderzeichencodes wie Null, Tabulator, Dollarzeichen, Anführungszeichen, Backslash, Löschen usw. sind, können Sie sie nicht direkt, als -hmac
oder auch nicht sicher übergeben -hmac ''
. Stattdessen müssen Sie -mac hmac -macopt hexkey:
wie in der vorherigen Antwort angegeben verwenden, mit Ausnahme des tatsächlichen Hex-Schlüsselwerts, den Sie in diesem Q angegeben haben 0303CB30...2CDC
.
Drittens verketten Sie, wie ich in der vorherigen Antwort gezeigt habe, die Ergebnisse der zweiten HMAC-Schicht, dh in meiner Notation k1, k2, ..., um die Ausgabe zu bilden (die in diesem Beispiel 100 Oktette war):
$ cat k1 k2 k3 k4 | head -c100 | xxd
aber wie ich weiter sagte:
... auch für den eigentlichen TLS1.2-Handshake, angepasst an die richtigen Längen: 48 für das Master-Secret und abhängig von der Ciphersuite für die Arbeitsschlüssel.
Für die erste (Premaster-Master-Ableitung) benötigen Sie 48 Oktette, so dass Sie nur die ersten beiden Chunks von 32 (a0-> a1-> a2 a1 + a0-> k1 a2 + a0-> k2) und dann k1 verketten + k2 und nimm die ersten 48 Oktette.
Für die zweite (Master-to-Working) -Ableitung hängt die Länge, die Sie benötigen, von der Chiffriersuite ab, die ausgehandelt wurde. Sie sagten, Sie verwenden RSA-with-AES256CBC-SHA, das (in TLS1.2 oder 1.1, aber nicht 1.0) 40 Oktette HMAC-Schlüssel und 64 Oktette Verschlüsselungsschlüssel mit insgesamt 104 Oktetten benötigt. Für 104 OZets müssen Sie 4 Chunks von 32 berechnen, k1 + k2 + k3 + k4 verketten und in dieser Reihenfolge an Client-MAC, Server-MAC, Client-Verschlüsselung und Serververschlüsselung auslagern. Siehe 6.3 der RFC. Beachten Sie auch, dass das Label unterschiedlich ist und für diese Ableitung der Startwert (label +) server_random + client_random ist, nicht (label +) client_random + server_random wie im ersten.