WebRTC के लिए ECDSA - बेहतर सुरक्षा, बेहतर निजता, और बेहतर परफ़ॉर्मेंस

Chrome 52 से, WebRTC में ECDSA नाम का सर्टिफ़िकेट जनरेट करने के लिए, ज़्यादा बेहतर और सुरक्षित एल्गोरिदम का इस्तेमाल किया जाता है. इसके अलावा, RTCCertificates को अब IndexedDB के साथ सेव किया जा सकता है.

RTCCertificates, खुद से हस्ताक्षर किए गए सर्टिफ़िकेट होते हैं. इनका इस्तेमाल, WebRTC पीयर कनेक्शन को सेट अप करते समय DTLS हैंडशेक में किया जाता है. (डीटीएलएस, यूडीपी जैसे डेटाग्राम प्रोटोकॉल के लिए क्रिप्टोग्राफ़िक प्रोटोकॉल TLS लागू करता है. इसका इस्तेमाल WebRTC करता है.)

हाल ही तक, WebRTC में सर्टिफ़िकेट के लिए आरएसए-1024 कुंजियों का इस्तेमाल किया जाता था. इन कुंजियों के कई नुकसान हैं:

  • आरएसए-1024 कुंजियां जनरेट करने से, कॉल सेटअप करने में करीब 1,000 मि॰से॰ का समय लग सकता है.
  • 1024-बिट आरएसए कुंजियां, ज़रूरी क्रिप्टोग्राफ़िक मज़बूती नहीं उपलब्ध कराती हैं.

आरएसए-1024 के साथ सर्टिफ़िकेट जनरेट होने में ज़्यादा समय लगता है. इसलिए, कुछ मोबाइल ऐप्लिकेशन ने पहले से सर्टिफ़िकेट तैयार करना या उनका दोबारा इस्तेमाल करना शुरू किया है.

क्षमता की मुख्य समस्या को 2048-बिट आरएसए कुंजियों या उससे ज़्यादा पर जाकर हल किया जा सकता है, लेकिन इससे कॉल सेटअप करने में कुछ और सेकंड की देरी हो सकती है. आरएसए कुंजी का साइज़ बदलने के बजाय, Chrome 52 सर्टिफ़िकेट में इस्तेमाल के लिए, ईसीडीएसए कुंजियां (Elliptic Curve Digital Signature Algorithm) लागू करता है. ये 3072-बिट आरएसए कुंजियों की तरह मज़बूत हैं, लेकिन कई हज़ार गुना तेज़ हैं: ईसीडीएसए के साथ कॉल सेटअप ओवरहेड सिर्फ़ कुछ मिलीसेकंड ही हैं.

कुल मिलाकर, ईसीडीएसए कुंजियों का मतलब है बेहतर सुरक्षा, बेहतर निजता और बेहतर परफ़ॉर्मेंस — खास तौर पर मोबाइल पर. इन वजहों से, ईसीडीएसए को WebRTC सिक्योरिटी आर्किटेक्चर के ड्राफ़्ट में शामिल कर दिया गया है.

Chrome 47 से ECDSA में ऑप्ट-इन किया जा सकता है:

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

Chrome 52 से, हालांकि ईसीडीएसए डिफ़ॉल्ट रूप से चालू होता है, फिर भी आपके पास आरएसए सर्टिफ़िकेट जनरेट करने का विकल्प होता है:

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

generateCertificate() के बारे में ज़्यादा जानकारी के लिए, W3C ड्राफ़्ट देखें.

IndexedDB में RTCCertificate स्टोर करना

Chrome 52 में एक और सुधार: WebRTC द्वारा इस्तेमाल किए जाने वाले RTCCertificates को IndexedDB स्टोरेज से सेव और लोड किया जा सकता है. इससे सेशन के बीच नए सर्टिफ़िकेट जनरेट करने की ज़रूरत नहीं होती. उदाहरण के लिए, अगर आपको अब भी आरएसए का इस्तेमाल करना है और आरएसए जनरेट करने से जुड़े ओवरहेड से बचना है, तो यह काम का हो सकता है. ईसीडीएसए में कैश मेमोरी की ज़रूरत नहीं होती, क्योंकि यह इतनी तेज़ है कि हर बार नया सर्टिफ़िकेट जनरेट किया जा सकता है.

RTCCertificate IndexedDB स्टोरेज को Firefox में पहले ही शिप कर दिया गया है और यह Opera 39 में उपलब्ध है.

ज़्यादा जानें