Android Transport Layer, beserta seluruh koneksi antara server, backend FCM, dan perangkat klien Anda, diamankan menggunakan Transport Layer Security (TLS). Hal ini memberikan enkripsi titik ke titik 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 kekurangan enkripsi titik ke titik adalah enkripsi ini tidak diterapkan di seluruh jalur untuk pesan yang hanya dapat dienkode oleh pengirim dan penerimanya. 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 ini harus diterapkan di tingkat yang lebih tinggi, seperti dalam server dan kode aplikasi Anda.
Menambahkan Enkripsi End-to-End 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). Dalam prosesnya, payload pesan akan dienkripsi di server Anda sebelum dikirim ke FCM dan didekripsi dalam aplikasi Anda di perangkat pengguna. Hal ini dapat digunakan 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 end-to-end. Anda bertanggung jawab untuk menerapkan lapisan keamanan ini dalam aplikasi Anda. Terdapat library dan protokol eksternal yang dirancang untuk tujuan ini, seperti Capillary atau DTLS.
Contoh Konseptual
Berikut contoh perubahan data
payload FCM 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 cocok untuk aplikasi, 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 dipindahkan dari aplikasi ke server Anda dan sebaliknya dengan menghindari 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 ketika pengambilan data memerlukan waktu terlalu lama. Misalnya, Anda dapat menampilkan notifikasi umum seperti "Anda memiliki pesan baru", lalu memperbaruinya setelah konten sepenuhnya diambil.