Cómo iMessage envía y recibe mensajes de forma segura
Los usuarios inician una nueva conversación de iMessage al ingresar una dirección o un nombre. Si ingresan 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 ingresa un nombre, el dispositivo utiliza 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 luego obtiene las claves públicas y las direcciones del APNs del IDS.
El mensaje que envía el usuario está encriptado de forma individual para cada uno de los dispositivos del destinatario. Las claves de encriptación públicas y las claves de firma de los dispositivos receptores se obtienen del IDS. Para cada dispositivo receptor, el dispositivo emisor genera un valor aleatorio de 88 bits y lo utiliza como una clave HMAC‑SHA256 para construir un valor de 40 bits derivado de la clave pública del emisor y del receptor y del texto sin formato. La concatenación de los valores de 88 y 40 bits crea una clave de 128 bits, que encripta el mensaje usando AES en el modo contador CTR. El receptor usa 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 versiones posteriores, y iPadOS 13.1 o versiones posteriores, los dispositivos podrían usar un esquema de encriptado integrado de curva elíptica (ECIES) en lugar del encriptado 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‑adelante.
El APNs sólo puede transmitir mensajes de 4 KB o 16 KB como máximo en función de la versión de iOS o de 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. Después, la clave AES para el archivo adjunto, su identificador de recursos uniforme (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 siguiente diagrama.
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 de ser necesario, obtiene 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 cola para enviarlos a los dispositivos sin conexión. Los mensajes se almacenan en los servidores de Apple durante un plazo máximo de 30 días.