WebRTC için ECDSA - Daha iyi güvenlik, daha iyi gizlilik ve daha iyi performans

Chrome 52'den itibaren WebRTC, sertifika (RTCCertificate) oluşturmak için çok daha verimli ve güvenli bir algoritma kullanır: ECDSA. Ayrıca RTCCertificates artık IndexedDB ile depolanabilir.

RTCCertificates, WebRTC eş bağlantısı kurulurken DTLS el sıkışmasında kullanılan kendinden imzalı sertifikalardır. (DTLS, WebRTC tarafından kullanılan UDP gibi datagram protokolleri için TLS kriptografik protokolünün bir uygulamasıdır.)

WebRTC, kısa süre öncesine kadar sertifikalar için RSA-1024 anahtarları kullanıyordu. Bu anahtarların bazı dezavantajları vardır:

  • RSA-1024 anahtarları oluşturmak, arama kurulum süresini yaklaşık 1.000 ms uzatabilir.
  • 1024 bit RSA anahtarları yeterli şifreleme gücü sağlamaz.

RSA-1024 ile sertifika oluşturma işlemi yavaş olduğundan bazı mobil uygulamalar, sertifikaları önceden hazırlamaya veya yeniden kullanmaya başladı.

Anahtar gücü sorunu, 2048 bit veya daha yüksek RSA anahtarlarına geçilerek çözülebilir ancak bu durumda arama kurulumu birkaç saniye daha gecikecektir. Chrome 52, RSA anahtar boyutunu değiştirmek yerine sertifikalarda kullanılmak üzere ECDSA anahtarları (Elliptic Curve Digital Signature Algorithm) uygular. Bunlar 3072 bit RSA anahtarları kadar güçlüdür ancak birkaç bin kat daha hızlıdır: ECDSA ile çağrı kurulum yükü yalnızca birkaç milisaniyedir.

Özetlemek gerekirse ECDSA anahtarları, özellikle mobil cihazlarda daha iyi güvenlik, daha iyi gizlilik ve daha iyi performans anlamına gelir. Bu nedenlerle, ECDSA WebRTC Güvenlik Mimarisi taslağında zorunlu kılınmıştır.

Chrome 47'den itibaren ECDSA'yı etkinleştirebilirsiniz:

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

Chrome 52'den itibaren ECDSA varsayılan olarak etkin olsa da RSA sertifikaları oluşturmayı seçebilirsiniz:

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

(generateCertificate() hakkında daha fazla bilgi için W3C taslağına bakın.)

RTCCertificate'ı IndexedDB'de depolama

Chrome 52'de yapılan bir diğer iyileştirme: WebRTC tarafından kullanılan RTCCertificates, IndexedDB depolama alanından kaydedilip yüklenebilir. Böylece oturumlar arasında yeni sertifika oluşturma ihtiyacı ortadan kalkar. Örneğin, RSA'yı kullanmaya devam etmeniz gerekiyorsa ve RSA oluşturma yükünden kaçınmak istiyorsanız bu seçenek yararlı olabilir. ECDSA, her seferinde yeni bir sertifika oluşturacak kadar hızlı olduğundan önbelleğe alma işlemi gerekli değildir.

RTCCertificate IndexedDB depolama alanı, Firefox'ta ve Opera 39'da kullanıma sunulmuştur.

Daha fazla bilgi