A partir do Chrome 52, o WebRTC usa um algoritmo muito mais eficiente e seguro para a geração de certificados (RTCCertificate): ECDSA. Além disso, RTCCertificates agora pode ser armazenado com IndexedDB.
RTCCertificates são os certificados autoassinados usados no handshake DTLS ao configurar uma conexão de peering do WebRTC. O DTLS é uma implementação do protocolo criptográfico TLS para protocolos de datagramas, como UDP, usado pelo WebRTC.
Até recentemente, o WebRTC usava chaves RSA-1024 para certificados. Essas chaves têm várias desvantagens:
- A geração de chaves RSA-1024 pode levar até 1.000 ms no tempo de configuração da chamada.
- As chaves RSA de 1.024 bits não têm segurança criptográfica adequada.
Como a geração de certificados com RSA-1024 é lenta, alguns apps para dispositivos móveis recorreram à preparação prévia de certificados ou reutilizá-los.
O problema de força da chave poderia ser resolvido com chaves RSA de 2048 bits ou mais, mas isso atrasaria a configuração da chamada em vários segundos adicionais. Em vez de alterar o tamanho da chave RSA, o Chrome 52 implementa chaves ECDSA (algoritmo de assinatura digital de curva elíptica) para uso em certificados. Elas têm a mesma eficiência que as chaves RSA de 3.072 bits, mas são milhares de vezes mais rápidas: a sobrecarga de configuração de chamadas com o ECDSA é de apenas alguns milissegundos.
No geral, as chaves ECDSA aumentam a segurança, a privacidade e a performance, principalmente em dispositivos móveis. Por esses motivos, a ECDSA é obrigatória no rascunho Arquitetura de segurança WebRTC.
A partir do Chrome 47, é possível ativar o ECDSA:
// or webkitRTCPeerConnection
RTCPeerConnection.generateCertificate({
name: "ECDSA",
namedCurve: "P-256"
}).then(function(certificate) {
var pc = new RTCPeerConnection({..., certificates: [certificate]});
});
Embora o ECDSA esteja ativado por padrão no Chrome 52, você ainda pode gerar certificados RSA:
pc.generateCertificate({
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
})
Consulte o rascunho do W3C para saber mais sobre generateCertificate()
.
Como armazenar RTCCertificate no IndexedDB
Outra melhoria no Chrome 52: os RTCCertificates usados pelo WebRTC podem ser salvos e carregados no armazenamento do IndexedDB, evitando a necessidade de gerar novos certificados entre as sessões. Isso pode ser útil, por exemplo, se você ainda precisar usar RSA e quiser evitar a sobrecarga na geração. Com o ECDSA, o armazenamento em cache não é necessário porque é rápido o suficiente para gerar sempre um novo certificado.
O armazenamento IndexedDB do RTCCertificate já foi disponibilizado no Firefox e está no Opera 39.