Sincronización segura del llavero
Cuando un usuario activa el llavero de iCloud por primera vez, el dispositivo establece un círculo de confianza y crea una identidad de sincronización para sí mismo. La identidad de sincronización consta de una clave privada y una clave pública, las cuales se almacenan en el llavero del dispositivo. 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.
Para las cuentas con autenticación de dos factores, se crea un círculo de sincronización similar adicional, el cual se almacena en CloudKit. Las identidades de los dispositivos en este sistema consisten en dos pares de claves elípticas asimétricas (utilizando el protocolo P-384), las cuales también se almacenan en el llavero. Cada dispositivo mantiene su propia lista de identidades en las que confía, y firma esta lista usando una de sus claves de identidad.
Almacenamiento en iCloud del círculo de sincronización
El círculo de sincronización firmado se almacena en el área de almacenamiento de datos clave‑valor de iCloud del usuario. No se puede leer sin conocer la contraseña de iCloud del usuario y no se puede modificar de forma válida sin disponer de la clave privada de la identidad de sincronización de su miembro.
En el caso de las cuentas con la autenticación de dos factores, la lista de sincronización 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.
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 y siendo patrocinados por un dispositivo existente en el llavero de iCloud, 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 el almacenamiento de datos clave‑valor de iCloud, o se almacenan en CloudKit, 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. Como resultado, 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.