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 (RTCCertificates): ECDSA. Bovendien kunnen RTCCertificates nu worden opgeslagen met IndexedDB.

RTCC-certificaten 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 door WebRTC wordt gebruikt.)

Tot voor kort gebruikte WebRTC RSA-1024-sleutels voor certificaten. Deze sleutels hebben verschillende nadelen:

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

Omdat het genereren van certificaten met RSA-1024 langzaam verloopt, maken sommige mobiele apps gebruik van het vooraf voorbereiden van certificaten of het hergebruiken ervan.

Het probleem met de sleutelsterkte zou kunnen worden opgelost door over te stappen op 2048-bits RSA-sleutels of meer, maar dat zou de aanroepconfiguratie met enkele seconden vertragen. In plaats van de RSA-sleutelgrootte aan te passen, 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 aanroepconfiguratie met ECDSA bedraagt ​​slechts enkele milliseconden.

Al met al zorgen ECDSA-sleutels voor betere beveiliging, meer privacy en betere prestaties, vooral op mobiele apparaten. Om deze redenen is ECDSA verplicht gesteld in het ontwerp van de WebRTC-beveiligingsarchitectuur .

Vanuit 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]});
});

Vanuit Chrome 52 kunt u, hoewel ECDSA standaard is ingeschakeld, 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() .)

RTCCertificate opslaan in IndexedDB

Nog een verbetering in Chrome 52: de RTCC-certificaten die door WebRTC worden gebruikt, kunnen worden opgeslagen en geladen vanuit de IndexedDB-opslag, waardoor het niet nodig is om tussen sessies nieuwe certificaten te genereren. Dit kan bijvoorbeeld handig zijn als u nog steeds RSA moet gebruiken en de overhead van 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 is beschikbaar in Opera 39.

Meer informatie