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

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

RTCCertificates adalah sertifikat yang ditandatangani sendiri yang digunakan dalam handshake DTLS saat menyiapkan koneksi peer WebRTC. (DTLS adalah implementasi 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 kelemahan pada kunci ini:

  • Pembuatan kunci RSA-1024 dapat menambah waktu penyiapan panggilan hingga sekitar 1.000 md.
  • Kunci RSA 1024-bit tidak memberikan kekuatan kriptografis yang memadai.

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

Masalah kekuatan kunci dapat diatasi dengan menggunakan kunci RSA 2048-bit atau lebih, tetapi hal ini akan menunda penyiapan panggilan selama beberapa detik tambahan. Chrome 52 menerapkan kunci ECDSA (Elliptic Curve Digital Signature Algorithm) untuk digunakan dalam sertifikat, bukan mengubah ukuran kunci RSA. Kunci ini sama kuatnya dengan kunci RSA 3072-bit, tetapi beberapa ribu kali lebih cepat: overhead penyiapan panggilan dengan ECDSA hanya beberapa milidetik.

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

Mulai Chrome 47, Anda dapat memilih untuk menggunakan ECDSA:

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

Dari Chrome 52, meskipun ECDSA diaktifkan secara default, Anda masih 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 lainnya di Chrome 52: RTCCertificates yang digunakan oleh WebRTC dapat disimpan dan dimuat dari penyimpanan IndexedDB, sehingga Anda 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 dalam cache tidak diperlukan karena cukup cepat untuk membuat sertifikat baru setiap saat.

Penyimpanan IndexedDB RTCCertificate telah dikirim di Firefox dan ada di Opera 39.

Cari tahu selengkapnya