Synchronisation sécurisée du trousseau
Lorsqu’un utilisateur active le trousseau iCloud pour la première fois, l’appareil établit un cercle de confiance et crée une identité de synchronisation pour lui‑même. L’identité de synchronisation est constituée d’une clé privée et d’une clé publique et est stockée dans le trousseau de l’appareil. La clé publique de l’identité de synchronisation est placée dans le cercle, et ce dernier est signé deux fois : une première fois avec la clé privée de l’identité de synchronisation et une deuxième fois avec une clé asymétrique sur courbe elliptique (avec P‑256) dérivée du mot de passe du compte iCloud de l’utilisateur. Les paramètres utilisés pour créer la clé basée sur le mot de passe iCloud de l’utilisateur (sel et itérations aléatoires) sont également stockés avec le cercle.
Pour les comptes d’identification à deux facteurs, un cercle de synchronisation similaire supplémentaire est créé et stocké dans CloudKit. Dans ce système, les identités des appareils sont constituées de deux paires de clés elliptiques asymétriques (utilisant P-384), également stockées dans le trousseau. Chaque appareil maintient sa propre liste d’identités auxquelles il fait confiance et signe cette liste à l’aide d’une de ses clés d’identité.
Stockage iCloud du cercle de synchronisation
Le cercle de synchronisation signé est ensuite stocké dans la zone de stockage clé-valeur d’iCloud de l’utilisateur. Il est impossible de lire ce cercle sans connaître le mot de passe iCloud de l’utilisateur et de le modifier de manière valide sans disposer de la clé privée de l’identité de synchronisation de son membre.
Pour les comptes à identification à deux facteurs, la liste de synchronisation de chaque appareil est stockée dans CloudKit. Les listes ne peuvent pas être lues sans connaître le mot de passe iCloud de l’utilisateur et elles ne peuvent pas être modifiées sans avoir les clés privées de l’appareil propriétaire.
Ajout d’autres appareils de l’utilisateur au cercle de synchronisation
Lorsqu’ils se connectent à iCloud, les nouveaux appareils rejoignent le cercle de synchronisation du trousseau iCloud de deux manières : soit en se jumelant avec un appareil existant du trousseau iCloud et en étant parrainé par celui-ci, soit en utilisant la récupération du trousseau iCloud.
Au cours des flux de jumelage, l’appareil demandeur crée de nouvelles identités de synchronisation à la fois pour le cercle de synchronisation et les listes de synchronisation (pour les comptes d’identification à deux facteurs) et les présente au parrain. Le parrain ajoute la clé publique du nouveau membre au cercle de synchronisation et la signe à nouveau avec son identité de synchronisation et la clé dérivée du mot de passe iCloud de l’utilisateur. Le nouveau cercle de synchronisation est alors placé dans iCloud, où il est signé de la même manière par le nouveau membre du cercle. Dans les comptes d’identification à deux facteurs, l’appareil parrain fournit également à l’appareil demandeur un justificatif signé par ses clés d’identité, montrant que l’appareil demandeur devrait être digne de confiance. Il met ensuite à jour sa liste individuelle d’identités de synchronisation fiables pour y inclure le demandeur.
Il y a à présent deux membres du cercle de signature, et chacun possède la clé publique de son homologue. Ils commencent alors à s’échanger des éléments de trousseau individuels par l’entremise de l’espace de stockage clé-valeur d’iCloud ou ils les stockent dans CloudKit, selon l’option qui convient le mieux à la situation. Si les deux membres du cercle ont des mises à jour pour le même élément, l’un ou l’autre est choisi, ce qui aboutit à une cohérence éventuelle. Chaque élément synchronisé est chiffré de façon à ne pouvoir être déchiffré que par un appareil faisant partie du cercle de confiance de l’utilisateur; les autres appareils ne peuvent pas le faire, ni Apple.
Lorsque de nouveaux appareils rejoignent le cercle de synchronisation, ce « processus de liaison » est répété. Par exemple, lorsqu’un troisième appareil est ajouté, il peut être jumelé avec l’un ou l’autre des appareils existants. À mesure que de nouveaux appareils sont ajoutés, chacun d’entre eux est synchronisé avec le nouveau pour veiller à ce que tous les membres disposent des mêmes éléments de trousseau.
Synchronisation sélective
Certains éléments du trousseau sont propres à l’appareil, comme les clés iMessage, et doivent donc rester sur l’appareil. Par conséquent, chaque élément qui sera synchronisé doit être explicitement marqué avec l’attribut kSecAttrSynchronizable
.
Apple définit cet attribut pour les données d’utilisateur de Safari (notamment les noms d’utilisateur, les mots de passe et les numéros de carte de crédit) ainsi que pour les mots de passe Wi‑Fi, les clés de chiffrement HomeKit et les autres éléments du trousseau prenant en charge le chiffrement iCloud de bout en bout.
De plus, les éléments de trousseau ajoutés par des apps tierces ne sont pas synchronisés par défaut. Les développeurs doivent définir l’attribut kSecAttrSynchronizable
lorsqu’ils ajoutent des éléments au trousseau.