Sincronización segura del llavero
Cuando un usuario activa el llavero de iCloud por primera vez en una cuenta con autenticación de doble factor, el dispositivo crea y establece una identidad de sincronización para sí mismo. La identidad de sincronización consta de claves elípticas asimétricas (con P-384), que se almacenan en el llavero del dispositivo. Cada dispositivo mantiene su propia lista de identidades de los demás dispositivos del usuario, y firma esta lista usando una de sus claves de identidad. Estas listas se almacenan en CloudKit, lo que permite a los dispositivos del usuario consensuar cómo sincronizar de forma segura los datos del llavero entre ellos.
Con fines de compatibilidad con dispositivos iCloud anteriores, 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 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.
Almacenamiento en iCloud del círculo de sincronización
Para las cuentas de autenticación de doble factor, la lista de sincronización de cada dispositivo de confianza 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.
De forma similar, el círculo de confianza 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 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.
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 CloudKit, o el área de almacenamiento de clave-valor de iCloud, 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. Para evitar el transporte imprevisto de datos, 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.