ECDSA ל-WebRTC – אבטחה טובה יותר, פרטיות טובה יותר וביצועים טובים יותר

החל מגרסה 52 של Chrome, WebRTC משתמש באלגוריתם יעיל ומאובטח הרבה יותר ליצירת אישורים (RTCCertificate): ECDSA. בנוסף, עכשיו אפשר לשמור RTCCertificates באמצעות IndexedDB.

RTCCertificates הם אישורים בחתימה עצמית שמשמשים ללחיצה היד של DTLS כשמגדירים חיבור בין שווים ב-WebRTC. (DTLS הוא הטמעה של הפרוטוקול הקריפטוגרפי TLS לפרוטוקולים של חבילות נתונים (datagram), כמו UDP, שבהם משתמש WebRTC).

עד לאחרונה, WebRTC השתמש במפתחות RSA-1024 לאישורים. למפתחות האלה יש כמה חסרונות:

  • יצירת מפתחות RSA-1024 יכולה להגדיל את זמן ההגדרה של השיחה ב-1,000 אלפיות השנייה.
  • מפתחות RSA באורך 1,024 ביט לא מספקים חוזק קריפטוגרפיה מספיק.

יצירת אישורים באמצעות RSA-1024 היא תהליך איטי, ולכן חלק מהאפליקציות לנייד נאלצו להכין אישורים מראש או לעשות בהם שימוש חוזר.

אפשר לפתור את הבעיה של חוזק המפתח על ידי מעבר למפתחות RSA של 2048 ביט או יותר, אבל זה יעכב את הגדרת השיחה בכמה שניות נוספות. במקום לשנות את גודל מפתח ה-RSA, ב-Chrome 52 מוטמעים מפתחות ECDSA (אלגוריתם חתימה דיגיטלית של עקומה אליפטית) לשימוש באישורים. הם חזקים כמו מפתחות RSA של 3072 ביט, אבל מהירים פי כמה אלפים: זמן האחזור להגדרת שיחה באמצעות ECDSA הוא רק כמה אלפיות השנייה.

בסיכום, מפתחות ECDSA מספקים אבטחה טובה יותר, פרטיות טובה יותר וביצועים טובים יותר – במיוחד בנייד. לכן, ECDSA נדרש בטיוטת ארכיטקטורת האבטחה של WebRTC.

החל מ-Chrome 47 אפשר להביע הסכמה ל-ECDSA:

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

החל מ-Chrome 52, ECDSA מופעל כברירת מחדל, אבל עדיין אפשר ליצור אישורי RSA:

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

(מידע נוסף על generateCertificate() זמין בטיוטה של W3C).

אחסון RTCCertificate ב-IndexedDB

שיפור נוסף ב-Chrome 52: אפשר לשמור את אישורי ה-RTC שבהם משתמש WebRTC ולטעון אותם מאחסון IndexedDB, וכך למנוע את הצורך ליצור אישורים חדשים בין סשנים. האפשרות הזו יכולה להיות שימושית, למשל, אם אתם עדיין צריכים להשתמש במודעות RSA ואתם רוצים להימנע מהעלויות הנוספות של יצירת מודעות RSA. ב-ECDSA אין צורך בשמירת נתונים במטמון, כי המערכת מספיק מהירה כדי ליצור אישור חדש בכל פעם.

האחסון של RTCCertificate ב-IndexedDB כבר הושק ב-Firefox והוא נמצא ב-Opera 39.

למידע נוסף