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 générer les certificats (RTCCertificate) : ECDSA. De plus, les RTCCertificates peuvent désormais être stockés avec IndexedDB.

Les RTCCertificates sont les certificats autosignés utilisés lors du handshake DTLS lors de la configuration d'une connexion de pairs WebRTC. (DTLS est une implémentation du protocole cryptographique TLS pour les protocoles de datagrammes tels que UDP, 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 totaliser environ 1 000 ms de temps de configuration d'appel.
  • Les clés RSA 1 024 bits n'offrent pas un niveau de chiffrement approprié.

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

Le problème peut ê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) pour les certificats. Elles sont aussi puissantes que des clés RSA de 3 072 bits, mais plusieurs milliers de fois plus rapides: les frais de configuration des appels avec ECDSA ne durent que quelques millisecondes.

Dans l'ensemble, les clés ECDSA améliorent la sécurité, la confidentialité et les performances, en particulier sur mobile. C'est pourquoi l'ECDSA a été exigée dans le brouillon de l'architecture de sécurité WebRTC.

À partir de Chrome 47, vous pouvez activer ECDSA:

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

Dans Chrome 52, bien que 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 plus d'informations sur generateCertificate(), consultez le brouillon du W3C.

Stocker un RTCCertificate dans IndexedDB

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

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

En savoir plus