ميزة ECDSA لـ WebRTC - مستوى أمان أفضل وخصوصية أفضل وأداء أفضل

اعتبارًا من الإصدار 52 من Chrome، يستخدم WebRTC خوارزمية أكثر فعالية وأمانًا لإنشاء الشهادة (RTCCertificate): ECDSA. بالإضافة إلى ذلك، يمكن الآن تخزين RTCCertificates باستخدام IndexedDB.

RTCCertificates هي الشهادات الموقَّعة ذاتيًا المستخدَمة في عملية مصافحة DTLS عند إعداد اتصال بين نظيري WebRTC. (بروتوكول أمان طبقة النقل لمخطّطات البيانات هو تطبيق لبروتوكول التشفير TLS لبروتوكولات مخطّطات البيانات، مثل UDP، الذي يستخدمه WebRTC).

حتى وقت قريب، كان WebRTC يستخدم مفاتيح RSA-1024 للشهادات. هناك عدة عيوب لهذه المفاتيح:

  • يمكن أن يؤدي إنشاء مفاتيح RSA-1024 إلى زيادة وقت إعداد المكالمة بمقدار 1000 ملي ثانية تقريبًا.
  • لا توفّر مفاتيح RSA بسعة 1024 بت قوة تشفير كافية.

وبما أنّ إنشاء الشهادات باستخدام RSA-1024 بطيء، لجأت بعض تطبيقات الأجهزة الجوّالة إلى إعداد الشهادات مسبقًا أو إعادة استخدامها.

يمكن حلّ مشكلة قوة المفتاح من خلال استخدام مفاتيح RSA بحجم 2048 بت أو أكثر، ولكن سيؤدي ذلك إلى تأخير إعداد المكالمة لعدة ثوانٍ إضافية. بدلاً من تغيير حجم مفتاح RSA، ينفِّذ الإصدار 52 من Chrome مفاتيح ECDSA (خوارزمية التوقيع الرقمي للمنحنى الإهليجي) لاستخدامها في الشهادات. وهذه المفاتيح بنفس قوة مفاتيح RSA التي يبلغ طولها 3072 بت، ولكنها أسرع بعدة آلاف المرات: تبلغ تكلفة إعداد المكالمة باستخدام ECDSA بضع مللي ثوانٍ فقط.

بوجهٍ عام، توفّر مفاتيح ECDSA أمانًا أفضل وخصوصية أفضل وأداءً أفضل، خاصةً على الأجهزة الجوّالة. لهذه الأسباب، تم فرض استخدام ECDSA في مسودة بنية أمان WebRTC.

من الإصدار 47 من Chrome، يمكنك تفعيل ECDSA:

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

اعتبارًا من الإصدار 52 من Chrome، على الرغم من تفعيل ECDSA تلقائيًا، لا يزال بإمكانك اختيار إنشاء شهادات RSA:

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

(اطّلِع على مسودة W3C للحصول على مزيد من المعلومات عن generateCertificate()).

تخزين RTCCertificate في IndexedDB

تحسين آخر في الإصدار 52 من Chrome: يمكن حفظ RTCCertificates المستخدَمة من WebRTC وتحميلها من مساحة تخزين IndexedDB، ما يتجنّب الحاجة إلى إنشاء شهادات جديدة بين الجلسات. يمكن أن يكون ذلك مفيدًا، على سبيل المثال، إذا كنت لا تزال بحاجة إلى استخدام الإعلانات المتجاوبة على شبكة البحث وتريد تجنُّب الوقت الإضافي الذي يستغرقه إنشاء الإعلانات المتجاوبة على شبكة البحث. باستخدام ECDSA، لا يكون التخزين المؤقت ضروريًا لأنّه سريع بما يكفي لإنشاء شهادة جديدة في كل مرة.

سبق أن تم طرح ميزة تخزين RTCCertificate IndexedDB في Firefox، وهي متوفّرة في الإصدار 39 من Opera.

التعرف على المزيد