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

Ab Chrome 52 verwendet WebRTC einen wesentlich effizienteren und sichereren Algorithmus für die Zertifikatgenerierung (RTCCertificate): ECDSA. Darüber hinaus können RTCCertificates jetzt mit IndexedDB gespeichert werden.

RTCCertificates sind die selbst signierten Zertifikate, die im DTLS-Handshake 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 verwendete WebRTC für Zertifikate RSA-1024-Schlüssel. Diese Schlüssel haben mehrere Nachteile:

  • Werden RSA-1024-Schlüssel generiert, kann die Anrufeinrichtung bis zu 1.000 ms dauern.
  • 1024-Bit-RSA-Schlüssel bieten keine angemessene kryptografische Stärke.

Da die Zertifikatgenerierung mit RSA-1024 langsam ist, haben einige mobile Apps Zertifikate im Voraus vorbereitet oder wiederverwendet.

Das Problem mit der Schlüsselstärke lässt sich mit mindestens 2.048-Bit-RSA-Schlüsseln beheben. Dies würde die Einrichtung des Aufrufs jedoch um einige zusätzliche Sekunden verzögern. Anstatt die Größe des RSA-Schlüssels zu ändern, werden in Chrome 52 ECDSA-Schlüssel (Elliptic Curve Digital Signature Algorithm) zur Verwendung in Zertifikaten implementiert. Diese sind so stark wie 3072-Bit-RSA-Schlüssel, aber um einiges schneller: Der Aufwand für die Anrufeinrichtung mit ECDSA beträgt nur wenige Millisekunden.

Insgesamt sorgen ECDSA-Schlüssel für mehr Sicherheit, besseren 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 zwar standardmäßig aktiviert, Sie können aber trotzdem 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() findest du im W3C-Entwurf.

RTCCertificate in IndexedDB speichern

Eine weitere Verbesserung in Chrome 52: Die von WebRTC verwendeten RTCCertificates können gespeichert und aus dem IndexedDB-Speicher geladen werden, sodass zwischen Sitzungen keine neuen Zertifikate mehr erstellt werden müssen. Das kann beispielsweise nützlich sein, wenn Sie immer noch RSA verwenden müssen und den Aufwand für die RSA-Generierung vermeiden möchten. Bei ECDSA ist kein Caching erforderlich, da es schnell genug ist, um jedes Mal ein neues Zertifikat zu generieren.

Der RTCCertificate IndexedDB-Speicher wurde bereits in Firefox bereitgestellt und ist in Opera 39 verfügbar.

Weitere Informationen