A partir de Chrome 52, WebRTC usa un algoritmo mucho más eficiente y seguro para la generación de certificados (RTCCertificate): ECDSA. Además, RTCCertificates ahora se puede almacenar con IndexedDB.
RTCCertificates son los certificados autofirmados que se usan en el protocolo de enlace DTLS cuando se configura una conexión de pares de WebRTC. (DTLS es una implementación del protocolo criptográfico TLS para protocolos de datagramas, como UDP, que usa WebRTC).
Hasta hace poco, WebRTC usaba claves RSA-1024 para los certificados. Estas claves tienen varias desventajas:
- La generación de claves RSA-1024 puede agregar alrededor de 1,000 ms al tiempo de configuración de la llamada.
- Las claves RSA de 1,024 bits no proporcionan una fortaleza criptográfica adecuada.
Debido a que la generación de certificados con RSA-1024 es lenta, algunas apps para dispositivos móviles recurren a preparar certificados con anticipación o a reutilizarlos.
El problema de la fortaleza de la clave se podría resolver si se usaran claves RSA de 2,048 bits o más, pero eso retrasaría la configuración de la llamada en varios segundos adicionales. En lugar de cambiar el tamaño de la clave RSA, Chrome 52 implementa claves ECDSA (algoritmo de firma digital de curva elíptica) para usarlas en certificados. Son tan seguras como las claves RSA de 3072 bits, pero son miles de veces más rápidas: la sobrecarga de configuración de llamadas con ECDSA es de solo unos pocos milisegundos.
En resumen, las claves ECDSA brindan una mejor seguridad, privacidad y rendimiento, especialmente en dispositivos móviles. Por estos motivos, se estableció la ECDSA como obligatoria en el borrador de la arquitectura de seguridad de WebRTC.
A partir de Chrome 47, puedes habilitar ECDSA:
// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
name: "ECDSA",
namedCurve: "P-256"
}).then(function(certificate) {
var pc = new RTCPeerConnection({..., certificates: [certificate]});
});
A partir de Chrome 52, aunque ECDSA está habilitado de forma predeterminada, puedes elegir generar certificados RSA:
pc.generateCertificate({
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
})
(consulta el borrador del W3C para obtener más información sobre generateCertificate()
).
Almacenamiento de RTCCertificate en IndexedDB
Otra mejora en Chrome 52: los RTCCertificates que usa WebRTC se pueden guardar y cargar desde el almacenamiento de IndexedDB, lo que evita la necesidad de generar certificados nuevos entre sesiones. Esto puede ser útil, por ejemplo, si aún necesitas usar RSA y quieres evitar la sobrecarga de generación de RSA. Con ECDSA, no es necesario almacenar en caché, ya que es lo suficientemente rápido como para generar un certificado nuevo cada vez.
El almacenamiento de IndexedDB de RTCCertificate ya se envió en Firefox y está en Opera 39.