ECDSA pour WebRTC : meilleure sécurité, confidentialité et performances améliorées

À partir de Chrome 52, WebRTC utilise un algorithme beaucoup plus efficace et sécurisé pour la génération de certificats (RTCCertificate) : ECDSA. De plus, les RTCCertificates peuvent désormais être stockés avec IndexedDB.

Les RTCCertificates sont les certificats autosignés utilisés dans l'échange DTLS lors de la configuration d'une connexion peer WebRTC. (Le DTLS est une implémentation du protocole cryptographique TLS pour les protocoles de datagramme tels que UDP, qui est utilisé par WebRTC.)

Jusqu'à récemment, WebRTC utilisait des clés RSA-1024 pour les certificats. Ces clés présentent plusieurs inconvénients:

  • La génération de clés RSA-1024 peut ajouter jusqu'à 1 000 ms au temps de configuration de l'appel.
  • Les clés RSA 1 024 bits ne fournissent pas une intensité de chiffrement adéquate.

La génération de certificats avec RSA-1024 étant lente, certaines applications mobiles ont recours à la préparation préalable des certificats ou à leur réutilisation.

Le problème de force de clé pourrait être résolu en utilisant des clés RSA de 2 048 bits ou plus, mais cela retarderait la configuration de l'appel de plusieurs secondes supplémentaires. Au lieu de modifier la taille de la clé RSA, Chrome 52 implémente des clés ECDSA (Elliptic Curve Digital Signature Algorithm) à utiliser dans les certificats. Elles sont aussi efficaces que les clés RSA de 3 072 bits, mais plusieurs milliers de fois plus rapides: les frais généraux de configuration des appels avec ECDSA ne représentent que quelques millisecondes.

En résumé, les clés ECDSA offrent une sécurité, une confidentialité et des performances supérieures, en particulier sur mobile. Pour ces raisons, l'ECDSA a été rendu obligatoire dans le brouillon de l'architecture de sécurité WebRTC.

À partir de Chrome 47, vous pouvez activer l'ECDSA:

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

À partir de Chrome 52, bien que l'ECDSA soit activé par défaut, vous pouvez toujours choisir de générer des certificats RSA:

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

(Pour en savoir plus sur generateCertificate(), consultez la version préliminaire du W3C.)

Stocker RTCCertificate dans IndexedDB

Autre amélioration dans Chrome 52: les RTCCertificates utilisés par WebRTC peuvent être enregistrés et chargés à partir du stockage IndexedDB, ce qui évite de générer de nouveaux certificats entre les sessions. Cela peut être utile, par exemple, si vous devez toujours utiliser RSA et que vous souhaitez éviter les frais généraux de génération RSA. Avec ECDSA, le cache n'est pas nécessaire, car il est assez rapide pour générer un nouveau certificat à chaque fois.

Le stockage IndexedDB RTCCertificate est déjà disponible dans Firefox et dans Opera 39.

En savoir plus