A partire da Chrome 52, WebRTC utilizza un algoritmo molto più efficiente e sicuro per la generazione del certificato (RTCCertificate): ECDSA. Inoltre, ora RTCCertificates può essere archiviato con IndexedDB.
RTCCertificates sono i certificati autofirmati utilizzati nell'handshake DTLS durante la configurazione di una connessione peer WebRTC. DTLS è un'implementazione del protocollo crittografico TLS per i protocolli datagram come UDP, utilizzato da WebRTC.
Fino a poco tempo fa, WebRTC utilizzava chiavi RSA-1024 per i certificati. Questi token presentano diversi svantaggi:
- La generazione di chiavi RSA-1024 può aumentare il tempo di configurazione della chiamata fino a circa 1000 ms.
- Le chiavi RSA a 1024 bit non forniscono una sicurezza crittografica adeguata.
Poiché la generazione di certificati con RSA-1024 è lenta, alcune app mobile hanno fatto ricorso alla preparazione dei certificati in anticipo o al loro riutilizzo.
Il problema di robustezza della chiave potrebbe essere risolto utilizzando chiavi RSA da 2048 bit o più, ma ciò ritarderebbe la configurazione della chiamata di alcuni secondi. Anziché modificare la dimensione della chiave RSA, Chrome 52 implementa le chiavi ECDSA (Elliptic Curve Digital Signature Algorithm) per l'utilizzo nei certificati. Sono efficaci quanto le chiavi RSA a 3072 bit, ma sono diverse migliaia di volte più veloci: il sovraccarico di configurazione delle chiamate con ECDSA è di pochi millisecondi.
Tutto sommato, le chiavi ECDSA garantiscono una maggiore sicurezza, una maggiore privacy e prestazioni migliori, in particolare sui dispositivi mobili. Per questi motivi, ECDSA è stato obbligatorio nella bozza dell'architettura di sicurezza WebRTC.
Da Chrome 47 puoi attivare ECDSA:
// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
name: "ECDSA",
namedCurve: "P-256"
}).then(function(certificate) {
var pc = new RTCPeerConnection({..., certificates: [certificate]});
});
In 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 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 le sessioni. Ciò può essere utile, ad esempio, se devi comunque utilizzare gli RSA e vuoi evitare il sovraccarico della generazione degli RSA. Con ECDSA, la memorizzazione nella cache non è necessaria perché è abbastanza veloce da generare un nuovo certificato ogni volta.
Lo spazio di archiviazione IndexedDB di RTCCertificate è già disponibile in Firefox e in Opera 39.