ECDSA voor WebRTC - Betere beveiliging, betere privacy en betere prestaties

Vanaf Chrome 52 gebruikt WebRTC een veel efficiënter en veiliger algoritme voor het genereren van certificaten (RTCCertificate): ECDSA. Bovendien kunnen RTCCertificaten nu worden opgeslagen met IndexedDB.

RTCCertificaten zijn de zelfondertekende certificaten die worden gebruikt in de DTLS- handshake bij het opzetten van een WebRTC-peerverbinding. (DTLS is een implementatie van het cryptografische protocol TLS voor datagramprotocollen zoals UDP , dat wordt gebruikt door WebRTC.)

Tot voor kort gebruikte WebRTC RSA-1024-sleutels voor certificaten. Er zijn verschillende nadelen aan deze toetsen:

  • Het genereren van RSA-1024-sleutels kan tot ongeveer 1000 ms aan oproepopbouwtijd opleveren.
  • 1024-bits RSA-sleutels bieden niet voldoende cryptografische sterkte.

Omdat het genereren van certificaten met RSA-1024 langzaam gaat, hebben sommige mobiele apps hun toevlucht genomen tot het vooraf voorbereiden van certificaten of het hergebruiken ervan.

Het probleem met de sleutelsterkte zou kunnen worden opgelost door naar 2048-bits RSA-sleutels of meer te gaan, maar dat zou het opzetten van een oproep met enkele extra seconden vertragen. In plaats van de grootte van de RSA-sleutel te wijzigen, implementeert Chrome 52 ECDSA-sleutels (Elliptic Curve Digital Signature Algorithm) voor gebruik in certificaten. Deze zijn net zo sterk als 3072-bits RSA-sleutels, maar duizenden keren sneller: de overhead voor het opzetten van gesprekken met ECDSA bedraagt ​​slechts een paar milliseconden.

Al met al zorgen ECDSA-sleutels voor betere beveiliging, betere privacy en betere prestaties, vooral op mobiel. Om deze redenen is ECDSA verplicht gesteld in het WebRTC Security Architecture- ontwerp.

Vanaf Chrome 47 kunt u zich aanmelden voor ECDSA:

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

Hoewel ECDSA standaard is ingeschakeld in Chrome 52, kunt u er nog steeds voor kiezen om RSA-certificaten te genereren:

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

(Zie het W3C-concept voor meer informatie over generateCertificate() .)

RTCCertificaat opslaan in IndexedDB

Nog een verbetering in Chrome 52: de RTCCertificaten die door WebRTC worden gebruikt, kunnen worden opgeslagen en geladen vanuit IndexedDB-opslag, waardoor de noodzaak wordt vermeden om tussen sessies nieuwe certificaten te genereren. Dit kan bijvoorbeeld handig zijn als u nog steeds RSA moet gebruiken en de overhead voor het genereren van RSA wilt vermijden. Met ECDSA is caching niet nodig, omdat het snel genoeg is om elke keer een nieuw certificaat te genereren.

RTCCertificate IndexedDB-opslag is al beschikbaar in Firefox en bevindt zich in Opera 39.

Meer informatie