Archiviazione adottabile

Android ha sempre supportato accessori di archiviazione esterni (come le schede SD), ma questi accessori sono stati storicamente limitati alla semplice archiviazione di file, a causa della loro prevista impermanenza e della minima protezione dei dati offerta alla tradizionale archiviazione esterna . Android 6.0 ha introdotto la possibilità di adottare supporti di archiviazione esterni per fungere da memoria interna.

Quando viene adottato un supporto di archiviazione esterno, viene formattato e crittografato per funzionare solo con un singolo dispositivo Android alla volta. Poiché il supporto è fortemente legato al dispositivo Android che lo ha adottato, può archiviare in sicurezza sia app che dati privati ​​per tutti gli utenti.

Quando gli utenti inseriscono un nuovo supporto di archiviazione (come una scheda SD) in una posizione adottabile, Android chiede loro come desiderano utilizzare il supporto. Possono scegliere di adottare il supporto, che lo formatta e lo crittografa, oppure possono continuare a usarlo così com'è per la semplice archiviazione di file. Se scelgono di adottare, la piattaforma offre la migrazione dei contenuti di archiviazione condivisi principali (in genere montati su /sdcard ) sul supporto di nuova adozione, liberando spazio prezioso sulla memoria interna. A differenza dell'archiviazione tradizionale, che è limitata a 2 TB a causa dell'utilizzo di MBR , l'archiviazione adottabile utilizza GPT e pertanto ha un limite di archiviazione file di ~9ZB.

Le app possono essere posizionate sul supporto di archiviazione adottato solo quando lo sviluppatore ha indicato il supporto tramite l'attributo android:installLocation . Le nuove installazioni delle app supportate vengono automaticamente posizionate sul dispositivo di archiviazione con la maggior quantità di spazio disponibile e gli utenti possono spostare le app supportate tra i dispositivi di archiviazione nell'app Impostazioni . Le app spostate sul supporto adottato vengono ricordate mentre il supporto viene espulso e ritornano quando il supporto viene reinserito.

Sicurezza

La piattaforma genera in modo casuale chiavi di crittografia per ogni dispositivo adottato e le archivia nella memoria interna del dispositivo Android. Ciò rende effettivamente il supporto adottato sicuro quanto la memoria interna. Le chiavi sono associate ai dispositivi adottati in base al GUID della partizione adottata.

Se il dispositivo è configurato per utilizzare la crittografia basata su file (FBE) nella memoria interna, la memoria adottabile utilizza sia la crittografia FBE che quella dei metadati . In caso contrario, l'archiviazione adottabile utilizza la crittografia dell'intero disco (FDE).

Il layout su disco del dispositivo adottato rispecchia fedelmente la partizione dati interna, comprese le etichette SELinux, ecc. Quando il multiutente è supportato sul dispositivo Android, il dispositivo di archiviazione adottato supporta anche il multiutente con lo stesso livello di isolamento dell'interno Conservazione.

Poiché i contenuti di un dispositivo di archiviazione adottato sono fortemente legati al dispositivo Android che lo ha adottato, le chiavi di crittografia non devono essere estraibili dal dispositivo principale e quindi il dispositivo di archiviazione non può essere montato altrove.

Se il tuo dispositivo utilizza FBE, consulta la documentazione FBE e la documentazione sulla crittografia dei metadati per come configurare FBE e la crittografia dei metadati sullo spazio di archiviazione adottabile.

Prestazioni e stabilità

Solo i supporti di archiviazione esterni in posizioni stabili, come uno slot all'interno di un vano batteria o dietro un coperchio protettivo, dovrebbero essere presi in considerazione per l'adozione per evitare la perdita o il danneggiamento accidentale dei dati. In particolare, i dispositivi USB collegati a un telefono o tablet non dovrebbero mai essere presi in considerazione per l'adozione. Un'eccezione comune potrebbe essere un'unità USB esterna collegata a un dispositivo in stile TV, poiché l'intera TV è generalmente installata in una posizione stabile.

Quando un utente adotta un nuovo dispositivo di archiviazione, la piattaforma esegue un benchmark e confronta le sue prestazioni con l'archiviazione interna. Se il dispositivo adottato è significativamente più lento della memoria interna, la piattaforma avverte l'utente di un'esperienza possibilmente degradata. Questo benchmark è stato derivato dal comportamento I/O effettivo delle popolari app Android. Attualmente, l'implementazione AOSP avviserà gli utenti solo oltre una singola soglia, ma i produttori di dispositivi potrebbero adattarla ulteriormente, ad esempio rifiutando completamente l'adozione se la scheda è estremamente lenta.

I dispositivi adottati devono essere formattati con un filesystem che supporti i permessi POSIX e gli attributi estesi, come ext4 o f2fs . Per prestazioni ottimali, il filesystem f2fs è consigliato per i dispositivi di archiviazione basati su flash.

Quando si esegue la manutenzione periodica inattiva, la piattaforma FI_TRIM al supporto adottato proprio come fa per la memoria interna. L'attuale specifica della scheda SD non supporta il comando DISCARD ; ma il kernel invece ricorre al comando ERASE , che il firmware della scheda SD può scegliere di utilizzare per scopi di ottimizzazione.

Test

Per verificare che lo spazio di archiviazione adottabile funzioni, esegui questo test CTS:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

Per verificare il comportamento delle unità USB e delle schede SD quando un dispositivo non dispone di uno slot integrato o quando il connettore USB viene utilizzato per una connessione adb attiva, utilizzare:

adb shell sm set-virtual-disk true