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

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

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

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

  • RSA-1024 कुंजियां जनरेट करने से, कॉल सेटअप होने में करीब 1000 मिलीसेकंड लग सकते हैं.
  • 1024-बिट आरएसए पासकोड, क्रिप्टोग्राफ़िक तरीके से सुरक्षित करने के लिए ज़रूरी सुरक्षा नहीं देते.

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

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

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

Chrome 47 से, ईसीएसडीए के लिए ऑप्ट इन किया जा सकता है:

// 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 के इस्तेमाल किए गए RTC सर्टिफ़िकेट को IndexedDB स्टोरेज में सेव और लोड किया जा सकता है. इससे सेशन के बीच नए सर्टिफ़िकेट जनरेट करने की ज़रूरत नहीं पड़ती. उदाहरण के लिए, यह तब काम आ सकता है, जब आपको अब भी आरएसए का इस्तेमाल करना हो और आरएसए जनरेट करने में लगने वाले समय से बचना हो. ईसीएसडीए का इस्तेमाल करने पर, कैश मेमोरी में सेव करने की ज़रूरत नहीं होती, क्योंकि यह हर बार नया सर्टिफ़िकेट जनरेट करने में तेज़ी से काम करता है.

RTCCertificate IndexedDB स्टोरेज, फ़ायरफ़ॉक्स में पहले से ही उपलब्ध है. यह Opera 39 में भी उपलब्ध है.

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