Cómo iMessage envía y recibe mensajes de forma segura
Los usuarios inician una nueva conversación de iMessage al introducir una dirección o un nombre. Si introducen un número de teléfono o una dirección de correo electrónico, el dispositivo se pone en contacto con el servicio de identidad (IDS) de Apple para recuperar las claves públicas y las direcciones del APNs de todos los dispositivos asociados al destinatario. Si el usuario introduce un nombre, el dispositivo usa primero la app Contactos del usuario para recopilar los números de teléfono y las direcciones de correo electrónico asociadas a ese nombre y, a continuación, obtiene las claves públicas y las direcciones del APNs del IDS de Apple.
El mensaje que envía el usuario se encripta de forma individual para cada uno de los dispositivos del destinatario. Las claves de encriptación públicas y las clases de firmas de los dispositivos receptores se obtienen del IDS. El dispositivo desde el que se envían los mensajes genera un valor aleatorio de 88 bits para cada dispositivo de destino y lo utiliza como clave HMAC‑SHA256 para crear un valor de 40 bits derivado de la clave pública del emisor y receptor y del texto sin formato. La concatenación de los valores de 88 bits y de 40 bits constituye una clave de 128 bits, que encripta el mensaje utilizando el estándar AES en modo de contador (CTR). El dispositivo que recibe el mensaje utiliza el valor de 40 bits para verificar la integridad del texto sin formato desencriptado. Esta clave AES por mensaje se encripta con RSA‑OAEP para la clave pública del dispositivo receptor. Con el texto del mensaje encriptado y la clave del mensaje encriptada se genera un hash SHA-1, que se firma con el algoritmo de firma digital de curva elíptica (ECDSA) utilizando la clave de firma privada del dispositivo emisor. En iOS 13 o posterior y iPadOS 13.1 o posterior, los dispositivos pueden usar una encriptación de esquema de encriptación integrado de curva elíptica (ECIES), en lugar de una encriptación RSA.
Los mensajes que se obtienen, uno para cada dispositivo receptor, están constituidos por el texto del mensaje encriptado, la clave del mensaje encriptada y la firma digital del emisor. A continuación, se mandan al APNs para que los envíe. Los metadatos, como la fecha y la información sobre el enrutamiento del APNs no se encriptan. La comunicación con el APNs se encripta utilizando un canal TLS de secreto‑hacia‑delante.
El APNs solo puede transmitir mensajes de 4 o 16 kB como máximo en función de la versión de iOS o iPadOS. Si el texto del mensaje es demasiado largo o si se incluye un archivo adjunto (por ejemplo, una foto), el archivo adjunto se encripta con AES en modo CTR utilizando una clave de 256 bits generada aleatoriamente y se carga a iCloud. A continuación, la clave AES para el archivo adjunto, su identificador uniforme de recursos (URI) y un hash SHA‑1 de su forma encriptada se envían al destinatario como el contenido de un mensaje de iMessage, cuya confidencialidad e integridad están protegidas mediante la encriptación normal de iMessage, como se muestra en el diagrama siguiente.
En el caso de las conversaciones de grupo, este proceso se repite para cada destinatario y sus dispositivos.
En cuanto a la recepción, cada dispositivo recibe una copia del mensaje desde el APNs y, en caso necesario, recupera el archivo adjunto de iCloud. El número de teléfono o la dirección de correo electrónico del emisor del mensaje se cotejan con los contactos del receptor para que, cuando sea posible, se muestre el nombre.
Como sucede con todas las notificaciones push, el mensaje se elimina del APNs una vez enviado. Sin embargo, a diferencia de lo que sucede con otras notificaciones del APNs, los mensajes de iMessage se ponen en la cola para enviarlos a los dispositivos sin conexión. Los mensajes se almacenan en servidores de Apple durante un plazo máximo de 30 días.