How WhatsApp enables multi-device capability
Bài tóm tắt WhatsApp 2021 4. Điều chỉnh Độ khó: Khó
WhatsApp · 2021 · 4. Điều chỉnh · Độ khó: Khó — bài gốc
Bối cảnh
- Trước 2021, WhatsApp Web, macOS, Windows, Portal chỉ là gương của điện thoại: điện thoại là nguồn sự thật cho mọi dữ liệu và là thiết bị duy nhất mã hoá tin gửi người khác hay bắt đầu cuộc gọi; thiết bị phụ giữ kết nối bảo mật tới điện thoại rồi hiển thị lại.
- Cách này dễ đồng bộ và an toàn, nhưng kém tin cậy: thiết bị phụ chậm và hay mất kết nối khi điện thoại mạng yếu, sắp hết pin hay bị hệ điều hành tắt app; chỉ dùng được một thiết bị phụ cùng lúc.
Thay đổi chính
- Điện thoại cộng tối đa 4 thiết bị khác, chạy độc lập kể cả khi điện thoại hết pin. Thử thách: giữ mã hoá đầu cuối mà không lưu tin nhắn riêng trên server theo cách mới.
- Mỗi thiết bị một identity key (trước là một key cho mỗi người). Server giữ ánh xạ account → danh sách identity của các thiết bị; người gửi lấy danh sách key đó từ server.
- Chống server thêm thiết bị lén: security code nay đại diện cho tổ hợp mọi thiết bị của một người; Automatic Device Verification cho các thiết bị tự tin nhau, nên chỉ phải so security code khi người kia đăng ký lại cả account chứ không phải mỗi lần thêm thiết bị; liên kết thiết bị bằng QR, cần sinh trắc học nếu đã bật; xem và đăng xuất từ xa các thiết bị đã liên kết.
- Client fan-out: chat 1:1 có phiên mã hoá theo từng cặp thiết bị; client gửi mã hoá và truyền tin N lần cho N thiết bị (của cả người gửi và người nhận). Server không lưu tin sau khi giao. Group vẫn dùng Sender Key của Signal Protocol.
- Cuộc gọi: người gọi sinh một SRTP master secret 32 byte riêng cho từng thiết bị của người nhận, gửi kèm tin báo cuộc gọi qua client fan-out; thiết bị nào nhận cuộc gọi thì dùng secret của thiết bị đó. Gọi nhóm: server chọn ngẫu nhiên một thiết bị trong cuộc gọi sinh secret và gửi qua kênh mã hoá cặp; đổi khoá khi có người vào hay ra.
- Đồng bộ lịch sử: khi liên kết thiết bị mới, điện thoại mã hoá một gói tin từ các chat gần đây và gửi qua; khoá của gói đi bằng tin mã hoá đầu cuối, xoá khi đã giải nén. Sau đó thiết bị phụ đọc từ DB cục bộ của nó.
- Đồng bộ trạng thái app (tên liên hệ, chat lưu trữ, tin gắn sao): server lưu một bản cho mọi thiết bị đọc, nhưng cả dữ liệu lẫn metadata (loại dữ liệu nào) đều mã hoá đầu cuối bằng khoá thay đổi liên tục mà chỉ các thiết bị của người đó biết.
- Rollout: beta giới hạn, user có thể tham gia và rút ra.
Vì sao
- Theo WhatsApp: người dùng đòi trải nghiệm nhiều thiết bị thật nhiều năm; kiến trúc "điện thoại là nguồn sự thật" là giới hạn độ tin cậy của mọi thiết bị phụ.
Bài học cho SWE
- Khi server không được đọc dữ liệu, fan-out phải dời về client (mã hoá N lần), và chi phí đó tăng theo số thiết bị chứ không theo số người.
- Thêm danh tính (thiết bị) mở ra đường tấn công mới (server thêm thiết bị lén), nên phải có cơ chế kiểm chứng đi kèm.
- Server vẫn có thể làm kho đồng bộ cho dữ liệu nó không đọc được, kể cả metadata.
Liên quan
Mã hoá đầu cuối và hệ thống mà server không được đọcRealtime và fan-outXác thực và phân quyền (authn/authz)
#Multi-device#Identity key per device#Client fan-out#Sender Key#SRTP#Automatic Device Verification#Encrypted app state sync#Message history transfer#Phone as source of truth
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (1)