Compartir nombre y foto de forma segura en iMessage
Con la opción Comparte tu nombre y foto en iMessage, los usuarios pueden compartir nombres y fotos al utilizar iMessage. El usuario puede seleccionar la información de su tarjeta de contacto, o puede personalizar el nombre e incluir la imagen que quiera. Esta función de iMessage utiliza un sistema de dos etapas para distribuir el nombre y la foto.
Los datos se subdividen en campos, cada uno encriptado y autenticado por separado, así como autenticados juntos mediante el siguiente proceso. Hay tres campos:
Nombre
Foto
Nombre del archivo de la foto
Uno de los primeros pasos de la creación de datos es generar de forma aleatoria una clave de 128 bits para el registro en el dispositivo. Esta clave de registro luego se deriva con HKDF-HMAC-SHA256 para crear las siguientes subclaves: Clave 1:Clave 2:Clave 3 = HKDF(clave del registro, “apodos”). Para cada campo, se genera un vector de inicialización (IV) aleatorio de 96 bits y los datos se encriptan usando AES-CTR y Clave 1. Luego se computa un código de autenticación de mensaje (MAC) con HMAC-SHA256 usando Clave 2 y que abarca el nombre del campo, el IV del campo y el texto encriptado del campo. Finalmente, el conjunto de valores individuales MAC del campo se concatenan y su MAC se computa con HMAC-SHA256 usando Clave 3. El MAC de 256 bits se almacena junto con los datos encriptados. Los primeros 128 bits de este MAC se usan como recordID.
El registro encriptado luego se almacena en la base de datos pública de CloudKit bajo el recordID. El registro nunca muta, y cuando el usuario decide cambiar su nombre y foto, se genera un nuevo registro encriptado. Cuando el usuario 1 decide compartir su nombre y foto con el usuario 2, se envían la clave del registro junto con el recordID dentro de su carga útil de iMessage, que está encriptada.
Cuando el dispositivo del usuario 2 recibe esta carga útil de iMessage, nota que contiene un recordID con el apodo y la foto, y una clave. El dispositivo del usuario 2 entonces va a la base de datos pública de CloudKit para obtener el nombre y la foto encriptados en el recordID y lo envía mediante iMessage.
Una vez que se obtiene el mensaje, el dispositivo del usuario 2 desencripta la carga útil y verifica la firma usando el recordID mismo. Si se pasa la verificación, al usuario 2 se le muestra el nombre y la foto, y puede elegir agregarlos a sus contactos o usarlo para Mensajes.