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 Generierung von Zertifikaten (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 von WebRTC verwendeten kryptografischen Protokolls TLS für Datagram-Protokolle wie UDP.

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

  • Beim Generieren von RSA-1024-Schlüsseln kann die Einrichtungszeit für Anrufe bis zu 1.000 ms betragen.
  • 1.024-Bit-RSA-Schlüssel bieten keine ausreichende kryptografische Stärke.

Da die Zertifikatserstellung mit RSA-1024 langsam ist, haben einige mobile Apps versucht, Zertifikate im Voraus vorzubereiten oder sie wiederzuverwenden.

Das Problem mit der Schlüsselstärke könnte behoben werden, indem 2048-Bit-RSA-Schlüssel oder mehr verwendet werden. Dadurch würde die Einrichtung des Anrufs jedoch um einige zusätzliche Sekunden verzögert werden. Statt 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 einige Tausend Mal schneller: Der Einrichtungsaufwand für Anrufe mit ECDSA beträgt nur wenige Millisekunden.

Insgesamt bedeuten ECDSA-Schlüssel 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]});
});

Auch wenn ECDSA standardmäßig aktiviert ist, können Sie in Chrome 52 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 generiert werden müssen. Das kann beispielsweise nützlich sein, wenn Sie RSA noch 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.

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

Weitere Informationen