Säker synkronisering av nyckelringen
När en användare aktiverar iCloud-nyckelring för första gången upprättar enheten en tillförlitlighetscirkel och skapar en synkroniseringsidentitet åt sig själv. Synkroniseringsidentiteten består av en privat nyckel och en publik nyckel och lagras i enhetens nyckelring. Den publika nyckeln till synkroniseringsidentiteten läggs till i cirkeln och cirkeln signeras två gånger: först av den privata nyckeln i synkroniseringsidentiteten och sedan igen med en asymmetrisk elliptisk nyckel (med P-256) som härleds ur lösenordet till användarens iCloud-konto. I cirkeln sparas också parametrarna (slumpmässigt salt och iterationer) som används till att skapa nyckeln som baseras på användarens iCloud-lösenord.
För konton med tvåfaktorsautentisering skapas en ytterligare liknande synkroniseringscirkel och lagras i CloudKit. Enhetsidentiteter i det här systemet består av två par asymmetriska elliptiska nycklar (med P-384) och lagras också i nyckelringen. Varje enhet upprätthåller sin egen lista med betrodda identiteter och signerar denna lista med en av dess identitetsnycklar.
iCloud-lagring av synkroniseringscirkeln
Den signerade synkroniseringscirkeln lagras i lagringsutrymmet för användarens iCloud-nyckelvärde. Den kan inte läsas utan att känna till användarens iCloud-lösenord och kan inte ändras på ett giltigt sätt utan tillgång till den privata nyckeln för medlemmens synkroniseringsidentitet.
För konton med tvåfaktorsautentisering lagras varje enhets synkroniseringslista i CloudKit. Listorna kan inte läsas utan att känna till användarens iCloud-lösenord och kan inte ändras utan tillgång till de privata nycklarna för ägarenheten.
Så här läggs användares andra enheter till i synkroniseringscirkeln
När nya enheter loggar in på iCloud ansluter de till iCloud-nyckelrings synkroniseringscirkel på ett av två sätt: antingen genom att parkoppla med och sponsras av en befintlig iCloud-nyckelringsenhet eller genom att använda iCloud-nyckelringsåterställning.
Under parkopplingsflödena skapar den sökande enheten nya synkroniseringsidentiteter för både synkroniseringscirkeln och synkroniseringslistorna (för konton med tvåfaktorsautentisering) och presenterar dem för sponsorn. Sponsorn lägger till den nya medlemmens publika nyckel i synkroniseringscirkeln och signerar den igen med både dess synkroniseringsidentitet och med nyckeln som härleds ur användarens iCloud-lösenord. Den nya synkroniseringscirkeln placeras på iCloud där den sedan signeras på ett liknande sätt av den nya cirkelmedlemmen. I konton med tvåfaktorsautentisering tillhandahåller sponsorenheten även ett kvitto som är signerat med dess identitetsnycklar till den anslutande enheten, vilka visar att den ansökande enheten är tillförlitlig. Sedan uppdaterar den dess enskilda lista med betrodda synkroniseringsidentiteter så att den ansökande inkluderas.
Det finns nu två medlemmar i signeringscirkeln och varje medlem har den publika nyckeln till den andra medlemmen. De börjar nu att utväxla enskilda nyckelringsobjekt via lagringsutrymmet för nyckelvärden på iCloud eller lagrar dem i CloudKit, beroende på vad som är mest lämpligt i den aktuella situationen. Om båda cirkelmedlemmarna har uppdateringar för samma objekt väljs den ena eller den andra, vilket leder till eventuell konsekvens. Varje objekt som synkroniseras krypteras så att det bara kan avkrypteras av en enhet som finns i användarens tillförlitlighetscirkel. Det kan inte avkrypteras av någon annan enhet eller av Apple.
När nya enheter ansluter till synkroniseringscirkeln upprepas den här ”anslutningsprocessen”. När en tredje enhet ansluter kan den exempelvis parkopplas med vilken som helst av de befintliga enheterna. När nya enheter läggs till synkroniseras alla enheter med den nya enheten. Detta garanterar att alla har samma nyckelringsobjekt.
Endast vissa objekt synkroniseras
En del nyckelringsobjekt är enhetsspecifika, exempelvis iMessage-nycklar, och måste därför stanna på enheten. Därför måste alla objekt som synkroniseras uttryckligen märkas med attributet kSecAttrSynchronizable
.
Apple har ställt in det här attributet för Safari-användardata (inklusive användarnamn, lösenord och kreditkortsnummer), liksom för Wi-Fi-lösenord, HomeKit-krypteringsnycklar och andra nyckelringsobjekt som stöder heltäckande iCloud-kryptering.
Som förval synkroniseras inte nyckelringsobjekt som har lagts till av tredjepartsappar. Utvecklarna måste ställa in attributet kSecAttrSynchronizable
när de lägger till objekt i nyckelringen.