Keybag per la protezione dei dati
Le chiavi per le classi di protezione dati dei file e del portachiavi sono raccolte e gestite nelle keybag su iOS, iPadOS, tvOS e watchOS. Tali sistemi operativi utilizzano le seguenti keybag: Utente, Dispositivo, Backup, Escrow e “Backup iCloud”.
Keybag Utente
La keybag Utente è dove vengono archiviate le chiavi di classe cifrate usate durante il normale funzionamento del dispositivo. Ad esempio quando viene inserito un codice, la chiave NSFileProtectionComplete viene caricata dalla keybag Utente e viene decifrata. Si tratta di un file plist binario archiviato nella classe “Nessuna protezione”.
Per i dispositivi con SoC precedenti all’A9, i contenuti del file plist sono codificati con una chiave conservata in Effaceable Storage. Per poter fornire maggiore sicurezza alle keybag, questa chiave viene cancellata e rigenerata ogni volta che l’utente cambia il codice.
Per i dispositivi con A9 o SoC successivi, il file plist contiene una chiave che indica che la keybag è archiviata in una posizione protetta dal valore anti-replay controllato da Secure Enclave.
Secure Enclave gestisce la keybag Utente e può essere interrogato sullo stato di blocco di un dispositivo. Riporterà che il dispositivo è sbloccato solo se tutte le chiavi di classe nella keybag Utente sono accessibili e sono state decifrate correttamente.
Keybag Dispositivo
La keybag Dispositivo è utilizzata per archiviare le chiavi di classe cifrate usate per le operazioni che includono dati specifici del dispositivo. I dispositivi iPadOS configurati per l’uso condiviso a volte hanno bisogno di accedere alle credenziali prima dell’accesso di qualsiasi utente, quindi occorre una keybag che non sia protetta dal codice dell’utente.
iOS e iPadOS non supportano la separazione crittografica dei contenuti del file system in base all’utente. Ciò significa che il sistema usa le chiavi di classe della keybag Dispositivo per cifrare le chiavi per file. Il portachiavi utilizza invece le chiavi delle classi della keybag Utente per proteggere gli elementi presenti nel portachiavi dell’utente. Sugli iPhone e iPad configurati per essere utilizzati da un solo utente (configurazione di default), la keybag Dispositivo e quella Utente coincidono e sono protette dal codice utente.
Keybag Backup
La keybag Backup viene creata quando il Finder (macOS 10.15 o versioni successive) o iTunes (macOS 10.14 o versioni precedenti) effettuano un backup codificato e viene archiviata sul computer che contiene il backup del dispositivo. Viene creata una nuova keybag con un nuovo gruppo di chiavi e i dati di cui è stato eseguito il backup sono nuovamente codificati con queste chiavi nuove. Come illustrato in precedenza, gli elementi del portachiavi non migratori rimangono cifrati con la chiave derivata dall’UID, il che ne consente il ripristino nel dispositivo da cui era stato eseguito il backup, rendendoli tuttavia inaccessibili se spostati su un dispositivo diverso.
Alla keybag, protetta dalla password impostata, vengono applicate 10 milioni di iterazioni della funzione di derivazione delle chiavi PBKDF2. Nonostante questo alto numero di iterazioni, non è presente alcun legame a un dispositivo specifico e, per questo motivo, la keybag Backup potrebbe essere oggetto di un tentativo di attacco di forza bruta effettuato in parallelo su molti computer. È possibile ovviare a questa vulnerabilità utilizzando una password sufficientemente sicura.
Se un utente decide di non codificare un backup, i file di backup non verranno codificati indipendentemente dalla classe di protezione dati a cui appartengono, ma il portachiavi rimane protetto con una chiave derivata dall’UID. Ecco perché gli elementi del portachiavi migrano su un nuovo dispositivo solo se è stata impostata una password di backup.
Keybag Escrow
La keybag Escrow è utilizzata per la sincronizzazione con il Finder (macOS 10.15 o versioni successive) o iTunes (macOS 10.14 o versioni precedenti) tramite USB e per la gestione dei dispositivi mobili (MDM). Questa keybag consente al Finder o ad iTunes di eseguire il backup e la sincronizzazione senza richiedere all’utente di inserire un codice e permette a una soluzione MDM di cancellare remotamente il codice di un utente. È archiviata nel computer utilizzato per la sincronizzazione con il Finder o con iTunes o sulla soluzione MDM che gestisce il dispositivo da remoto.
La keybag Escrow migliora l’esperienza utente durante la sincronizzazione del dispositivo, operazione che potenzialmente potrebbe richiedere l’accesso a qualsiasi classe di dati. Quando un dispositivo bloccato da codice è connesso al Finder o ad iTunes per la prima volta, all’utente viene chiesto di inserire un codice. Il dispositivo crea quindi una keybag Escrow contenente le stesse chiavi di classe utilizzate sul dispositivo, protette da una chiave generata ex novo. La keybag Escrow e la chiave che la protegge sono divise tra il dispositivo e l’host o il server, e i dati sono archiviati sul dispositivo nella classe “Protetto fino alla prima autenticazione utente”. Questo è il motivo per cui è necessario inserire il codice prima che l’utente esegua un backup con il Finder o con iTunes per la prima volta dopo un riavvio.
Nel caso di un aggiornamento software in modalità wireless, all’utente viene richiesto di inserire il codice all’avvio dell’aggiornamento. Questa procedura viene utilizzata per creare un token di sblocco, utilizzabile una sola volta, che sblocca la keybag Utente dopo l’aggiornamento. Il token non può essere generato senza inserire il codice dell’utente e qualsiasi token generato in precedenza viene invalidato se il codice dell’utente è cambiato.
I token di sblocco utilizzabili una sola volta possono essere utilizzati per l’installazione assistita oppure non assistita di un aggiornamento software. Vengono codificati con una chiave derivata dal valore attuale di un contatore monotonico in Secure Enclave, l’UUID della keybag e l’UID di Secure Enclave.
Sui SoC A9 (o modelli successivi), il token di sblocco utilizzabile una sola volta non si affida più a contatori o a Effaceable Storage. Esso è invece protetto dal valore anti-replay controllato da Secure Enclave.
Il token di sblocco utilizzabile una sola volta per gli aggiornamenti software assistiti scade dopo 20 minuti. In iOS 13 e iPadOS 13.1 o versioni successive, il token è archiviato in una posizione protetta da Secure Enclave. Prima di iOS 13, questo token veniva esportato da Secure Enclave e veniva scritto in Effaceable Storage o protetto dal meccanismo anti-replay di Secure Enclave. Se il dispositivo non veniva riavviato entro 20 minuti, il timer per la validità faceva incrementare il contatore.
Gli aggiornamenti software automatici avvengono quando il sistema rileva che è disponibile un aggiornamento e quando una delle seguenti condizioni è vera:
Gli aggiornamenti automatici sono configurati su iOS 12 o versioni successive.
L’utente sceglie “Installa più tardi” quando riceve una notifica dell’aggiornamento.
Una volta che l’utente ha inserito il codice, viene generato un token di sblocco una tantum che può restare valido in Secure Enclave per 8 ore. Se l’aggiornamento non si è ancora verificato, questo token di sblocco viene distrutto a ogni blocco e creato nuovamente a ogni sblocco successivo. Ogni sblocco riavvia la finestra di 8 ore. Trascorse 8 ore, un timer renderà il token di sblocco non valido.
Keybag “Backup iCloud”
La keybag “Backup iCloud” è simile alla keybag Backup. Tutte le chiavi di classe in questa keybag sono asimmetriche (utilizzano Curve25519, come la classe di protezione dati “Protetto se non è aperto”). Anche per la protezione del portachiavi incluso nel backup per il recupero del portachiavi iCloud viene usata una keybag asimmetrica.