Bảo mật dữ liệu tin nhắn bằng phương thức mã hoá hai đầu

Tầng truyền tải Android cùng với toàn bộ kết nối giữa máy chủ, phần phụ trợ FCM và thiết bị của ứng dụng được bảo mật bằng Bảo mật tầng truyền tải (TLS). Điều này giúp cung cấp mã hoá điểm-điểm mạnh mẽ cho tất cả dữ liệu trong khi truyền tải, bảo vệ dữ liệu khỏi bị chặn trên mạng. Mô hình bảo mật mạnh mẽ này phù hợp với phần lớn các ứng dụng. Bạn có thể tìm thêm thông tin chi tiết trong tài liệu về Kiến trúc FCM.

Một trong những hạn chế của mã hoá điểm-điểm là dữ liệu không được mã hoá cho toàn bộ đường dẫn, trong đó chỉ người gửi và người nhận mới có thể giải mã thông báo. Đây là lý do FCM khuyên bạn nên sử dụng phương thức mã hoá hai đầu cho các thông tin liên lạc nhạy cảm về quyền riêng tư như tin nhắn trò chuyện hoặc giao dịch xác thực. Để tận dụng tối đa phương thức mã hoá hai đầu, bạn phải triển khai phương thức này ở cấp cao hơn, chẳng hạn như trong máy chủ và mã ứng dụng.

Thêm phương thức mã hoá hai đầu cho dữ liệu nhạy cảm

Đối với các ứng dụng xử lý dữ liệu đặc biệt nhạy cảm, chẳng hạn như tin nhắn riêng tư hoặc thông tin xác thực cá nhân, bạn có thể thêm một lớp bảo vệ bổ sung bằng phương thức mã hoá hai đầu (E2EE). Quá trình này bao gồm việc mã hoá tải trọng thông báo trên máy chủ trước khi gửi đến FCM và giải mã trong ứng dụng trên thiết bị của người dùng. Phương thức này hoạt động với FCM thông báo dữ liệu, vì tải trọng thông báo tiêu chuẩn do hệ điều hành xử lý và ứng dụng không thể giải mã trước khi hiển thị.

Xin lưu ý rằng FCM không cung cấp giải pháp tích hợp sẵn cho phương thức mã hoá hai đầu. Bạn chịu trách nhiệm triển khai lớp bảo mật này trong ứng dụng. Có các thư viện và giao thức bên ngoài được thiết kế cho mục đích này, chẳng hạn như Capillary hoặc DTLS.

Ví dụ về khái niệm

Sau đây là cách tải trọng FCM data thay đổi khi sử dụng E2EE.

Trước khi mã hoá (Tải trọng tiêu chuẩn):

    {
      "token": "DEVICE_REGISTRATION_TOKEN",
      "data": {
        "sender": "user123",
        "message_body": "Your 2FA code is 555-123",
        "timestamp": "1661299200"
      }
    }

Sau khi mã hoá (Tải trọng E2EE):

  {
    "token": "DEVICE_REGISTRATION_TOKEN",
    "data": {
      "encrypted_payload": "aG9va2Vk...so much encrypted gibberish...ZW5jcnlwdA=="
    }
  }

Nếu bạn đã triển khai phương thức mã hoá hai đầu đúng cách, thì ứng dụng khách là bên duy nhất có khả năng giải mã tải trọng đã mã hoá để tiết lộ thông báo gốc.

Giải pháp thay thế: Tìm nạp nội dung trực tiếp từ máy chủ

Nếu phương thức mã hoá hai đầu không phù hợp với ứng dụng, bạn có thể gửi thông báo dữ liệu trống. Các thông báo này hoạt động như một tín hiệu để ứng dụng tìm nạp nội dung trực tiếp từ máy chủ. Điều này có nghĩa là dữ liệu nhạy cảm chỉ được truyền giữa ứng dụng và máy chủ, bỏ qua FCM để truyền dữ liệu.

Nhược điểm của phương thức này là có thể xảy ra tình trạng chậm trễ do ứng dụng kết nối với máy chủ để truy xuất dữ liệu. Khi nhận được thông báo dữ liệu, ứng dụng thường chỉ có vài giây để hiển thị thông báo trước khi chuyển sang chạy ở chế độ nền. Việc tìm nạp dữ liệu từ máy chủ có thể không hoàn tất trong khoảng thời gian này. Việc tìm nạp dữ liệu thành công hay không phụ thuộc vào các yếu tố như khả năng kết nối của thiết bị người dùng.

Do đó, hãy cân nhắc các giải pháp thay thế về trải nghiệm người dùng cho những trường hợp tìm nạp dữ liệu có thể mất quá nhiều thời gian. Ví dụ: bạn có thể hiển thị một thông báo chung như "Bạn có một tin nhắn mới", sau đó cập nhật thông báo này sau khi truy xuất nội dung đầy đủ.