Mengamankan Data Pesan Anda dengan Enkripsi End-to-End

Android Transport Layer, beserta seluruh koneksi antara server, backend FCM, dan perangkat klien Anda, diamankan menggunakan Transport Layer Security (TLS). Hal ini memberikan enkripsi point-to-point yang kuat untuk semua data saat dalam pengiriman, sehingga melindungi data dari penyadapan di jaringan. Model keamanan yang kuat ini cocok untuk sebagian besar aplikasi. Anda dapat menemukan detail selengkapnya di dokumentasi Arsitektur FCM.

Salah satu batasan enkripsi point-to-point adalah bahwa enkripsi ini tidak dienkripsi di seluruh jalur di mana hanya pengirim dan penerima yang dapat mendekode pesan. Itulah sebabnya FCM merekomendasikan penggunaan enkripsi end-to-end untuk komunikasi yang sensitif terhadap privasi seperti pesan chat atau transaksi autentikasi. Untuk mendapatkan hasil maksimal dari enkripsi end-to-end, enkripsi harus diterapkan di tingkat yang lebih tinggi, seperti dalam server dan kode aplikasi Anda.

Menambahkan Enkripsi Menyeluruh untuk Data Sensitif

Untuk aplikasi yang menangani data yang sangat sensitif, seperti pesan pribadi atau kredensial pribadi, Anda dapat menambahkan lapisan perlindungan tambahan dengan enkripsi end-to-end (E2EE). Proses ini melibatkan enkripsi payload pesan di server Anda sebelum mengirimkannya ke FCM dan mendekripsinya dalam aplikasi Anda di perangkat pengguna. Hal ini berfungsi dengan pesan data FCM, karena payload notifikasi standar ditangani oleh sistem operasi dan tidak dapat didekripsi oleh aplikasi Anda sebelum ditampilkan.

Perhatikan bahwa FCM tidak menyediakan solusi bawaan untuk enkripsi menyeluruh. Anda bertanggung jawab untuk menerapkan lapisan keamanan ini dalam aplikasi Anda. Ada library dan protokol eksternal yang dirancang untuk tujuan ini, seperti Capillary atau DTLS.

Contoh Konseptual

Berikut cara perubahan payload FCM data saat menggunakan E2EE.

Sebelum Enkripsi (Payload Standar):

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

Setelah Enkripsi (Payload E2EE):

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

Jika Anda telah menerapkan enkripsi e2e dengan benar, aplikasi klien adalah satu-satunya pihak yang dapat mendekripsi payload terenkripsi untuk menampilkan pesan aslinya.

Alternatif: Mengambil Konten Langsung dari Server Anda

Jika enkripsi end-to-end tidak sesuai untuk aplikasi Anda, Anda dapat mengirim pesan data kosong sebagai gantinya. Pesan ini bertindak sebagai sinyal bagi aplikasi untuk mengambil konten langsung dari server Anda. Artinya, data sensitif hanya ditransfer antara aplikasi dan server Anda, dengan melewati FCM untuk transfer data.

Kelemahan metode ini adalah potensi penundaan yang disebabkan oleh aplikasi yang terhubung ke server Anda untuk mengambil data. Saat menerima pesan data, aplikasi biasanya hanya memiliki waktu beberapa detik untuk menampilkan notifikasi sebelum dipindahkan ke latar belakang. Pengambilan data dari server Anda mungkin tidak selesai dalam jangka waktu ini. Keberhasilan pengambilan data ini bergantung pada faktor-faktor seperti konektivitas perangkat pengguna.

Oleh karena itu, pertimbangkan alternatif pengalaman pengguna untuk situasi saat pengambilan data mungkin memerlukan waktu terlalu lama. Misalnya, Anda dapat menampilkan notifikasi umum seperti "Anda memiliki pesan baru", lalu memperbaruinya setelah konten lengkap diambil.