Sincronización segura del llavero
Cuando un usuario activa el llavero de iCloud por primera vez en una cuenta con autenticación de dos factores, el dispositivo determina y crea una identidad de sincronización para sí mismo. La identidad de sincronización consta de unas claves de curva elíptica asimétricas (con P-384), las cuales se almacenan en el llavero del dispositivo. Cada dispositivo mantiene su propia lista de identidades de sincronización de los otros dispositivos del usuario, y firma esta lista usando una de sus claves de identidad. Estas listas se almacenan en CloudKit, lo que permite que los dispositivos del usuario determinen en conjunto cómo sincronizarse los datos de forma segura.
Para la compatibilidad con dispositivos iCloud más antiguos, se crea un círculo de confianza de sincronización similar y se forma otra identidad de sincronización. La clave pública de la identidad de sincronización se coloca en el círculo y el círculo se firma dos veces: primero, lo firma la clave privada de la identidad de sincronización y, después, una clave de curva elíptica asimétrica (con P‑256) derivada de la contraseña de la cuenta de iCloud del usuario. Junto con el círculo también se almacenan los parámetros (valor de sal aleatorio e iteraciones) usados para crear la clave que se basa en la contraseña de iCloud del usuario.
Almacenamiento en iCloud del círculo de sincronización
En el caso de las cuentas con la autenticación de dos factores, la lista de dispositivos de confianza de cada dispositivo se almacena en CloudKit. No se pueden leer las listas sin conocer la contraseña de iCloud del usuario, y no se pueden modificar sin disponer de las claves privadas del dispositivo que las contiene.
De forma similar, el círculo de sincronización firmado se almacena en el área de almacenamiento de clave-valor de iCloud del usuario, no se puede leer sin conocer la contraseña de iCloud de este y no se puede modificar de forma válida sin disponer de la clave privada de la identidad de sincronización de su miembro.
Cómo se agregan los otros dispositivos de un usuario al círculo de sincronización
Los dispositivos nuevos, al iniciar sesión en iCloud, se unen al círculo de sincronización del llavero de iCloud de una de las siguientes dos maneras: enlazándose a un dispositivo existente en el llavero de iCloud y siendo patrocinados por él, o utilizando la recuperación del llavero de iCloud.
Durante los flujos de enlace, el dispositivo solicitante crea nuevas identidades de sincronización tanto para el círculo de sincronización como para las listas de sincronización (para las cuentas con autenticación de dos factores) y las presenta al dispositivo patrocinador. El dispositivo patrocinador agrega la clave pública del nuevo miembro al círculo de sincronización y vuelve a firmarlo con la identidad de sincronización correspondiente y la clave derivada de la contraseña de iCloud del usuario. El nuevo círculo de sincronización se ubica en iCloud, donde el nuevo miembro lo firma de manera similar. En las cuentas con autenticación de dos factores, el dispositivo patrocinador también proporciona al dispositivo que se está uniendo un comprobante firmado por sus claves de identidad, que indica que el dispositivo solicitante debería ser de confianza. Después, actualiza su lista individual de identidades de sincronización de confianza para incluir al solicitante.
Así, el círculo de sincronización tiene dos miembros y cada uno de ellos dispone de la clave pública del otro. Estos empiezan a intercambiar elementos individuales del llavero mediante CloudKit, o el almacenamiento de datos clave‑valor de iCloud, lo que sea más adecuado para la situación. Si los dos miembros del círculo tienen actualizaciones del mismo elemento, se elige uno u otro, lo que da lugar a una eventual coherencia. Cada elemento sincronizado se encripta a fin de que sólo pueda ser desencriptado en un dispositivo perteneciente al círculo de confianza del usuario; ningún otro dispositivo ni Apple podrán desencriptarlo.
A medida que se unen nuevos dispositivos al círculo de sincronización, este “proceso de enlace” se repite. Por ejemplo, cuando se une un tercer dispositivo, este puede enlazarse utilizando cualquiera de los dispositivos existentes. A medida que se agregan nuevos miembros, cada uno se sincroniza con este, lo que está diseñado para garantizar que todos tengan los mismos elementos de llavero.
Sólo se sincronizan algunos elementos
Algunos elementos del llavero son específicos del dispositivo, como las claves de iMessage, de modo que deben permanecer en el dispositivo. Para impedir el transporte de datos inesperados, cada elemento que se sincronizará deberá estar marcado explícitamente con el atributokSecAttrSynchronizable
.
Apple configura este atributo para los datos de usuario de Safari (que incluyen los nombres de usuario, contraseñas y números de tarjetas de crédito), así como para las contraseñas de redes Wi‑Fi, las claves de encriptación de HomeKit, y otros elementos del llavero compatibles con la encriptación de punto a punto de iCloud.
Además, de forma predeterminada, los elementos del llavero que hayan agregado apps de terceros no se sincronizan. Los desarrolladores deben definir el atributo kSecAttrSynchronizable
al momento de agregar elementos al llavero.