Ab Chrome 52 verwendet WebRTC einen viel effizienteren und sichereren Algorithmus für die Zertifikatgenerierung (RTCCertificate): ECDSA. Außerdem können RTCCertificates jetzt mit IndexedDB gespeichert werden.
RTCCertificates sind die selbst signierten Zertifikate, die beim DTLS beim Einrichten einer WebRTC-Peer-Verbindung verwendet werden. DTLS ist eine Implementierung des kryptografischen Protokolls TLS für Datagram-Protokolle 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 Anrufeinrichtung um bis zu 1.000 ms verlängern.
- 1.024-Bit-RSA-Schlüssel bieten nicht die erforderliche kryptografische Stärke.
Da die Zertifikatgenerierung 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 mindestens 2.048 Bit behoben werden. Das würde jedoch die Anrufeinrichtung um einige 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 stark wie 3.072-Bit-RSA-Schlüssel, aber mehrere tausendmal schneller: Der Overhead bei der 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 wurde ECDSA im Entwurf der WebRTC-Sicherheitsarchitektur 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 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
Weitere Verbesserung in Chrome 52: Die von WebRTC verwendeten RTCCertificates können im IndexedDB-Speicher gespeichert und geladen werden, sodass zwischen den Sitzungen keine neuen Zertifikate generiert werden müssen. Dies kann beispielsweise nützlich sein, wenn Sie weiterhin RSA verwenden müssen und den Overhead der RSA-Generierung vermeiden möchten. Bei ECDSA ist kein Caching erforderlich, da es schnell genug ist, jedes Mal ein neues Zertifikat zu generieren.
Der IndexedDB-Speicher für RTCCertificate ist bereits in Firefox und Opera 39 verfügbar.