ECDSA für WebRTC – mehr Sicherheit, besserer Datenschutz und bessere Leistung

Ab Chrome 52 verwendet WebRTC einen viel effizienteren und sichereren Algorithmus für die Zertifikatsgenerierung (RTCCertificate): ECDSA. Außerdem können RTCCertificates jetzt mit IndexedDB gespeichert werden.

RTCCertificates sind die selbst signierten Zertifikate, die beim DTLS-Handshake beim Einrichten einer WebRTC-Peer-Verbindung verwendet werden. (DTLS ist eine Implementierung des kryptografischen Protokolls TLS für Datagrammprotokolle wie UDP, das von WebRTC verwendet wird.)

Bis vor Kurzem wurden in WebRTC RSA-1024-Schlüssel für Zertifikate verwendet. Diese Schlüssel haben mehrere Nachteile:

  • Das Generieren von RSA-1024-Schlüsseln kann die Anruf-Setup-Zeit um bis zu etwa 1.000 ms verlängern.
  • 1024-Bit-RSA-Schlüssel bieten keine ausreichende kryptografische Stärke.

Da die Zertifikatsgenerierung mit RSA-1024 langsam ist, bereiten einige mobile Apps Zertifikate im Voraus vor oder verwenden sie wieder.

Das Problem mit der Schlüsselstärke könnte durch die Verwendung von RSA-Schlüsseln mit 2.048 Bit oder mehr behoben werden, dies würde die Anrufeinrichtung jedoch um mehrere zusätzliche Sekunden verzögern. Anstatt die RSA-Schlüsselgröße zu ändern, werden in Chrome 52 ECDSA-Schlüssel (Elliptic Curve Digital Signature Algorithm) für die Verwendung in Zertifikaten implementiert. Sie sind so sicher wie 3.072-Bit-RSA-Schlüssel, aber um ein Vielfaches schneller: Der Aufwand für die Anrufeinrichtung mit ECDSA beträgt nur wenige Millisekunden.

Insgesamt bieten ECDSA-Schlüssel mehr Sicherheit, mehr Datenschutz und eine bessere Leistung – insbesondere auf Mobilgeräten. Aus diesen Gründen ist ECDSA im Entwurf der WebRTC Security Architecture vorgeschrieben.

Ab Chrome 47 können Sie ECDSA aktivieren:

// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
    name: "ECDSA",
    namedCurve: "P-256"
}).then(function(certificate) {
    var pc = new RTCPeerConnection({..., certificates: [certificate]});
});

Ab Chrome 52 ist ECDSA zwar standardmäßig aktiviert, Sie können aber weiterhin RSA-Zertifikate generieren:

pc.generateCertificate({
    name: "RSASSA-PKCS1-v1_5",
    modulusLength: 2048,
    publicExponent: new Uint8Array([1, 0, 1]),
    hash: "SHA-256"
})

Weitere Informationen zu generateCertificate() finden Sie im W3C-Entwurf.

RTCCertificate in IndexedDB speichern

Eine weitere Verbesserung in Chrome 52: Die von WebRTC verwendeten RTCCertificates können im IndexedDB-Speicher gespeichert und geladen werden. So müssen zwischen Sitzungen keine neuen Zertifikate generiert werden. Dies kann beispielsweise nützlich sein, wenn Sie RSA weiterhin verwenden müssen und den RSA-Generierungsaufwand vermeiden möchten. Bei ECDSA ist das Caching nicht erforderlich, da es schnell genug ist, um jedes Mal ein neues Zertifikat zu generieren.

Die IndexedDB-Speicherung von RTCCertificate wurde bereits in Firefox eingeführt und ist in Opera 39 verfügbar.

Weitere Informationen