2. Überblick über Push-Nachrichtenverschlüsselung
2. Überblick über Push-Nachrichtenverschlüsselung
Die Verschlüsselung einer Push-Nachricht nutzt Elliptische-Kurven-Diffie-Hellman (ECDH) [ECDH] auf der Kurve P-256 [FIPS186], um ein gemeinsames Geheimnis zu erhalten (siehe Abschnitt 3.1) und ein symmetrisches Geheimnis zur Authentifizierung (siehe Abschnitt 3.2).
Ein User-Agent erzeugt ein ECDH-Schlüsselpaar und ein Authentifizierungsgeheimnis (authentication secret), die er jeder erstellten Subscription zuordnet. Der öffentliche ECDH-Schlüssel und das Authentifizierungsgeheimnis werden mit weiteren Details der Push-Subscription an den Anwendungsserver gesendet.
Beim Senden einer Nachricht erzeugt der Anwendungsserver ein ECDH-Schlüsselpaar und ein zufälliges Salt. Der öffentliche ECDH-Schlüssel wird im Parameter „keyid“ des Headers der verschlüsselten Inhaltskodierung kodiert, das Salt im Parameter „salt“ desselben Headers (siehe Abschnitt 2.1 von [RFC8188]). Das ECDH-Schlüsselpaar kann nach der Verschlüsselung verworfen werden.
Der Inhalt der Push-Nachricht wird mit einem Inhaltsverschlüsselungsschlüssel (content encryption key) und einem Nonce verschlüsselt oder entschlüsselt. Diese Werte werden abgeleitet, indem „keyid“ und „salt“ als Eingaben in das in Abschnitt 3 beschriebene Verfahren einfließen.
2.1. Verteilung von Schlüsseln und Geheimnissen
Die die Subscription nutzende Anwendung verteilt den öffentlichen Subscription-Schlüssel und das Authentifizierungsgeheimnis an einen autorisierten Anwendungsserver. Dies kann zusammen mit weiteren vom User-Agent bereitgestellten Subscription-Informationen wie der Push-Subscription-URI erfolgen.
Eine Anwendung MUST für diesen Zweck ein authentisiertes, vertraulichkeitsgeschütztes Kommunikationsmedium verwenden. Neben den in [RFC8030] genannten Gründen stellt dies sicher, dass das Authentifizierungsgeheimnis nicht an Unbefugte gelangt, die sonst Push-Nachrichten erzeugen könnten, die der User-Agent akzeptiert.
Die meisten Anwendungen mit Push-Nachrichten haben bereits eine Beziehung zu einem Anwendungsserver, über die Subscription-Daten verteilt werden können. Ein authentisiertes Kommunikationsverfahren mit angemessenem Schutz von Vertraulichkeit und Integrität, etwa HTTPS [RFC2818], genügt.