Android 7.0 e versioni successive supportano la crittografia basata su file (FBE). La crittografia basata su file consente di criptare file diversi con chiavi diverse che possono essere sbloccate in modo indipendente.
Questo articolo descrive come attivare la crittografia basata su file sui nuovi dispositivi e su come le applicazioni di sistema possono utilizzare le API di avvio diretto per offrire la migliore e più sicura possibile.
Tutti i dispositivi che verranno lanciati con Android 10 o versioni successive sono la crittografia basata su file.
Avvio diretto
La crittografia basata su file attiva una nuova funzionalità introdotta in Android 7.0 chiamata Direct Avvio. Avvio diretto consente ai dispositivi criptati di avviarsi direttamente nella serratura schermo. In precedenza, sui dispositivi criptati utilizzando full-disk la crittografia (FDE), gli utenti dovevano fornire le credenziali prima che i dati potessero al fine di impedire allo smartphone di eseguire tutte le operazioni di base, tranne quelle più basilari. operazioni aziendali. Ad esempio, impossibile attivare le sveglie, i servizi di accessibilità erano non disponibile e i telefoni non potevano ricevere chiamate, ma erano limitati alla versione di base la gestione delle chiamate di emergenza.
Con l'introduzione della crittografia basata su file (FBE) e di nuove API per le applicazioni sono consapevoli della crittografia, queste possono in un contesto limitato. Ciò può accadere prima che gli utenti abbiano fornito il proprio e credenziali e allo stesso tempo protegge le informazioni private degli utenti.
Su un dispositivo abilitato per FBE, ogni utente ha due posizioni di archiviazione disponibili per le applicazioni:
- Archivio con credenziali con crittografia CE, che è la posizione di archiviazione predefinita ed è disponibile solo dopo che l'utente ha sbloccato il dispositivo.
- Dispositivo di archiviazione con crittografia DE, che è una posizione di archiviazione disponibile durante la modalità Avvio diretto e dopo che l'utente ha sbloccato il dispositivo.
Questa separazione rende i profili di lavoro più sicuri perché consente da proteggere in un determinato momento, in quanto la crittografia non è più basata unicamente su un password di avvio.
L'API Direct Boot consente alle applicazioni sensibili alla crittografia di accedere a ciascuno di questi in queste aree. Il ciclo di vita dell'applicazione è stato modificato per soddisfare la necessità invia una notifica alle applicazioni quando lo spazio di archiviazione CE di un utente viene sbloccato in risposta a prima di inserire le credenziali nella schermata di blocco o, nel caso del profilo di lavoro, offrendo un lavoro una sfida. I dispositivi con Android 7.0 devono supportare queste nuove API e o meno, indipendentemente dal fatto che implementino o meno FBE. Tuttavia, senza Lo spazio di archiviazione FBE, DE e CE sarà sempre in stato sbloccato.
Un’implementazione completa della crittografia basata su file sui file Ext4 e F2FS vengono forniti nell'Android Open Source Project (AOSP) e devono essere su dispositivi che soddisfano i requisiti. Produttori che scelgono di utilizzare FBE potrebbe volere esplorare modi per ottimizzare la funzionalità in base al system on chip (SoC).
Tutti i pacchetti necessari in AOSP sono stati aggiornati affinché siano sensibili all'avvio diretto. Tuttavia, quando i produttori di dispositivi usano versioni personalizzate di queste app, assicurarti che ci siano almeno pacchetti sensibili all'avvio diretto che i seguenti servizi:
- Servizi di telefonia e tastiera
- Metodo di immissione delle password nella schermata di blocco
Esempi e fonte
Android fornisce un'implementazione di riferimento della crittografia basata su file, in cui vold (system/vold) offre la funzionalità per gestire i dispositivi di archiviazione volumi su Android. L'aggiunta di FBE fornisce ai vold diversi nuovi comandi per supportare la gestione delle chiavi CE e DE di più utenti. Inoltre, alle modifiche principali per utilizzare il modello basato le funzionalità di crittografia del kernel, molti pacchetti di sistema, schermata di blocco e SystemUI sono state modificate per supportare FBE e Direct Funzionalità di avvio. tra cui:
- AOSP Dialer (pacchetti/app/Dialer)
- Orologio da scrivania (pacchetti/app/DeskClock)
- LatinIME (packages/inputmethods/LatinIME)*
- App Impostazioni (pacchetti/app/impostazioni)*
- SystemUI (framework/base/packages/SystemUI)*
* Applicazioni di sistema che utilizzano defaultToDeviceProtectedStorage
attributo del file manifest
Altri esempi di applicazioni e servizi che sono consapevoli della crittografia possono essere
trovato eseguendo il comando mangrep directBootAware
nel
di framework o pacchetti dell'AOSP
nell'albero di origine.
Dipendenze
Per utilizzare l'implementazione AOSP di FBE in modo sicuro, un dispositivo deve soddisfare i le seguenti dipendenze:
- Supporto del kernel per la crittografia Ext4 o F2FS.
- Keymaster Supporto con HAL 1.0 o versioni successive. Non è disponibile assistenza per Keymaster 0.3 in quanto non fornisce le funzionalità necessarie o non assicura una protezione sufficiente per le chiavi di crittografia.
- Keymaster/Keystore e Il gatekeeper deve essere implementato in un'esecuzione attendibile Ambiente (TEE) per garantire la protezione delle chiavi DE in modo che il sistema operativo non autorizzato (il sistema operativo personalizzato installato sul dispositivo) non può semplicemente richiedere DE.
- Root di affidabilità hardware e Avvio verificato associate all'inizializzazione Keymaster è necessaria per garantire che le chiavi DE non siano accessibili da un sistema operativo non autorizzato.
Implementazione
Innanzitutto, app come sveglie, smartphone e funzioni di accessibilità deve essere impostato come android:directBootAware in base al ruolo Direct Avvio della documentazione per gli sviluppatori.
Supporto kernel
Il supporto del kernel per la crittografia Ext4 e F2FS è disponibile nella community Android versione 3.18 e successive. Per abilitarlo in un kernel versione 5.1: o superiore, utilizza:
CONFIG_FS_ENCRYPTION=y
Per i kernel meno recenti, usa CONFIG_EXT4_ENCRYPTION=y
se il
Il file system userdata
è Ext4 oppure utilizza
CONFIG_F2FS_FS_ENCRYPTION=y
se il dispositivo userdata
file system è F2FS.
Se il tuo dispositivo supporterà l'adozione spazio di archiviazione o utilizzeranno i metadati crittografia sulla memoria interna, abilita anche le opzioni di configurazione del kernel necessarie per la crittografia dei metadati, come descritto nella documentazione sulla crittografia dei metadati.
Oltre al supporto funzionale per la crittografia Ext4 o F2FS, sul dispositivo i produttori dovrebbero anche abilitare l'accelerazione crittografica per velocizzare la crittografia basata su file e migliorare l'esperienza utente. Ad esempio, su Sui dispositivi basati su ARM64, l'accelerazione ARMv8 CE (Cryptography Extensions) può essere abilitato impostando le seguenti opzioni di configurazione del kernel:
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_SHA2_ARM64_CE=y
Per migliorare ulteriormente le prestazioni e ridurre il consumo di energia, i produttori di dispositivi potrebbero Inoltre, valuta la possibilità di implementare hardware di crittografia in linea, cripta/decripta i dati mentre sono in viaggio verso/dal dispositivo di archiviazione. I kernel comuni di Android (versione 4.14 e successive) contengono un framework consente di utilizzare la crittografia in linea quando il supporto di driver hardware e del fornitore è disponibili. Il framework di crittografia in linea può essere abilitato impostando il metodo seguenti opzioni di configurazione del kernel:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
Se il dispositivo utilizza uno spazio di archiviazione basato su UFS, abilita anche:
CONFIG_SCSI_UFS_CRYPTO=y
Se il dispositivo utilizza uno spazio di archiviazione basato su eMMC, attiva anche:
CONFIG_MMC_CRYPTO=y
Attivazione della crittografia basata su file
Per abilitare FBE su un dispositivo, è necessario abilitarlo nella memoria interna
(userdata
) Inoltre, abilita automaticamente FBE sulle piattaforme
archiviazione; Tuttavia, il formato della crittografia sullo spazio di archiviazione adottabile potrebbe essere sostituito
se necessario.
Memoria interna
FBE viene abilitato aggiungendo l'opzione
fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]]
alla colonna fs_mgr_flags della riga fstab
per
userdata
. Questa opzione definisce il formato di crittografia
archiviazione. Contiene fino a tre parametri separati da due punti:
- Il parametro
contents_encryption_mode
definisce l'algoritmo crittografico viene utilizzato per crittografare i contenuti dei file. Può essereaes-256-xts
oadiantum
. Da Android 11 può anche essere lasciato vuoto per specificare l'algoritmo predefinito, che èaes-256-xts
. - Il parametro
filenames_encryption_mode
definisce l'algoritmo crittografico viene utilizzato per crittografare i nomi dei file. Può essereaes-256-cts
,aes-256-heh
,adiantum
oaes-256-hctr2
. Se non specificato, il valore predefinito èaes-256-cts
secontents_encryption_mode
èaes-256-xts
o aadiantum
secontents_encryption_mode
èadiantum
. - Il parametro
flags
, nuovo in Android 11, è un elenco di flag separati dal+
carattere. Sono supportati i seguenti flag:- Il flag
v1
seleziona i criteri di crittografia della versione 1. il Il flagv2
seleziona i criteri di crittografia della versione 2. Versione Due criteri di crittografia utilizzano una funzione di derivazione della chiave più sicura e flessibile. L'impostazione predefinita è v2 se Sul dispositivo con Android 11 o versioni successive. (come determinato daro.product.first_api_level
) o v1 se il dispositivo è stato avviato con Android 10 in basso. - Il flag
inlinecrypt_optimized
seleziona una crittografia ottimizzato per l'hardware di crittografia in linea che non gestire in modo efficiente grandi quantità di chiavi. A questo scopo, ricava una sola chiave di crittografia dei contenuti di file per chiave CE o DE, anziché uno per file. La generazione di IV (vettori di inizializzazione) è modificati di conseguenza. - Il flag
emmc_optimized
è simile ainlinecrypt_optimized
, ma seleziona anche un IV che limita gli IV a 32 bit. Questo flag deve includere da utilizzare su hardware di crittografia in linea conforme alle specifica JEDEC eMMC v5.2 e pertanto supporta solo IV Su altro hardware di crittografia in linea, usainlinecrypt_optimized
in alternativa. Questo flag non deve mai essere usata su unità di archiviazione basate su UFS; la specifica UFS consente l'utilizzo di IV a 64 bit. - Sui dispositivi che supportano il wrapping hardware
, il flag
wrappedkey_v0
consente l'uso di chiavi con wrapping hardware per FBE. Può essere usato solo in combinazione con l'opzione di montaggioinlinecrypt
e ilinlinecrypt_optimized
oemmc_optimized
flag. - Il flag
dusize_4k
forza la dimensione dell'unità di dati di crittografia a 4096 byte anche se la dimensione del blocco del file system è diversa da 4096 byte. La dimensione dell'unità di dati di crittografia è la granularità la crittografia dei contenuti. Questo flag è disponibile da Android 15. Questo flag deve essere usato solo per abilitare l'utilizzo di hardware di crittografia in linea che non supporta i dati unità più grandi di 4096 byte, su un dispositivo che usa una dimensione pagina più grande di 4096 byte e che utilizza il file system f2fs.
- Il flag
Se non utilizzi hardware di crittografia in linea, l'impostazione consigliata per la maggior parte
dispositivi sono fileencryption=aes-256-xts
. Se utilizzi la modalità in linea
l'impostazione consigliata per la maggior parte dei dispositivi è
fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
(o fileencryption=::inlinecrypt_optimized
). Attivato
dispositivi senza alcuna forma di accelerazione AES, è possibile usare Adiantum al posto dell'algoritmo AES
impostazione fileencryption=adiantum
.
Da Android 14, AES-HCTR2 è la modalità preferita per la crittografia dei nomi file.
per i dispositivi con istruzioni per la crittografia accelerata. Tuttavia, solo i kernel Android più recenti supportano
AES-HCTR2. In una futura versione di Android, è prevista la modalità predefinita per i nomi file.
la crittografia. Se il kernel supporta AES-HCTR2, può essere abilitato per la crittografia dei nomi file
Impostazione di filenames_encryption_mode
su aes-256-hctr2
. Nel caso più semplice,
questo viene fatto con fileencryption=aes-256-xts:aes-256-hctr2
.
Sui dispositivi con Android 10 o versioni precedenti,
fileencryption=ice
consente inoltre di specificare l'utilizzo dei
FSCRYPT_MODE_PRIVATE
modalità di crittografia dei contenuti dei file. Questa modalità è
non implementato dai kernel comuni di Android, ma potrebbe essere implementato
che usano patch del kernel personalizzate. Il formato su disco prodotto da questa modalità
era specifico del fornitore. Sui dispositivi che vengono lanciati con Android
11 o successive, questa modalità non è più consentita e
è necessario utilizzare
il formato standard della crittografia.
Per impostazione predefinita, la crittografia dei contenuti dei file viene eseguita utilizzando
l'API crittografica. Se invece vuoi utilizzare hardware di crittografia in linea,
aggiungi l'opzione di montaggio inlinecrypt
. Ad esempio,
La riga fstab
potrebbe avere il seguente aspetto:
/dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,errors=panic,inlinecrypt wait,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
Spazio di archiviazione utilizzabile
Da Android 9, FBE e può essere usato insieme.
Specificare l'opzione fstab fileencryption
per
Inoltre, userdata
attiva automaticamente sia FBE sia la crittografia dei metadati sui modelli
archiviazione. Tuttavia, puoi eseguire l'override dei formati di crittografia dei metadati e/o FBE su
e adottare lo spazio di archiviazione da adottare impostando le proprietà
PRODUCT_PROPERTY_OVERRIDES
.
Sui dispositivi con Android 11 o versioni successive, usa le seguenti proprietà:
ro.crypto.volume.options
(novità di Android 11) seleziona il formato di crittografia FBE su di archiviazione utilizzabili. Ha la stessa sintassi dell'argomentofileencryption
, che utilizza le stesse impostazioni predefinite. Leggi i consigli perfileencryption
qui sopra su cosa fare usare qui.ro.crypto.volume.metadata.encryption
seleziona i metadati per la crittografia lato client sullo spazio di archiviazione adottabile. Consulta i metadati documentazione sulla crittografia.
Sui dispositivi con Android 10 o versioni precedenti, usa le seguenti proprietà:
ro.crypto.volume.contents_mode
seleziona i contenuti modalità di crittografia. Equivale al primo campo separato da due punti diro.crypto.volume.options
.ro.crypto.volume.filenames_mode
seleziona i nomi file modalità di crittografia. Equivale al secondo campo separato da due punti diro.crypto.volume.options
, ad eccezione dell'impostazione predefinita sui dispositivi lanciato con Android 10 o versioni precedenti èaes-256-heh
. Sulla maggior parte dei dispositivi, questo deve essere sostituito inaes-256-cts
.ro.crypto.fde_algorithm
ero.crypto.fde_sector_size
seleziona la crittografia dei metadati disponibile sullo spazio di archiviazione adottabile. Consulta i metadati documentazione sulla crittografia.
Integrazione con Keymaster
Keymaster HAL deve essere avviato come parte della classe early_hal
.
Questo perché FBE richiede che Keymaster sia pronto a gestire le richieste
Fase di avvio di post-fs-data
, ovvero quando vold
è configurato
le chiavi iniziali.
Esclusione di directory
init
applica la chiave DE del sistema a
tutte le directory di primo livello di /data
, tranne le directory che
non devono essere criptati, ad esempio la directory che contiene la chiave DE del sistema
e quelle che contengono le directory CE o DE dell'utente. Chiavi di crittografia
e non possono essere sostituite dalle sottodirectory.
In Android 11 e versioni successive, la chiave
init
si applica alle directory può essere controllato
Argomento encryption=<action>
a mkdir
negli script di inizializzazione. I valori possibili di <action>
sono
documentato
README per la lingua init di Android.
In Android 10, le azioni di crittografia di init
sono stati impostati come hardcoded nella seguente posizione:
/system/extras/libfscrypt/fscrypt_init_extensions.cpp
In Android 9 e versioni precedenti, la posizione era:
/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp
È possibile aggiungere eccezioni per impedire che determinate directory criptati. Se vengono apportate modifiche di questo tipo, il dispositivo il produttore deve includere Criteri SELinux che concedono l'accesso solo ai delle applicazioni che devono utilizzare la directory non criptata. Dovrebbero essere escluse tutte per le applicazioni non attendibili.
L'unico caso d'uso accettabile noto in merito è il supporto di OTA precedenti le funzionalità di machine learning.
Supporto dell'avvio diretto nelle applicazioni di sistema
Informare le applicazioni con Avvio diretto
Per facilitare la migrazione rapida delle app di sistema, esistono due nuovi attributi che
possono essere impostate
a livello di applicazione. La
L'attributo defaultToDeviceProtectedStorage
è disponibile solo per
app di sistema. L'attributo directBootAware
è disponibile per tutti.
<application android:directBootAware="true" android:defaultToDeviceProtectedStorage="true">
L'attributo directBootAware
a livello di applicazione è un modo breve per contrassegnare
tutti i componenti dell'app tenendo in considerazione la crittografia.
L'attributo defaultToDeviceProtectedStorage
reindirizza il valore predefinito
posizione di archiviazione dell'app in modo che punti allo spazio di archiviazione DE anziché allo spazio di archiviazione CE.
Le app di sistema che utilizzano questo flag devono controllare attentamente tutti i dati archiviati nel
posizione e modificare i percorsi dei dati sensibili per utilizzare l'archiviazione CE. Dispositivo
che utilizzano questa opzione devono esaminare attentamente i dati che
per assicurarti che non contenga informazioni personali.
Quando l'esecuzione è in questa modalità, le seguenti API di sistema vengono disponibile per gestire in modo esplicito un contesto supportato da archiviazione CE quando necessario, sono equivalenti alle controparti protette dal dispositivo.
Context.createCredentialProtectedStorageContext()
Context.isCredentialProtectedStorage()
Supportare più utenti
Ogni utente in un ambiente multiutente riceve una chiave di crittografia separata. Ogni utente ottiene due chiavi: una DE e una CE. L'utente 0 deve prima accedere al dispositivo così com'è per un utente speciale. È pertinente per il dispositivo Utilizzi per gli amministratori.
Le applicazioni Crypto-aware interagiscono tra gli utenti in questo modo:
INTERACT_ACROSS_USERS
e INTERACT_ACROSS_USERS_FULL
consentono a un'applicazione di agire su tutti gli utenti sul dispositivo. Tuttavia,
potranno accedere solo alle directory con crittografia CE per gli utenti che
è già sbloccato.
Un'applicazione potrebbe essere in grado di interagire liberamente tra le aree geografiche della Germania, ma un solo utente sbloccato non significa che tutti gli utenti sul dispositivo sono sbloccati. La applicazione deve verificare questo stato prima di tentare di accedere a tali aree.
Ogni ID utente del profilo di lavoro riceve anche due chiavi: DE e CE. La sfida "Quando il lavoro" viene soddisfatto, l'utente del profilo è sbloccato e il Keymaster (in TEE) può fornire chiave TEE del profilo.
Gestione degli aggiornamenti
La partizione di ripristino non è in grado di accedere allo spazio di archiviazione con protezione DE sul la partizione dei dati utente. I dispositivi che implementano FBE sono vivamente consigliati per il supporto OTA tramite aggiornamenti di sistema A/B. Come l'OTA può essere applicata durante il normale funzionamento, non c'è bisogno di ripristino accedere ai dati sull'unità criptata.
Quando si utilizza una soluzione OTA precedente, che richiede il ripristino per accedere al file OTA
sulla partizione userdata
:
- Crea una directory di primo livello (ad esempio
misc_ne
) nellauserdata
partizione. - Configura questa directory di primo livello in modo che non sia criptata (vedi Esclusione delle directory).
- Crea una directory all'interno della directory di primo livello in cui inserire i pacchetti OTA.
- Aggiungi una regola SELinux e contesti dei file per controllare l'accesso a questa directory e contenuti. Deve essere eseguito solo il processo o le applicazioni che ricevono aggiornamenti OTA possono leggere e scrivere in questa directory. Nessun'altra domanda o nessun altro processo dovrebbe avere accesso a questa directory.
Convalida
Per assicurarti che la versione implementata della funzionalità funzioni come previsto, prima esegui i molti test di crittografia CTS, come DirectBootHostTest e EncryptionTest.
Se il dispositivo utilizza Android 11 o versioni successive, esegui anche vts_kernel_encryption_test:
atest vts_kernel_encryption_test
oppure:
vts-tradefed run vts -m vts_kernel_encryption_test
Inoltre, i produttori di dispositivi possono eseguire i seguenti test manuali. Su un dispositivo con FBE abilitato:
- Verifica che
ro.crypto.state
esista- Assicurati che
ro.crypto.state
sia criptato
- Assicurati che
- Verifica che
ro.crypto.type
esista- Assicurati che
ro.crypto.type
sia impostato sufile
- Assicurati che
Inoltre, i tester possono verificare che lo spazio di archiviazione CE sia bloccato prima che il dispositivo venga
è stato sbloccato per la prima volta dall'avvio. A questo scopo, utilizza un
userdebug
o eng
build, imposta un PIN, una sequenza oppure
password sull'utente principale e riavvia il dispositivo. Prima di sbloccare il dispositivo,
esegui questo comando per verificare lo spazio di archiviazione CE dell'utente principale. Se
il dispositivo utilizza Headless System
Modalità utente (la maggior parte dei dispositivi automobilistici), l'utente principale è l'utente 10, quindi esegui:
adb root; adb shell ls /data/user/10
Su altri dispositivi (la maggior parte dei dispositivi non automobilistici), l'utente principale è l'utente 0, quindi esegui:
adb root; adb shell ls /data/user/0
Verifica che i nomi file elencati siano codificati in Base64, indicando che sono crittografati e la chiave per decriptarli non è ancora disponibile. Se i nomi file sono elencati in testo non crittografato, significa che si è verificato un problema.
I produttori di dispositivi sono inoltre invitati a esplorare i test upstream di Linux per fscrypt sui propri dispositivi oppure i kernel. Questi test fanno parte della suite di test del file system xfstests. Tuttavia, questi test upstream non sono ufficialmente supportati da Android.
Dettagli implementazione AOSP
Questa sezione fornisce dettagli sull'implementazione di AOSP e descrive come la crittografia basata su file. Non dovrebbe essere necessario per i produttori di dispositivi di apportare modifiche qui per utilizzare FBE e Avvio diretto sui loro dispositivi.
crittografia fscrypt
L'implementazione di AOSP utilizza "fscrypt" crittografia (supportata da ext4 e f2fs) nel kernel e di solito è configurato per:
- Cripta i contenuti dei file con AES-256 in modalità XTS
- Cripta i nomi dei file con AES-256 in modalità CBC-CTS
Anche la crittografia Adiantum supportati. Quando la crittografia di Adiantum è abilitata, sia i contenuti che i nomi dei file sono criptati con Adiantum.
fscrypt supporta due versioni dei criteri di crittografia: versione 1 e versione 2. La versione 1 è deprecata e i requisiti CDD per i dispositivi lanciati con Android 11 e versioni successive sono compatibili solo con la versione 2. I criteri di crittografia della versione 2 utilizzano HKDF-SHA512 per ricavare le chiavi di crittografia effettive dalle chiavi fornite dallo spazio utente.
Per ulteriori informazioni su fscrypt, consulta la documentazione relativa ai kernel upstream.
Classi di archiviazione
Nella tabella seguente sono elencate le chiavi FBE e le directory in cui proteggono maggiormente dettaglio:
Classe di archiviazione | Descrizione | Elenchi |
---|---|---|
Non criptato | Directory in /data che non possono essere o non devono essere
protetta da FBE. Sui dispositivi che utilizzano metadati
crittografia, queste directory non sono realmente decriptate, ma piuttosto
sono protetti dalla chiave di crittografia dei metadati, che equivale
Sistema DE. |
|
Sistema DE | Dati criptati sul dispositivo non associati a un determinato utente |
|
Per avvio | File di sistema temporanei che non devono permanere dopo un riavvio | /data/per_boot |
Utente CE (interno) | Dati crittografati con credenziali per utente nella memoria interna |
|
Utente DE (interno) | Dati criptati sul dispositivo per utente nella memoria interna |
|
CE dell'utente (adottabile) | Dati criptati con credenziali per utente nello spazio di archiviazione adottabile |
|
Utente DE (adottabile) | Dati criptati sul dispositivo per utente nello spazio di archiviazione adottabile |
|
Archiviazione e protezione delle chiavi
Tutte le chiavi FBE sono gestite da vold
e archiviate sul disco con crittografia,
tranne la chiave per avvio, che non è archiviata. La tabella seguente
elenca le posizioni in cui sono memorizzate le varie chiavi FBE:
Tipo di chiave | Posizione della chiave | Classe di archiviazione della località della chiave |
---|---|---|
Chiave DE del sistema | /data/unencrypted |
Non criptato |
Chiavi CE (interne) utente | /data/misc/vold/user_keys/ce/${user_id} |
Sistema DE |
Chiavi DE (interne) dell'utente | /data/misc/vold/user_keys/de/${user_id} |
Sistema DE |
Chiavi CE (adottabili) dell'utente | /data/misc_ce/${user_id}/vold/volume_keys/${volume_uuid} |
Utente CE (interno) |
Chiavi DE (adottabili) dell'utente | /data/misc_de/${user_id}/vold/volume_keys/${volume_uuid} |
Utente DE (interno) |
Come illustrato nella tabella precedente, la maggior parte delle chiavi FBE è archiviata in directory sono criptati da un'altra chiave FBE. Le chiavi non possono essere sbloccate fino a quando lo spazio di archiviazione che li contiene è stato sbloccato.
vold
applica inoltre un livello di crittografia a tutte le chiavi FBE. Ogni chiave
oltre alle chiavi CE per l'archiviazione interna, è crittografata con AES-256-GCM usando
La chiave archivio chiavi non sia
esposto all'esterno del TEE. Ciò garantisce che le chiavi FBE non possano essere sbloccate a meno che non venga
affidabile, come previsto dall'Avvio verificato. Rollback
resistenza è richiesta anche sulla chiave dell'archivio chiavi, che consente alle chiavi FBE di
i dispositivi in cui Keymaster supporta la resistenza al rollback. Come
un fallback best effort per quando non è disponibile la resistenza al rollback,
hash di 16384 byte casuali archiviato nel file secdiscardable
archiviato
e la chiave sono usati come ID applicazione
del token della chiave dell'archivio chiavi. Tutti questi byte devono essere recuperati per recuperare un
Tasto FBE.
Le chiavi CE per l'archiviazione interna ricevono un livello di protezione più elevato che garantisce non possono essere sbloccati senza conoscere la schermata di blocco dell'utente Knowledge Factor (LSKF) (PIN, sequenza o password), una di reimpostazione del passcode oppure sia la chiave lato client sia quella lato server per un Operazione Riprendi al riavvio. È possibile creare token di reimpostazione del passcode solo per profili di lavoro e pienamente dispositivi gestiti.
A questo scopo, vold
cripta ogni chiave CE per l'archiviazione interna
utilizzando una chiave AES-256-GCM derivata dalla password sintetica dell'utente.
La password sintetica è un segreto crittografico immutabile ad alta entropia
generati in modo casuale per ciascun utente. LockSettingsService
pollici
system_server
gestisce la password sintetica e i modi in cui
è protetto.
Per proteggere la password sintetica con l'LSKF:
LockSettingsService
prima estende la LSKF facendola passare attraverso
scrypt
, con targeting per un tempo di circa 25 ms e una
memoria utilizzata di circa 2 MiB. Poiché le LSKF di solito sono brevi, questo passaggio
non offre molta sicurezza. Il livello principale di sicurezza è l'
Element (SE) o limitazione di frequenza applicata da TEE descritta di seguito.
Se il dispositivo dispone di Secure Element (SE), LockSettingsService
mappa l'LSKF allungata a un segreto casuale ad alta entropia memorizzata nella SE utilizzando
Weaver HAL. LockSettingsService
quindi cripta
la password sintetica due volte: la prima con una chiave software derivata
LSKF ampliato e il segreto di Weaver, e il secondo con un archivio chiavi non associato all'autorizzazione
chiave. Ciò fornisce la limitazione di frequenza applicata dalla SE delle ipotesi LSKF.
Se il dispositivo non dispone di un SE, allora LockSettingsService
utilizza l'LSKF allungato come Gatekeeper
password. LockSettingsService
cripta la password sintetica
due volte: la prima con una chiave software derivata dall'LSKF ampliato e l'hash di
il secondo con una chiave dell'archivio chiavi associata all'autenticazione
Registrazione del gatekeeper. Ciò fornisce una limitazione di frequenza applicata dal TEE delle ipotesi LSKF.
Quando l'LSKF viene modificato, LockSettingsService
elimina tutti
informazioni associate all'associazione della password sintetica alla vecchia
LSKF Sui dispositivi che supportano chiavi di archivi chiavi Weaver o resistenti al rollback,
garantisce l'eliminazione sicura dell'associazione precedente. Per questo motivo, le protezioni
descritti qui vengono applicati anche quando l'utente non dispone di una LSKF.