7. Sicherheitsüberlegungen
7. Sicherheitsüberlegungen
Die Datenschutz- und Sicherheitsüberlegungen aus [RFC8030] gelten vollständig für die Nutzung dieses Mechanismus.
Der Abschnitt Security Considerations in [RFC8188] beschreibt die Grenzen der Inhaltskodierung. Insbesondere sind keine HTTP-Header-Felder durch die Inhaltskodierung geschützt. Ein User-Agent MUST HTTP-Header-Felder als vom Push-Dienst stammend betrachten.
Obwohl Header-Felder für die korrekte Verarbeitung einer HTTP-Antwort nötig sein können, sind sie für das korrekte Funktionieren des Protokolls nicht erforderlich. Eine Anwendung auf dem User-Agent, die Header-Informationen zur Änderung der Verarbeitung einer Push-Nachricht nutzt, ist einem Angriff durch den Push-Dienst ausgesetzt.
Zeitpunkt und Dauer der Kommunikation können dem Push-Dienst nicht verborgen werden. Ein externer Beobachter mag einzelne Nachrichten vermischt sehen, der Push-Dienst sieht jedoch, welcher Anwendungsserver mit welchem User-Agent spricht und welche Subscription genutzt wird. Außerdem kann die Nachrichtenlänge sichtbar werden, sofern nicht das Padding der Inhaltskodierung zur Verschleierung genutzt wird.
User-Agent und Anwendung MUST prüfen, dass der empfangene öffentliche Schlüssel auf der Kurve P-256 liegt. Fehlt die Validierung, kann ein Angreifer einen privaten Schlüssel extrahieren. Die geeigneten Verfahren stehen in Abschnitt 4.3.7 von [X9.62] bzw. alternativ in Abschnitt 5.6.2.3 von [KEYAGREEMENT]. Das Verfahren umfasst drei Schritte:
-
Prüfen, dass Y nicht der Punkt im Unendlichen (O) ist,
-
Prüfen, dass für Y = (x, y) beide ganzen Zahlen im richtigen Intervall liegen,
-
Sicherstellen, dass (x, y) eine korrekte Lösung der elliptischen Kurvengleichung ist.
Für diese Kurven müssen Implementierer die Zugehörigkeit zur richtigen Untergruppe nicht prüfen.
Sollte dieses Verschlüsselungsschema ersetzt werden müssen, könnte eine neue Inhaltskodierung definiert werden. Für eine schrittweise Einführung kann der User-Agent unterstützte Inhaltskodierungen bekanntgeben. Der Parameter „supportedContentEncodings“ der Push API [API] ist ein Beispiel dafür.