Zum Hauptinhalt springen

6.2. Compression (Kompression)

6.2. Compression (Kompression)

Wenn Kompression ausgehandelt wurde, wird das payload-Feld (und nur dieses) mit dem ausgehandelten Algorithmus komprimiert. Das packet_length-Feld und mac werden aus der komprimierten Nutzdaten berechnet. Die Verschlüsselung erfolgt nach der Kompression.

Die Kompression KANN zustandsbehaftet sein, abhängig von der Methode. Die Kompression MUSS für jede Richtung unabhängig sein, und Implementierungen MÜSSEN die unabhängige Auswahl des Algorithmus für jede Richtung ermöglichen. In der Praxis wird jedoch EMPFOHLEN, dass die Kompressionsmethode in beiden Richtungen gleich ist.

Die derzeit definierten Kompressionsmethoden sind:

none     REQUIRED        keine Kompression
zlib OPTIONAL ZLIB (LZ77) Kompression

Die "zlib"-Kompression ist in [RFC1950] und in [RFC1951] beschrieben. Der Kompressionskontext wird nach jedem Schlüsselaustausch initialisiert und von einem Paket zum nächsten weitergegeben, wobei am Ende jedes Pakets nur ein teilweises Flush durchgeführt wird. Ein teilweises Flush bedeutet, dass der aktuelle komprimierte Block beendet wird und alle Daten ausgegeben werden. Wenn der aktuelle Block kein gespeicherter Block ist, werden ein oder mehrere leere Blöcke nach dem aktuellen Block hinzugefügt, um sicherzustellen, dass es mindestens 8 Bits gibt, gezählt vom Beginn des End-of-Block-Codes des aktuellen Blocks bis zum Ende der Paketnutzdaten.

Zusätzliche Methoden können wie in [SSH-ARCH] und [SSH-NUMBERS] spezifiziert definiert werden.