ตั้งแต่ 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 แล้ว