Zum Hauptinhalt springen

4. The "record_size_limit" Extension (Die Erweiterung "record_size_limit“)

4. The "record_size_limit" Extension (Die Erweiterung „record_size_limit“)

Die ExtensionData der Erweiterung record_size_limit ist RecordSizeLimit:

uint16 RecordSizeLimit;

Der Wert von RecordSizeLimit ist die maximale Datensatzgröße in Oktetten, die der Endpunkt zu empfangen bereit ist. Dieser Wert begrenzt die Größe von Datensätzen, die bei der Kodierung von Anwendungsdaten und der geschützten Handshake-Nachricht in Datensätze erzeugt werden.

Wenn die Erweiterung record_size_limit ausgehandelt wurde, DARF ein Endpunkt KEINEN geschützten Datensatz erzeugen, dessen Klartext größer ist als der RecordSizeLimit-Wert, den er von seinem Peer erhält. Ungeschützte Nachrichten unterliegen dieser Grenze nicht.

Dieser Wert ist die Länge des Klartexts eines geschützten Datensatzes. Der Wert umfasst den Inhaltstyp und das Padding in TLS 1.3 (also die vollständige Länge von TLSInnerPlaintext). In TLS 1.2 und früher umfasst die Grenze alle Eingaben in Kompression und Verschlüsselung (also die Daten, die schließlich TLSCiphertext.fragment erzeugen). Als Teil der Verschlüsselung hinzugefügtes Padding, etwa von einer Blockchiffre, ist in dieser Zählung nicht enthalten (siehe Abschnitt 4.1).

Ein Endpunkt, der alle Datensatzgrößen unterstützt, kann jedes Limit bis zur protokolldefinierten maximalen Datensatzgröße angeben. Für TLS 1.2 und früher beträgt dieses Limit 2^14 Oktetten. TLS 1.3 verwendet ein Limit von 2^14+1 Oktetten. Höhere Werte sind derzeit für zukünftige Protokollversionen reserviert, die größere Datensätze zulassen könnten; ein Endpunkt DARF keinen Wert senden, der höher ist als die protokolldefinierte maximale Datensatzgröße, es sei denn, eine solche zukünftige Version oder Erweiterung erlaubt dies ausdrücklich. Ein Server DARF diese Einschränkung nicht durchsetzen; ein Client kann ein höheres Limit ankündigen, das durch eine Erweiterung oder Version aktiviert wird, die der Server nicht versteht. Ein Client KANN den Handshake mit einer illegal_parameter-Warnung abbrechen, wenn die Erweiterung record_size_limit einen Wert enthält, der größer ist als die vom ausgehandelten Protokoll und den Erweiterungen zulässige maximale Datensatzgröße.

Selbst wenn ein Peer ein größeres Datensatzgrößenlimit angibt, DARF ein Endpunkt KEINE Datensätze senden, die größer sind als das protokolldefinierte Limit, es sei denn, eine zukünftige TLS-Version oder Erweiterung erlaubt dies ausdrücklich.

Die Datensatzgrößenbegrenzung gilt nur für Datensätze, die zum Endpunkt gesendet werden, der das Limit bekannt gibt. Ein Endpunkt kann Datensätze senden, die größer sind als das Limit, das er als eigenes Limit bekannt gibt. Ein TLS-Endpunkt, der einen Datensatz empfängt, der größer ist als sein bekannt gegebenes Limit, MUSS eine fatale record_overflow-Warnung erzeugen; ein DTLS-Endpunkt, der einen Datensatz empfängt, der größer ist als sein bekannt gegebenes Limit, KANN entweder eine fatale record_overflow-Warnung erzeugen oder den Datensatz verwerfen.

Endpunkte SOLLTEN die Erweiterung record_size_limit bekannt geben, auch wenn sie die Datensatzgröße nicht begrenzen müssen. Für Clients ermöglicht dies Servern, nach eigenem Ermessen ein Limit bekannt zu geben. Für Server ermöglicht dies Clients zu wissen, dass ihr Limit respektiert wird. Wenn diese Erweiterung nicht ausgehandelt wird, können Endpunkte Datensätze beliebiger vom Protokoll oder anderen ausgehandelten Erweiterungen zulässiger Größe senden.

Endpunkte DÜRFEN KEINE Erweiterung record_size_limit mit einem Wert kleiner als 64 senden. Ein Endpunkt MUSS den Empfang eines kleineren Werts als fatalen Fehler behandeln und eine illegal_parameter-Warnung erzeugen.

In TLS 1.3 sendet der Server die Erweiterung record_size_limit in der Nachricht EncryptedExtensions.

Bei Renegotiation oder Wiederaufnahme wird die Datensatzgrößenbegrenzung neu ausgehandelt. Datensätze unterliegen den Grenzen, die im Handshake festgelegt wurden, der die Schlüssel erzeugt, mit denen diese Datensätze geschützt werden. Dadurch ist möglich, dass die Erweiterung bei Renegotiation oder Wiederaufnahme einer Verbindung nicht ausgehandelt wird.

Der Path Maximum Transmission Unit (PMTU) in DTLS begrenzt ebenfalls die Datensatzgröße. Die Datensatzgrößenbegrenzung beeinflusst die PMTU-Erkennung nicht und SOLLTE unabhängig gesetzt werden. Die Datensatzgrößenbegrenzung ist während des Handshakes fest und sollte daher anhand der Einschränkungen am Endpunkt und nicht anhand der aktuellen Netzumgebung gesetzt werden. Im Vergleich dazu wird der PMTU vom Netzpfad bestimmt und kann sich dynamisch ändern. Siehe [PMTU] und Abschnitt 4.1.1.1 von [DTLS] für Details zur PMTU-Erkennung.

Der PMTU regelt die Größe von UDP-Datagrammen, was die Datensatzgröße begrenzt, verhindert aber nicht kleinere Datensätze. Ein Endpunkt, der kleine Datensätze sendet, kann weiterhin mehrere Datensätze in einem einzelnen UDP-Datagramm senden.