
Sincronizzazione sicura del portachiavi
Quando lâutente attiva per la prima volta il portachiavi iCloud su un account con autenticazione a due fattori, il dispositivo stabilisce una propria identitĂ di sincronizzazione LâidentitĂ di sincronizzazione è composta da chiavi ellittiche asimmetriche (con la curva Pâ384), archiviate nel portachiavi del dispositivo. Ciascun dispositivo conserva un proprio elenco di identitĂ di sincronizzazione degli altri dispositivi dellâutente e lo firma utilizzando una delle chiavi dellâidentitĂ . Questi elenchi vengono archiviati su CloudKit, consentendo ai dispositivi dellâutente di raggiungere un consenso su come sincronizzare in modo sicuro i dati del portachiavi tra di loro.
Per offrire compatibilitĂ con dispositivi iCloud meno recenti, viene creata una cerchia di attendibilitĂ simile e viene formata unâaltra identitĂ di sincronizzazione. La chiave pubblica dellâidentitĂ di sincronizzazione viene inserita nella cerchia, che viene firmata due volte: prima dalla chiave privata dellâidentitĂ , poi nuovamente con una chiave ellittica asimmetrica (con la curva Pâ256) derivata dalla password dellâaccount iCloud dellâutente. Nella cerchia vengono memorizzati anche i parametri (random salt e iterazioni) utilizzati per creare una chiave basata sulla password iCloud dellâutente.
Archiviazione su iCloud della cerchia di sincronizzazione
Per gli account protetti dallâautenticazione a due fattori, lâelenco di dispositivi attendibili di ciascun dispositivo viene archiviato su CloudKit. Non è possibile leggerli senza conoscere la password iCloud dellâutente nĂŠ modificarli senza le chiavi private del dispositivo posseduto.
In modo analogo, la cerchia di sincronizzazione firmata viene salvata nellâarea di archiviazione chiave-valore di iCloud dellâutente. Non è possibile leggerla senza conoscere la password iCloud dellâutente nĂŠ modificarla in maniera valida senza la chiave privata dellâidentitĂ di sincronizzazione del membro della cerchia.
ModalitĂ di aggiunta degli altri dispositivi dellâutente alla cerchia di sincronizzazione
Durante lâaccesso ad iCloud, i nuovi dispositivi possono unirsi alla cerchia di sincronizzazione del portachiavi iCloud in uno dei due modi seguenti: abbinandosi a uno dei dispositivi esistenti nel portachiavi iCloud, dal quale verranno sponsorizzati, oppure utilizzando il recupero del portachiavi iCloud.
Durante il flusso di abbinamento, il dispositivo richiedente crea nuove identitĂ di sincronizzazione, sia per la cerchia che per gli elenchi (per gli account con lâautenticazione a due fattori) di sincronizzazione e le presenta al dispositivo principale. Questo aggiunge la chiave pubblica del nuovo membro alla cerchia di sincronizzazione e la firma nuovamente utilizzando sia la sua identitĂ di sincronizzazione che la chiave derivata dalla password iCloud dellâutente. La nuova cerchia di sincronizzazione viene inserita in iCloud e firmata in maniera simile dal nuovo membro. Negli account con lâautenticazione a due fattori, il dispositivo principale fornisce al dispositivo richiedente anche un voucher firmato con le proprie chiavi dellâidentitĂ , che mostrano che il dispositivo richiedente può essere ritenuto attendibile. Quindi aggiorna il proprio elenco individuale di identitĂ di sincronizzazione attendibili in modo da includere il dispositivo richiedente.
Ora nella cerchia di sincronizzazione ci sono due membri e ciascuno dispone della chiave pubblica dellâaltro. A questo punto iniziano a scambiarsi singoli elementi del portachiavi attraverso CloudKit o attraverso lâarchivio chiave-valore di iCloud a seconda dei casi. Se entrambi i membri della cerchia devono aggiornare lo stesso elemento, è possibile scegliere sia lâuno che lâaltro, ottenendo sempre un risultato coerente. Ogni elemento sincronizzato viene crittografato in maniera tale che possa essere decrittografato solo da un dispositivo che faccia parte della cerchia di attendibilitĂ dellâutente; non può essere decrittografato da nessun altro dispositivo nĂŠ da Apple.
Ogni volta che un nuovo dispositivo si aggiunge alla cerchia di sincronizzazione, il processo descritto sopra si ripete. Ad esempio, se si dovesse aggiungere un terzo dispositivo potrebbe essere abbinato con uno qualsiasi dei dispositivi esistenti. Man mano che vengono aggiunti nuovi membri, ognuno di essi si sincronizza con quello nuovo. Questo meccanismo è progettato per garantire che tutti i membri abbiano gli stessi elementi nel portachiavi.
Solo determinati elementi vengono sincronizzati
Alcuni elementi del portachiavi sono specifici di ciascun dispositivo, come le chiavi di iMessage, pertanto devono rimanere sul dispositivo. Per impedire trasferimenti di dati inattesi, ciascun elemento che verrĂ sincronizzato deve essere contrassegnato esplicitamente con lâattributo kSecAttrSynchronizable
.
Apple imposta questo attributo per i dati utente di Safari (inclusi nomi utente, password e numeri di carte di credito) oltre che per le password WiâFi, le chiavi di crittografia di HomeKit e per gli altri elementi del portachiavi che supportano la crittografia end-to-end di iCloud.
Inoltre, di default, non vengono sincronizzati gli elementi del portachiavi aggiunti da app di terze parti. Quando aggiungono elementi al portachiavi, gli sviluppatori devono impostare lâattributo kSecAttrSynchronizable
.