ECDSA untuk WebRTC - Keamanan dan privasi yang lebih baik, serta performa yang lebih baik

Mulai Chrome 52, WebRTC menggunakan algoritme yang jauh lebih efisien dan aman untuk pembuatan sertifikat (RTCCertificate): ECDSA. Selain itu, RTCCertificates sekarang bisa disimpan dengan IndexedDB.

RTCCertificate adalah sertifikat yang ditandatangani sendiri dan digunakan dalam handshake DTLS saat menyiapkan koneksi pembanding WebRTC. (DTLS adalah penerapan protokol kriptografi TLS untuk protokol datagram seperti UDP, yang digunakan oleh WebRTC.)

Hingga baru-baru ini, WebRTC menggunakan kunci RSA-1024 untuk sertifikat. Ada beberapa kekurangan dari kunci ini:

  • Membuat kunci RSA-1024 dapat memerlukan waktu hingga sekitar 1.000 md dalam waktu penyiapan panggilan.
  • Kunci RSA 1024-bit tidak memberikan kekuatan kriptografi yang memadai.

Karena pembuatan sertifikat dengan RSA-1024 lambat, beberapa aplikasi seluler terpaksa menyiapkan sertifikat terlebih dahulu atau menggunakannya kembali.

Masalah kekuatan kunci dapat diatasi dengan membuka kunci RSA 2048-bit atau lebih, tetapi hal itu akan menunda penyiapan panggilan selama beberapa detik lagi. Alih-alih mengubah ukuran kunci RSA, Chrome 52 menerapkan kunci ECDSA (Elliptic Curve Digital Signature Algorithm) untuk digunakan dalam sertifikat. Keduanya sekuat kunci RSA 3072-bit, tetapi beberapa ribu kali lebih cepat: overhead penyiapan panggilan dengan ECDSA hanya membutuhkan beberapa milidetik.

Secara keseluruhan, kunci ECDSA berarti keamanan yang lebih baik, privasi yang lebih baik, dan performa yang lebih baik — terutama di perangkat seluler. Oleh karena itu, ECDSA telah diwajibkan dalam draf Arsitektur Keamanan WebRTC.

Dari Chrome 47, Anda dapat ikut serta dalam ECDSA:

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

Mulai Chrome 52, meskipun ECDSA diaktifkan secara default, Anda tetap dapat memilih untuk membuat sertifikat RSA:

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

(Lihat draf W3C untuk informasi selengkapnya tentang generateCertificate().)

Menyimpan RTCCertificate di IndexedDB

Peningkatan lain di Chrome 52: RTCCertificates yang digunakan oleh WebRTC dapat disimpan dan dimuat dari penyimpanan IndexedDB, sehingga tidak perlu membuat sertifikat baru di antara sesi. Hal ini dapat berguna, misalnya, jika Anda masih perlu menggunakan RSA dan ingin menghindari overhead pembuatan RSA. Dengan ECDSA, penyimpanan ke cache tidak diperlukan karena cukup cepat untuk membuat sertifikat baru setiap saat.

Penyimpanan IndexedDB RTCCertificate telah dikirimkan di Firefox dan di Opera 39.

Cari tahu selengkapnya