6.4. Data Integrity (Datenintegrität)
6.4. Data Integrity (Datenintegrität)
Die Datenintegrität wird geschützt, indem mit jedem Paket ein MAC eingeschlossen wird, der aus einem gemeinsamen Geheimnis, einer Paketsequenznummer und dem Inhalt des Pakets berechnet wird.
Der Nachrichtenauthentifizierungsalgorithmus und der Schlüssel werden während des Schlüsselaustauschs ausgehandelt. Anfänglich ist kein MAC in Kraft, und seine Länge MUSS null sein. Nach dem Schlüsselaustausch wird der mac für den ausgewählten MAC-Algorithmus vor der Verschlüsselung aus der Verkettung der Paketdaten berechnet:
mac = MAC(key, sequence_number || unencrypted_packet)
wobei unencrypted_packet das gesamte Paket ohne mac ist (die Längenfelder, payload und random padding), und sequence_number eine implizite Paketsequenznummer ist, die als uint32 dargestellt wird. Die sequence_number wird für das erste Paket auf null initialisiert und nach jedem Paket inkrementiert (unabhängig davon, ob Verschlüsselung oder MAC verwendet wird). Sie wird nie zurückgesetzt, selbst wenn Schlüssel/Algorithmen später neu ausgehandelt werden. Sie wickelt sich nach jedem 2^32 Paket auf null zurück. Die Paket-sequence_number selbst ist nicht im über die Leitung gesendeten Paket enthalten.
Die MAC-Algorithmen für jede Richtung MÜSSEN unabhängig laufen, und Implementierungen MÜSSEN es ermöglichen, den Algorithmus für beide Richtungen unabhängig zu wählen. In der Praxis wird jedoch EMPFOHLEN, dass derselbe Algorithmus in beiden Richtungen verwendet wird.
Der Wert von mac, der aus dem MAC-Algorithmus resultiert, MUSS ohne Verschlüsselung als letzter Teil des Pakets übertragen werden. Die Anzahl der mac-Bytes hängt vom gewählten Algorithmus ab.
Die derzeit definierten MAC-Algorithmen sind:
hmac-sha1 REQUIRED HMAC-SHA1 (Digest-Länge = Schlüssellänge = 20)
hmac-sha1-96 RECOMMENDED erste 96 Bits von HMAC-SHA1 (Digest-Länge = 12, Schlüssellänge = 20)
hmac-md5 OPTIONAL HMAC-MD5 (Digest-Länge = Schlüssellänge = 16)
hmac-md5-96 OPTIONAL erste 96 Bits von HMAC-MD5 (Digest-Länge = 12, Schlüssellänge = 16)
none OPTIONAL kein MAC; NICHT EMPFOHLEN
Die "hmac-"-Algorithmen sind in [RFC2104] beschrieben. Die "-n"-MACs verwenden nur die ersten n Bits des resultierenden Werts.
SHA-1 ist in [FIPS-180-2] beschrieben und MD5 ist in [RFC1321] beschrieben.
Zusätzliche Methoden können definiert werden, wie in [SSH-ARCH] und in [SSH-NUMBERS] spezifiziert.