ECDSA สำหรับ WebRTC - การรักษาความปลอดภัยที่ดียิ่งขึ้น ความเป็นส่วนตัวที่ดีขึ้น และประสิทธิภาพที่ดีขึ้น

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

ดูข้อมูลเพิ่มเติม