Cara iMessage mengirimkan dan menerima pesan dengan aman
Pengguna memulai percakapan iMessage baru dengan memasukkan alamat atau nama. Jika mereka memasukkan nomor telepon atau alamat email, perangkat akan menghubungi Layanan Identitas (IDS) Apple untuk mengambil kunci publik dan alamat APN untuk semua perangkat yang dikaitkan dengan penerima. Jika pengguna memasukkan nama, perangkat pertama-tama akan menggunakan app Kontak pengguna untuk mengumpulkan nomor telepon dan alamat email yang terkait dengan nama tersebut, lalu mendapatkan kunci publik dan alamat APN dari IDS.
Pesan keluar pengguna dienkripsi secara terpisah untuk setiap perangkat penerima. Kunci enkripsi publik dan kunci penanda tangan dari perangkat penerima diambil dari IDS. Untuk setiap perangkat penerima, perangkat pengirim membuat nilai 88 bit acak dan menggunakannya sebagai kunci HMAC-SHA256 untuk membuat nilai 40 bit yang diturunkan dari kunci publik pengirim dan penerima serta plaintext. Rangkaian nilai 88 bit dan 40 bit menghasilkan kunci 128 bit, yang digunakan untuk mengenkripsi pesan dengan AES dalam Mode Penghitung (CTR). Nilai 40 bit digunakan oleh penerima untuk memverifikasi integritas plaintext yang didekripsi. Kunci AES per pesan ini dienkripsi menggunakan RSA-OAEP ke kunci publik dari perangkat penerima. Kombinasi pesan teks terenkripsi dan kunci pesan terenkripsi kemudian di-hash dengan SHA-1, dan hash ditandatangani dengan Algoritme Tanda Tangan Digital Kurva Eliptis (ECDSA) menggunakan kunci penanda tangan pribadi milik perangkat pengirim. Di iOS 13 atau lebih baru dan iPadOS 13.1 atau lebih baru, perangkat mungkin menggunakan enkripsi Skema Enkripsi Terintegrasi Kurva Eliptis (ECIES) alih-alih enkripsi RSA.
Pesan yang dihasilkan, satu untuk setiap perangkat penerima, berisi teks pesan terenkripsi, kunci pesan terenkripsi, dan tanda tangan digital pengirim. Pesan kemudian diteruskan ke APN untuk dikirim. Metadata, seperti tanda waktu dan informasi rute APN, tidak dienkripsi. Komunikasi dengan APN dienkripsi menggunakan saluran TLS dengan kerahasiaan maju.
APN hanya dapat mengirimkan pesan berukuran hingga 4 atau 16 KB, tergantung versi iOS dan iPadOS. Jika teks pesan terlalu panjang atau jika lampiran seperti foto disertakan, lampiran dienkripsi menggunakan AES dalam mode CTR dengan kunci 256 bit yang dibuat secara acak dan diunggah ke iCloud. Kunci AES untuk lampiran, Pengenal Sumber Seragam (URI), dan hash SHA-1 dari format terenkripsinya kemudian dikirimkan ke penerima sebagai konten iMessage, dengan kerahasiaan dan integritasnya yang terlindungi melalui enkripsi iMessage normal, sebagaimana yang ditampilkan di diagram.
Untuk percakapan grup, proses ini diulangi untuk setiap penerima dan perangkatnya.
Perangkat penerima menerima salinan pesannya dari APN, dan, jika perlu, mengambil lampiran dari iCloud. Nomor telepon atau alamat email masuk milik pengirim dicocokkan dengan kontak penerima sehingga nama dapat ditampilkan, jika memungkinkan.
Sebagaimana halnya dengan semua pemberitahuan push, pesan dihapus dari APN saat dikirimkan. Berbeda dengan pemberitahuan APN lainnya, pesan iMessage diantrekan untuk dikirim ke perangkat offline. Pesan disimpan di server Apple hingga selama 30 hari.