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

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

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

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

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

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

כדי לפתור את הבעיה של עוצמת המפתח אפשר לעבור למפתחות RSA של 2,048 ביט או יותר, אבל הגדרת השיחה תידחה בכמה שניות נוספות. במקום לשנות את הגודל של מפתח ה-RSA, ב-Chrome 52 נעשה הטמעה של מפתחות ECDSA (Elliptic Curve Digital Signature Algorithm) לשימוש באישורים. מפתחות RSA חזקים כמו מפתחות 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).

אחסון אישור RTC ב-IndexedDB

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

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

למידע נוסף