
Synchronisation sécurisée du trousseau
Lorsqu’un utilisateur active le trousseau iCloud pour la première fois sur un compte d’identification à deux facteurs, l’appareil établit et crée une identité de synchronisation pour lui‑même. L’identité de synchronisation est constituée de clés elliptiques asymétriques (utilisant P-384), qui sont stockées dans le trousseau de clés de l’appareil. Chaque appareil maintient sa propre liste d’identités de synchronisation des autres appareils de l’utilisateur et signe cette liste à l’aide d’une de ses clés d’identité. Ces listes sont stockées dans CloudKit, ce qui permet aux appareils de l’utilisateur de parvenir à un consensus sur la manière de synchroniser en toute sécurité les données du trousseau entre eux.
Pour assurer la compatibilité avec les appareils iCloud plus anciens, un cercle de confiance de synchronisation similaire est créé et une autre identité de synchronisation est formée. 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.
Stockage iCloud du cercle de synchronisation
Pour les comptes à identification à deux facteurs, la liste des appareils de confiance 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.
De même, le cercle de synchronisation signé est stocké dans l’espace de stockage clé-valeur d’iCloud de l’utilisateur. Il n’est pas possible de le lire sans connaître le mot de passe iCloud de l’utilisateur ni de le modifier de manière valide sans disposer de la clé privée de l’identité de synchronisation de son membre.
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 CloudKit ou ils les stockent dans l’espace de stockage clé-valeur d’iCloud, 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. Pour éviter un transport inattendu des données, 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.