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

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

RTCCertificate'lar, 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 uygulanmasıdır.)

Yakın zamana kadar WebRTC, sertifikalar için RSA-1024 anahtarlarını kullanıyordu. Bu anahtarların birkaç dezavantajı vardır:

  • RSA-1024 anahtarları oluşturmak, çağrı kurulum süresini yaklaşık 1.000 ms'ye kadar artırabilir.
  • 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şvurmuştur.

Anahtar gücü sorunu, 2048 bit RSA anahtarlarına veya daha fazlasına gidilerek çözülebilir ancak görüşme kurulumu birkaç saniye daha geciktirilir. Chrome 52, RSA anahtar boyutunu değiştirmek yerine sertifikalarda kullanılmak üzere ECDSA anahtarlarını (Elliptic Eğri Dijital İmza Algoritması) uygular. Bu anahtarlar 3.072 bit RSA anahtarları kadar güçlüdür ancak binlerce kat daha hızlıdır: ECDSA ile çağrı kurulumu ek yükü yalnızca birkaç milisaniye sürer.

Sonuç olarak 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 ECDSA'yı etkinleştirebilirsiniz:

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

Chrome 52'de 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'yı IndexedDB'de depolama

Chrome 52'deki başka bir iyileştirme: WebRTC tarafından kullanılan RTCCertificates, oturumlar arasında yeni sertifika oluşturma ihtiyacını ortadan kaldırarak IndexedDB depolama alanından kaydedilip yüklenebilir. Örneğin, hâlâ RSA kullanmanız gerekiyorsa ve RSA oluşturma ek yükünü önlemek istiyorsanız bu yöntem faydalı olabilir. ECDSA ile her seferinde yeni bir sertifika oluşturacak kadar hızlı olduğundan önbelleğe alma gerekli değildir.

RTCCertificate IndexedDB depolama alanı Firefox'ta kullanıma sunulmuştur ve Opera 39 sürümündedir.

Daha fazla bilgi