Classi di protezione dati
Quando viene creato un file nuovo su un dispositivo che supporta la protezione dei dati, gli viene assegnata una classe dall’app che l’ha creato. Ogni classe utilizza diverse policy che stabiliscono quando i dati sono accessibili. Le classi e le policy di base sono descritte nelle sezioni seguenti. I Mac dotati di chip Apple non supportano la “Classe D: Nessuna protezione” e viene stabilito un limite di sicurezza al momento del login e del logout (non al momento del blocco o dello sblocco come su iPhone e iPad).
Classe | Tipo di protezione |
---|---|
Classe A: Protezione completa | NSFileProtectionComplete |
Classe B: Protetto se non è aperto | NSFileProtectionCompleteUnlessOpen |
Classe C: Protetto fino alla prima autenticazione utente Nota: macOS utilizza una chiave di volume per ricreare le funzionalità della protezione di FileVault. | NSFileProtectionCompleteUntilFirstUserAuthentication |
Classe D: Nessuna protezione Nota: non supportata su macOS. | NSFileProtectionNone |
Protezione completa
NSFileProtectionComplete la chiave di classe è protetta da una chiave derivata dal codice o dalla password utente e dall’UID del dispositivo. Poco dopo che l’utente ha bloccato il dispositivo (10 secondi se l’opzione “Richiedi password” è impostata su Subito), la classe decrittografata viene eliminata, rendendo tutti i dati in essa contenuti inaccessibili finché l’utente non inserisce di nuovo il codice o sblocca il dispositivo (oppure effettua il login) tramite Face ID o Touch ID.
In macOS, poco dopo che l’ultimo utente ha eseguito il logout dal dispositivo, la classe decrittografata viene eliminata, rendendo tutti i dati in essa contenuti inaccessibili finché un utente non inserisce di nuovo il codice o effettua il login al dispositivo tramite Touch ID.
Protetto se non è aperto
NSFileProtectionCompleteUnlessOpen: potrebbe essere necessario scrivere alcuni file mentre il dispositivo è bloccato oppure mentre l’utente non ha eseguito il login, come ad esempio nel caso di un allegato e‑mail che viene scaricato in background. Questo comportamento si ottiene utilizzando una codifica a curva ellittica asimmetrica (ECDH su Curve25519). La normale chiave per file è protetta da una chiave generata tramite l’accordo base One‑Pass Diffie‑Hellman, come descritto in NIST SP 800‑56A.
La chiave pubblica effimera per l’accordo delle chiavi è archiviata insieme alla chiave per file protetta. KDF è la funzione di derivazione della chiave di concatenazione (alternativa 1 approvata) come descritto al punto 5.8.1 di NIST SP 800‑56A. AlgorithmID è omesso. PartyUInfo e PartyVInfo sono chiavi pubbliche effimere e statiche, rispettivamente. SHA256 è usato come funzione di hashing. Non appena viene chiuso il file, la chiave per file viene cancellata dalla memoria. Per potere aprire nuovamente il file, il segreto condiviso è ricreato utilizzando la chiave privata della classe “Protetto se non è aperto” e la chiave pubblica effimera, che sono usate per aprire la chiave per file utilizzata per decrittografare il file.
In macOS la parte privata di NSFileProtectionCompleteUnlessOpen è accessibile finché qualsiasi utente sul sistema ha eseguito l’accesso o è autenticato.
Protetto fino alla prima autenticazione utente
NSFileProtectionCompleteUntilFirstUserAuthentication: questa classe si comporta nello stesso modo di “Protezione completa”, l’unica differenza è che la chiave di classe decrittografata non viene rimossa dalla memoria quando il dispositivo è bloccato o l’utente ha eseguito il logout. La protezione in questa classe ha proprietà simili alla codifica desktop full‑volume e protegge i dati dagli attacchi che prevedono un riavvio. Questa classe è quella di default per tutti i dati delle app di terze parti che non sono stati assegnati a una classe di protezione dati specifica.
In macOS questa classe utilizza una chiave di volume che risulta accessibile finché il volume è attivato e funziona esattamente come FileVault.
Nessuna protezione
NSFileProtectionNone: questa chiave di classe è protetta solo con l’UID ed è conservata in Effaceable Storage. Dato che tutte le chiavi necessarie per decrittografare i file in questa classe sono archiviate sul dispositivo, la crittografia offre solo il vantaggio della cancellazione rapida a distanza. Se un file non è associato a una classe di protezione dati, è comunque archiviato in forma codificata (così come lo sono tutti i dati su un dispositivo iOS e iPadOS).
Questa opzione non è supportata in macOS.
Nota: in macOS, per i volumi che non corrispondono a un sistema operativo avviato, tutte le classi di protezione dati sono accessibili finché il volume è attivato. La classe di protezione dei dati di default è NSFileProtectionCompleteUntilFirstUserAuthentication. Le chiavi per entità sono disponibili sia per le app eseguite tramite Rosetta 2 sia per le app native.