ECDSA per WebRTC: maggiore sicurezza, privacy e rendimento migliori

A partire da Chrome 52, WebRTC utilizza un algoritmo molto più efficiente e sicuro per la generazione di certificati (RTCCertificate): ECDSA. Inoltre, ora è possibile archiviare i certificati RTCCertificate con IndexedDB.

Gli RTCCertificate sono certificati autofirmati utilizzati nell'handshake DTLS durante la configurazione di una connessione peer WebRTC. DTLS è un'implementazione del protocollo crittografico TLS per protocolli datagrammi come UDP, che viene utilizzato da WebRTC.

Fino a poco tempo fa, WebRTC utilizzava chiavi RSA-1024 per i certificati. Esistono diversi svantaggi con queste chiavi:

  • La generazione di chiavi RSA-1024 può aggiungere fino a circa 1000 ms nel tempo di configurazione della chiamata.
  • Le chiavi RSA a 1024 bit non forniscono una potenza crittografica adeguata.

Poiché la generazione dei certificati con RSA-1024 è lenta, alcune app mobile hanno fatto ricorso a preparare in anticipo i certificati o a riutilizzarli.

Il problema relativo alla sicurezza della chiave potrebbe essere risolto utilizzando le chiavi RSA a 2048 bit o più, ma questo ritarderebbe la configurazione della chiamata di diversi secondi in più. Anziché modificare le dimensioni della chiave RSA, Chrome 52 implementa le chiavi ECDSA (Elliptic Curve Digital Signature Algorithm) da utilizzare nei certificati. La loro potenza è pari a quella delle chiavi RSA a 3072 bit, ma diverse migliaia di volte più velocemente: l'overhead per la configurazione delle chiamate con ECDSA è di pochi millisecondi.

Nel complesso, le chiavi ECDSA garantiscono maggiore sicurezza, privacy e prestazioni migliori, in particolare sui dispositivi mobili. Per questi motivi, l'ECDSA è stato obbligatorio nella bozza dell'architettura di sicurezza WebRTC.

A partire dalla versione 47 di Chrome puoi attivare ECDSA:

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

A partire da Chrome 52, anche se ECDSA è abilitato per impostazione predefinita, puoi comunque scegliere di generare certificati RSA:

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

Per ulteriori informazioni su generateCertificate(), consulta la bozza di W3C.

Archiviazione di RTCCertificate in IndexedDB

Un altro miglioramento in Chrome 52: gli RTCCertificates utilizzati da WebRTC possono essere salvati e caricati dallo spazio di archiviazione IndexedDB, evitando la necessità di generare nuovi certificati tra una sessione e l'altra. Questo può essere utile, ad esempio, se devi ancora utilizzare gli RSA e vuoi evitare l'overhead della generazione RSA. Con ECDSA, la memorizzazione nella cache non è necessaria poiché è abbastanza veloce da generare ogni volta un nuovo certificato.

Lo spazio di archiviazione RTCCertificate IndexedDB è già stato spedito in Firefox ed è in Opera 39.

Scopri di più