Sikker nøkkelringsynkronisering
Når en bruker aktiverer iCloud-nøkkelring for første gang, danner enheten en godkjent sirkel og oppretter en synkroniseringsidentitet for seg selv. Synkroniseringsidentiteten består av en privat nøkkel og en offentlig nøkkel, og den arkiveres i nøkkelringen på enheten. Den offentlige nøkkelen til synkroniseringsidentiteten legges i sirkelen, og sirkelen signeres to ganger: først av den private nøkkelen til synkroniseringsidentiteten, og deretter igjen med en asymmetrisk elliptisk nøkkel (som bruker P-256) avledet fra brukerens passord for iCloud-kontoen. Parameterne (tilfeldig salt og iterasjoner) som brukes til å lage nøkkelen som er basert på brukerens iCloud-passord, lagres også i sirkelen.
For kontoer med tofaktorautentisering opprettes enda en lignende synkroniseringssirkel som arkiveres i CloudKit. Enhetsidentiteter i dette systemet består av to par med asymmetriske elliptiske nøkler (som bruker P-384), og de arkiveres også i nøkkelringen. Hver enhet har sin egen liste over identiteter den stoler på, og listen signeres ved hjelp av en av nøklene for identiteten.
iCloud-arkivering av sirkelen for synkronisering
Den signerte sirkelen for synkronisering arkiveres i brukerens iCloud-lagringsplass for nøkkelverdier. Den kan ikke leses uten å kjenne brukerens iCloud-passord, og den kan ikke endres på en gyldig måte uten å ha den private nøkkelen til medlemmets synkroniseringsidentitet.
For kontoer med tofaktorautentisering arkiveres hver enhets synkroniseringsliste i CloudKit. Listene kan ikke leses uten å kjenne brukerens iCloud-passord, og de kan ikke endres uten å ha den private nøkkelen til enheten som eier dem.
Hvordan en brukers andre enheter legges til i synkroniseringssirkelen
Når nye enheter logges på iCloud, kan de bli med i synkroniseringssirkelen for iCloud-nøkkelringen på to måter – enten ved å sammenkobles med og bli sponset av en eksisterende iCloud-nøkkelringenhet, eller ved å bruke gjenoppretting av iCloud-nøkkelring.
Under sammenkoblingen oppretter enheten som søker, nye synkroniseringsidentiteter for både synkroniseringssirkelen og synkroniseringslistene (for kontoer med tofaktorautentisering), og disse vises til sponsoren. Sponsoren legger det nye medlemmets offentlige nøkkel til i synkroniseringssirkelen og signerer den på nytt med både synkroniseringsidentiteten og nøkkelen som er avledet fra brukerens iCloud-passord. Den nye synkroniseringssirkelen plasseres i iCloud, hvor den signeres på tilsvarende måte av det nye medlemmet i sirkelen. For kontoer med tofaktorautentisering gir sponsorenheten den nye enheten en voucher som er signert av identitetsnøklene, for å vise at enheten som søker, kan stoles på. Deretter oppdateres den individuelle listen over godkjente synkroniseringsidentiteter med søkeren.
Det er nå to medlemmer i signeringssirkelen, og begge medlemmene har den offentlige nøkkelen til det andre medlemmet. De begynner så å utveksle individuelle nøkkelringobjekter via iCloud-lagringsplassen for nøkkelverdier eller lagre dem i CloudKit, avhengig av hva som er mest passende for situasjonen. Hvis begge sirkelmedlemmene har oppdateringer av samme objekt, velges én av dem, noe som vil føre til at de etter hvert blir like. Hvert objekt som synkroniseres, krypteres, slik at det kun kan dekrypteres av en enhet innenfor brukerens godkjente sirkel. Det kan ikke dekrypteres av andre enheter eller av Apple.
Denne prosessen gjentas når nye enheter blir med i synkroniseringssirkelen. Når for eksempel en tredje enhet blir med, kan den sammenkobles med hvilken som helst av de eksisterende enhetene. Etter hvert som det legges til nye enheter på samme nivå, synkroniseres alle enhetene med den nye. Dette er utviklet for å sikre at alle medlemmene har samme nøkkelringobjekter.
Kun enkelte objekter synkroniseres
Enkelte nøkkelringobjekter er knyttet til enheter, for eksempel iMessage-nøkler, og derfor må de forbli på enheten. Derfor må alle objekter som skal synkroniseres, merkes med kSecAttrSynchronizable
-attributtet.
Apple setter dette attributtet for Safari-brukerdata (inkludert brukernavn, passord og kredittkortnumre) og for Wi-Fi-passord, og HomeKit-krypteringsnøkler og andre nøkkelringobjekter som støtter gjennomgående iCloud-kryptering.
Dessuten er det standard at nøkkelringobjekter som legges til av tredjepartsapper, ikke synkroniseres. Utviklere må sette attributtet kSecAttrSynchronizable
når de legger til objekter på nøkkelringen.