使用端對端加密技術保護訊息資料

Android 傳輸層和伺服器、FCM 後端與用戶端裝置之間的整個連線,都會使用傳輸層安全標準 (TLS) 保護安全。這項功能可為所有傳輸中的資料提供強效的端對端加密,防止資料在網路上遭到攔截。這個強大的安全模型適用於絕大多數應用程式。 詳情請參閱 FCM 架構說明文件。

點對點加密的限制之一是,郵件並非在整個路徑中都經過加密,只有傳送者和接收者可以解碼郵件。因此,FCM 建議對即時通訊訊息或驗證交易等隱私權敏感通訊內容,使用端對端加密技術。如要充分發揮端對端加密的效益,必須在較高的層級 (例如伺服器和應用程式程式碼中) 實作這項功能。

為機密資料新增端對端加密功能

如果應用程式處理的資料特別私密,例如私人訊息或個人憑證,您可以透過端對端加密 (E2EE) 多添一層防護。這個程序包括在伺服器上加密訊息酬載,然後傳送至 FCM,並在使用者裝置上的應用程式中解密。這項功能適用於 FCM 資料訊息,因為標準通知酬載是由作業系統處理,且在顯示前無法由應用程式解密。

請注意,FCM 並未提供端對端加密的內建解決方案。您有責任在應用程式中實作這個安全層。有專為此目的設計的外部程式庫和通訊協定,例如 CapillaryDTLS

概念範例

以下說明使用 E2EE 時,FCM data 酬載的變化。

加密前 (標準酬載):

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

加密後 (E2EE 酬載):

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

如果已正確導入端對端加密功能,只有用戶端應用程式可以解密加密的酬載,顯示原始訊息。

替代方法:直接從伺服器擷取內容

如果端對端加密不適合您的應用程式,可以改為傳送空白資料訊息。這些訊息會做為信號,讓應用程式直接從伺服器擷取內容。也就是說,敏感資料只會在應用程式和伺服器之間傳輸,資料傳輸時會略過 FCM

這種方法的缺點是,應用程式連線至伺服器以擷取資料時,可能會造成延遲。應用程式收到資料訊息時,通常只有幾秒鐘的時間可以顯示通知,之後就會進入背景。從伺服器擷取資料可能無法在這個時間範圍內完成。這項資料擷取作業能否成功,取決於使用者的裝置連線等因素。

因此,如果資料擷取時間可能過長,請考慮改用其他使用者體驗。舉例來說,您可以先顯示「您有新訊息」這類一般通知,然後在擷取完整內容後更新通知。