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

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

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

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

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

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

概念範例

使用 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 傳輸。

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

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