
Процесс безопасной отправки и получения сообщений в iMessage
Чтобы начать новый разговор iMessage, пользователь вводит адрес или имя собеседника. Если пользователь вводит номер телефона или адрес электронной почты, устройство связывается со службой идентификации Apple (IDS) для получения открытых ключей и APNs-адресов для всех устройств, связанных с адресатом. Если пользователь вводит имя, устройство извлекает из приложения «Контакты» номера телефонов и адреса электронной почты, связанные с введенным именем, а затем получает открытые ключи и APNs-адреса из IDS.
Исходящие сообщения пользователя шифруются отдельно для каждого из устройств получателя. Открытые ключи шифрования и ключи подписания принимающих устройств извлекаются из IDS. Для каждого принимающего устройства отправляющее устройство генерирует случайное 88-битное значение и использует его в качестве ключа HMAC-SHA256 для создания 40-битного значения на основе открытых ключей отправителя и получателя, а также простого текста. Сцепление 88-битного и 40-битного значений дает 128-битный ключ, который используется для шифрования сообщения с применением алгоритма AES в режиме счетчика (CTR). 40-битное значение используется на стороне получателя для проверки целостности дешифрованного простого текста. Этот ключ AES отдельного сообщения шифруется по схеме RSA-OAEP с использованием открытого ключа принимающего устройства. Сочетание зашифрованного текста сообщения и зашифрованного ключа сообщения хешируется с использованием SHA‑1, затем хеш подписывается по алгоритму цифровой подписи на основе эллиптической кривой (ECDSA) с использованием личного ключа подписания передающего устройства. В iOS 13 или новее и iPadOS 13.1 или новее устройства могут использовать шифрование ECIES (интегрированная схема шифрования на эллиптических кривых) вместо шифрования RSA.
Результатом являются сообщения — по одному для каждого принимающего устройства — которые состоят из зашифрованного текста сообщения, зашифрованного ключа сообщения и цифровой подписи отправителя. Затем они передаются в APNs для доставки адресатам. Шифрование метаданных, таких как метка времени и информация о маршрутизации APNs, не выполняется. Связь с APNs шифруется с использованием канала TLS с прямой секретностью.
APNs может ретранслировать сообщения размером до 4 или 16 КБ в зависимости от версии iOS или iPadOS. Если текст сообщения слишком длинный либо к сообщению приложена фотография или другой большой объект, вложение шифруется по алгоритму AES в режиме CTR с использованием случайного 256-битного ключа и выгружается в iCloud. Затем в виде содержимого iMessage получателю пересылается ключ AES для вложения, его универсальный идентификатор ресурса (URI) и хеш SHA‑1 для зашифрованной формы. За защиту их конфиденциальности и целостности отвечает стандартный процесс шифрования iMessage, который показан на рисунке ниже.

При отправке групповых сообщений эта процедура повторяется для каждого получателя и его устройств.
На принимающей стороне каждое устройство получает свою копию сообщения из APNs и, при необходимости, извлекает вложение из iCloud. Входящий номер телефона или адрес электронной почты отправителя сравнивается со списком контактов получателя, чтобы по возможности отобразить имя отправителя.
Как и все push-уведомления, сообщения удаляются из APNs после доставки. В отличие от других уведомлений APNs, если устройство отключено, сообщения iMessage ставятся в очередь для последующей отправки. Сообщения могут храниться на серверах Apple в течение 30 дней.