Suojattu salasanan synkronointi
Kun käyttäjä laittaa iCloud-avainnipun ensimmäisen kerran päälle kaksiosaista todennusta käyttävälle tilille, laite luo itselleen synkronointi-identiteetin. Synkronointi-identiteetti koostuu (P-384:ää käyttävistä) epäsymmetrisistä elliptisistä avaimista, jotka tallennetaan laitteen avainnippuun. Kukin laite ylläpitää omaa luetteloaan käyttäjän muiden laitteiden synkronointi-identiteeteistä ja allekirjoittaa tämän luettelon yhdellä identiteettiavaimistaan. Nämä luettelot tallennetaan CloudKitiin, jotta käyttäjän laitteet voivat muodostaa yhteisymmärryksen siitä, miten avainnipputiedot synkronoidaan suojatusti niiden kesken.
Yhteensopivuus vanhempien iCloud-laitteiden kanssa mahdollistetaan luomalla samanlainen synkronoinnin luottamusverkosto ja vielä yksi synkronointi-identiteetti. Synkronointi-identiteetin julkinen avain pannaan luottamusverkostoon ja verkosto allekirjoitetaan kahteen kertaan: ensin synkronointi-identiteetin yksityisellä avaimella ja sitten uudelleen epäsymmetrisellä elliptisellä avaimella (käyttää P-256:ta), joka on muodostettu käyttäjän iCloud-tilin salasanasta. Verkostoon tallennetaan myös parametrit (satunnainen suolaus ja iteraatiot), joita käytetään käyttäjän iCloud-salasanaan perustuvan avaimen luomiseen.
Synkronointiverkoston tallentaminen iCloudiin
Kaksiosaista todennusta käyttävillä tileillä kunkin laitteen luotettujen laiteiden luettelo tallennetaan CloudKitiin. Luetteloja ei voi lukea, jos käyttäjän iCloud-salasana ei ole tiedossa, eikä niitä voi muokata ilman omistavan laitteen yksityisiä avaimia.
Allekirjoitettu synkronointiverkosto tallennetaan käyttäjän iCloud-avainarvotallennustila-alueelle, eikä sitäkään voi lukea, jos käyttäjän iCloud-salasana ei ole tiedossa, eikä muokata hyväksyttävästi ilman verkoston jäsenen synkronointi-identiteetin yksityistä avainta.
Käyttäjän muiden laitteiden lisääminen synkronointiverkostoon
Kun uudet laitteet kirjautuvat iCloudiin, ne liittyvät iCloud-avainnipun synkronointiverkostoon jommallakummalla kahdesta tavasta: joko verkostossa jo olevan iCloud-avainnippulaitteen parina ja sen takaamana tai käyttämällä iCloud-avainnipun palautusta.
Pariin perustuvassa tavassa verkostoon pääsyä pyytävä laite luo uudet synkronointi-identiteetit sekä synkronointiverkostolle että synkronointiluetteloille (kaksiosaista todennusta käyttäville tileille) ja esittää ne takaajalaitteelle. Takaajalaite lisää uuden jäsenen julkisen avaimen synkronointiverkostoon ja allekirjoittaa sen uudelleen sekä synkronointi-identiteetillään että käyttäjän iCloud-salasanasta muodostetulla avaimella. Uusi synkronointiverkosto sijoitetaan iCloudiin, missä verkoston uusi jäsen allekirjoittaa sen samalla tavoin. Kaksiosaista todennusta käyttävillä tileillä takaajalaite myös antaa liittyvälle laitteelle tositteen, joka on allekirjoitettu sen identiteettiavaimilla ja joka kertoo, että pääsyä pyytävään laitteeseen tulisi luottaa. Sitten se päivittää yksilöllisen luotettujen synkronointi-identiteettien luettelonsa sisällyttäen pääsyä pyytävän laitteen siihen.
Nyt allekirjoitusverkostossa on kaksi jäsentä, joilla kummallakin on toisen julkinen avain. Nyt ne aloittavat yksittäisten avainnipun kohteiden vaihdon tilanteesta riippuen joko iCloudKitin tai iCloud-avainarvotallennustilan kautta. Jos molemmilla verkoston jäsenillä on päivitykset samaan kohteeseen, valitaan jompikumpi, jolloin lopputulos on yhtenäinen. Kukin synkronoitava kohde salataan siten, että salauksen voi purkaa ainoastaan käyttäjän luottamusverkostossa oleva laite. Mikään muu laite tai Apple ei voi purkaa salausta.
Kun synkronointiverkostoon liittyy uusia laitteita, tämä ”liittymisprosessi” toistetaan. Esimerkiksi kun kolmas laite liittyy, se voidaan lisätä jommankumman verkostossa jo olevan laitteen parina. Kun uusia vertaislaitteita lisätään, kukin vertaislaite synkronoi uuden laitteen kanssa. Tämä on suunniteltu varmistamaan, että kaikilla jäsenillä on samat avainnipun kohteet.
Ainoastaan tietyt kohteet synkronoidaan
Jotkin avainnipun kohteet, kuten iMessage-avaimet, ovat laitekohtaisia, joten niiden kuuluu jäädä laitteeseen. Odottamattomien datasiirtojen estämiseksi jokainen synkronoitava kohde on nimenomaisesti merkittävä kSecAttrSynchronizable
-attribuutilla.
Apple asettaa tämän attribuutin Safarin käyttäjätiedoille (mukaan lukien käyttäjätunnukset, salasanat ja luottokorttien numerot) sekä Wi-Fi-salasanoille, HomeKitin salausavaimille ja muille avainnipun kohteille, jotka tukevat iCloudin päästä päähän ‑salausta.
Oletuksena muiden valmistajien appien lisäämiä avainnipun kohteita ei synkronoida. Kehittäjien on asetettava kSecAttrSynchronizable
-attribuutti lisätessään kohteita avainnippuun.