ECDSA cho WebRTC – Bảo mật tốt hơn, quyền riêng tư tốt hơn và hiệu suất tốt hơn

Từ Chrome 52, WebRTC sử dụng một thuật toán hiệu quả và an toàn hơn nhiều để tạo chứng chỉ (RTCcertificate): ECDSA. Ngoài ra, RTCPayments hiện có thể được lưu trữ bằng IndexedDB.

RTCChứng chỉ là các chứng chỉ tự ký dùng trong cơ chế bắt tay DTLS khi thiết lập kết nối ngang hàng WebRTC. (DTLS là quá trình triển khai TLS giao thức mã hoá cho các giao thức gói dữ liệu, chẳng hạn như UDP mà WebRTC sử dụng).

Cho đến gần đây, WebRTC sử dụng khoá RSA-1024 cho chứng chỉ. Có một số nhược điểm với các khoá này:

  • Việc tạo các khoá RSA-1024 có thể tăng thêm khoảng 1000 mili giây trong thời gian thiết lập cuộc gọi.
  • Khoá RSA 1024 bit không cung cấp đủ độ mạnh mã hoá.

Vì quá trình tạo chứng chỉ bằng RSA-1024 chậm nên một số ứng dụng di động đã tìm cách chuẩn bị trước chứng chỉ hoặc sử dụng lại chứng chỉ đó.

Bạn có thể giải quyết vấn đề về độ mạnh của khoá bằng cách sử dụng khoá RSA 2048 bit trở lên, nhưng việc đó sẽ trì hoãn quá trình thiết lập cuộc gọi thêm vài giây. Thay vì thay đổi kích thước khoá RSA, Chrome 52 triển khai khoá ECDSA (Thuật toán chữ ký số Elliptic Curve) để sử dụng trong chứng chỉ. Các khoá này mạnh tương đương với khoá RSA 3072 bit, nhưng nhanh hơn vài nghìn lần: mức hao tổn thiết lập cuộc gọi bằng ECDSA chỉ trong vài mili giây.

Nhìn chung, khoá ECDSA giúp tăng khả năng bảo mật, quyền riêng tư và hiệu suất, đặc biệt là trên thiết bị di động. Vì những lý do này, bạn bắt buộc phải sử dụng ECDSA trong bản nháp Kiến trúc bảo mật WebRTC.

Trên Chrome 47, bạn có thể chọn sử dụng ECDSA:

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

Trên Chrome 52, mặc dù ECDSA được bật theo mặc định, bạn vẫn có thể chọn tạo chứng chỉ RSA:

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

(Xem bản nháp W3C để biết thêm thông tin về generateCertificate().)

Lưu trữ RTCChứng chỉ trong IndexedDB

Một cải tiến khác trong Chrome 52: RTCChứng chỉ được sử dụng bởi WebRTC có thể được lưu và tải từ bộ nhớ IndexedDB, tránh phải tạo chứng chỉ mới giữa các phiên. Điều này có thể hữu ích trong những trường hợp bạn vẫn cần sử dụng RSA và muốn tránh hao tổn tạo RSA. Với ECDSA, bạn không cần lưu vào bộ nhớ đệm vì tốc độ này đủ nhanh để tạo chứng chỉ mới mỗi lần lưu vào bộ nhớ đệm.

Bộ nhớ RTCcertificate IndexedDB đã được chuyển trong Firefox và trong Opera 39.

Tìm hiểu thêm