Sikker nøkkelringsynkronisering
Når en bruker slår på iCloud-nøkkelring for første gang for en konto med tofaktorautentisering, oppretter enheten en synkroniseringsidentitet for seg selv. Synkroniseringsidentiteten består av asymmetriske elliptiske nøkler (som bruker P-384), som arkiveres i nøkkelringen på enheten. Hver enhet har sin egen liste over synkroniseringsidentiteter for brukerens andre enheter, og listen signeres ved hjelp av en av nøklene for identiteten. Disse listene arkiveres i CloudKit, slik at brukerens enheter kan bli enige om hvordan nøkkelringdata skal synkroniseres på en sikker måte mellom dem.
For kompatibilitet med eldre iCloud-enheter opprettes en liknende synkroniseringssirkel basert på tillit, og det opprettes en ny synkroniseringsidentitet. 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 basert på brukerens iCloud-passord, lagres også i sirkelen.
iCloud-arkivering av sirkelen for synkronisering
For kontoer med tofaktorautentisering arkiveres hver enhets liste over godkjente enheter 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.
Den signerte sirkelen for synkronisering lagres i brukerens iCloud-lagringsplass for nøkkelverdier, den kan ikke leses uten å kjenne brukerens iCloud-passord. Den kan ikke endres på en gyldig måte uten å ha den private nøkkelen til medlemmets synkroniseringsidentitet.
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 deretter å utveksle individuelle nøkkelringobjekter via CloudKit eller iCloud-lagringsplassen for nøkkelverdier, 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. For å unngå uventet dataoverføring må hvert objekt 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.