ตั้งแต่ Chrome 52 เป็นต้นไป WebRTC จะใช้อัลกอริทึม ECDSA ที่มีประสิทธิภาพและปลอดภัยกว่ามากในการสร้างใบรับรอง (RTCCertificate) นอกจากนี้ ตอนนี้คุณยังจัดเก็บ RTCCertificates กับ IndexedDB ได้ด้วย
RTCCertificates คือใบรับรองแบบ Self-signed ที่ใช้ในแฮนด์เชค DTLS เมื่อตั้งค่าการเชื่อมต่อแบบ Peer ของ WebRTC (DTLS คือการใช้งานโปรโตคอลการเข้ารหัสลับ TLS สำหรับโปรโตคอล Datagram เช่น UDP ซึ่ง WebRTC ใช้)
เมื่อไม่นานมานี้ WebRTC ใช้คีย์ RSA-1024 สำหรับใบรับรอง การใช้คีย์เหล่านี้มีข้อเสียหลายประการดังนี้
- การสร้างคีย์ RSA-1024 อาจเพิ่มเวลาในการตั้งค่าการโทรได้สูงสุดประมาณ 1,000 มิลลิวินาที
- คีย์ RSA 1024 บิตไม่มีความปลอดภัยในการเข้ารหัสที่เพียงพอ
เนื่องจากการสร้างใบรับรองด้วย RSA-1024 นั้นช้า แอปบนอุปกรณ์เคลื่อนที่บางแอปจึงต้องเตรียมใบรับรองล่วงหน้าหรือนำใบรับรองมาใช้ซ้ำ
ปัญหาเกี่ยวกับความแข็งแรงของคีย์จะแก้ไขได้โดยใช้คีย์ RSA 2048 บิตขึ้นไป แต่วิธีนี้จะทำให้การตั้งค่าการโทรล่าช้าออกไปอีก 2-3 วินาที Chrome 52 จะใช้คีย์ ECDSA (อัลกอริทึมลายเซ็นดิจิทัลแบบรูปไข่) ในใบรับรองแทนที่จะเปลี่ยนขนาดคีย์ RSA ซึ่งมีความแข็งแกร่งเท่ากับคีย์ RSA 3072 บิต แต่เร็วกว่าหลายพันเท่า เนื่องจากเวลาในการตั้งค่าการโทรด้วย ECDSA ใช้เวลาเพียงไม่กี่มิลลิวินาที
สรุปแล้ว คีย์ ECDSA หมายถึงความปลอดภัยที่ดีขึ้น ความเป็นส่วนตัวที่ดีขึ้น และประสิทธิภาพที่ดีขึ้น โดยเฉพาะบนอุปกรณ์เคลื่อนที่ ด้วยเหตุนี้ ECDSA จึงได้รับคำสั่งให้ใช้ในร่างสถาปัตยกรรมความปลอดภัยของ WebRTC
คุณเลือกใช้ ECDSA ได้จาก Chrome 47 เป็นต้นไป โดยทำดังนี้
// 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: RTCCertificates ที่ WebRTC ใช้สามารถบันทึกและโหลดจากพื้นที่เก็บข้อมูล IndexedDB ได้ จึงไม่จำเป็นต้องสร้างใบรับรองใหม่ระหว่างเซสชัน ซึ่งอาจเป็นประโยชน์ เช่น หากยังคงต้องใช้ RSA และต้องหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติมในการสร้าง RSA เมื่อใช้ ECDSA คุณไม่จำเป็นต้องแคชเนื่องจาก ECDSA สามารถสร้างใบรับรองใหม่ได้อย่างรวดเร็วทุกครั้ง
พื้นที่เก็บข้อมูล IndexedDB ของ RTCCertificate มีให้บริการใน Firefox และ Opera 39 แล้ว