
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, y se almacena en el llavero del dispositivo. La clave pública de la identidad de sincronización se coloca en el círculo y este 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, se almacenan los parámetros (sal aleatoria e iteraciones), usados para crear la clave que se basa en la contraseña de iCloud del usuario.
Para las cuentas de autenticación de doble factor, se crea un círculo de sincronización adicional similar que se almacena en CloudKit. Las identidades de los dispositivos en este sistema consisten en dos pares de claves elípticas asimétricas (usando P-384), también almacenadas 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.
Para las cuentas de autenticación de doble factor, la lista de sincronización de cada dispositivo se almacena en CloudKit. Las listas no se pueden leer sin conocer la contraseña de iCloud del usuario y no se pueden modificar sin disponer de las claves privadas del dispositivo que las posea.
Cómo se añaden los otros dispositivos de un usuario al círculo de sincronización
Los nuevos dispositivos, al iniciar sesión en iCloud, se unen al círculo de sincronización del llavero de iCloud de una de las dos maneras siguientes: emparejándose con un dispositivo del llavero de iCloud existente y siendo patrocinado por él, o usando la recuperación del llavero de iCloud.
Durante los flujos de emparejamiento, 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 de autenticación de doble factor) y las presenta al patrocinador. El patrocinador añade 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 de autenticación de doble factor, el dispositivo patrocinador también proporciona al dispositivo que accede un comprobante firmado por sus claves de identidad, que muestra que se debe confiar en el dispositivo solicitante. A continuación, 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 ítems individuales del llavero mediante el almacenamiento de datos clave-valor de iCloud o los almacenan en CloudKit, usando lo más adecuado en función de la situación. Si ambos miembros del círculo tienen actualizaciones para el mismo ítem, se elige uno u otro, lo que da lugar a una eventual uniformidad. Cada ítem que se sincroniza se encripta de modo que únicamente lo pueda desencriptar un dispositivo que esté dentro del círculo de confianza del usuario; ni Apple ni ningún otro dispositivo pueden desencriptarlo.
Este “proceso de acceso” se repite a medida que se unen nuevos dispositivos al círculo de sincronización. Por ejemplo, si se une un tercer dispositivo, se puede enlazar con cualquiera de los dispositivos existentes. A medida que se añaden nuevos pares, cada par se sincroniza con el nuevo. Esto está diseñado para garantizar que todos los miembros tengan los mismos ítems del llavero.
Solo se sincronizan ciertos ítems
Algunos ítems del llavero son específicos del dispositivo, como las claves de iMessage, por lo que deben permanecer en el dispositivo. En consecuencia, cada ítem que se sincronice debe estar marcado explícitamente con el atributo kSecAttrSynchronizable
.
Apple establece 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 wifi, las claves de encriptación de HomeKit y otros ítems del llavero que admiten la encriptación de punto a punto en iCloud.
Además, por defecto, los ítems del llavero que hayan añadido apps de terceros no se sincronizan. Los desarrolladores deben definir el atributo kSecAttrSynchronizable
al añadir ítems al llavero.