Możliwość przechowywania

Android zawsze obsługiwał zewnętrzne akcesoria pamięci masowej (takie jak karty SD), ale te akcesoria były historycznie ograniczone do prostego przechowywania plików, ze względu na ich oczekiwaną nietrwałość i minimalną ochronę danych oferowaną w tradycyjnej pamięci zewnętrznej . W systemie Android 6.0 wprowadzono możliwość przyjęcia zewnętrznych nośników pamięci, aby działały jak pamięć wewnętrzna.

Po przyjęciu zewnętrznego nośnika pamięci jest on sformatowany i zaszyfrowany, aby działał tylko z jednym urządzeniem z systemem Android naraz. Ponieważ media są silnie powiązane z urządzeniem z Androidem, które je zaadoptowało, może bezpiecznie przechowywać zarówno aplikacje, jak i prywatne dane wszystkich użytkowników.

Gdy użytkownicy wstawiają nowe nośniki pamięci (takie jak karta SD) w możliwej do zaadoptowania lokalizacji, system Android pyta ich, jak chcą korzystać z tych nośników. Mogą wybrać nośnik, który formatuje i szyfruje, lub mogą nadal używać go bez zmian do prostego przechowywania plików. Jeśli zdecydują się na przyjęcie, platforma zaoferuje migrację zawartości podstawowej współdzielonej pamięci masowej (zazwyczaj montowanej w /sdcard ) do nowo przyjętego nośnika, zwalniając cenne miejsce w pamięci wewnętrznej. W przeciwieństwie do tradycyjnej pamięci masowej, która jest ograniczona do 2 TB ze względu na użycie MBR , możliwa do przyjęcia pamięć używa GPT , a zatem ma limit przechowywania plików wynoszący ~9ZB.

Aplikacje można umieszczać na przyjętych nośnikach pamięci tylko wtedy, gdy programista wskazał obsługę za pomocą atrybutu android:installLocation . Nowe instalacje obsługiwanych aplikacji są automatycznie umieszczane na urządzeniu pamięci masowej z największą ilością wolnego miejsca, a użytkownicy mogą przenosić obsługiwane aplikacje między urządzeniami pamięci masowej w aplikacji Ustawienia . Aplikacje przeniesione do adoptowanych multimediów są zapamiętywane podczas wysuwania multimediów i powracają po ponownym włożeniu multimediów.

Bezpieczeństwo

Platforma losowo generuje klucze szyfrowania dla każdego przyjętego urządzenia i przechowuje je w pamięci wewnętrznej urządzenia z systemem Android. To skutecznie sprawia, że ​​przyjęte nośniki są tak samo bezpieczne jak pamięć wewnętrzna. Klucze są skojarzone z zaadoptowanymi urządzeniami na podstawie identyfikatora GUID zaadoptowanej partycji.

Jeśli urządzenie jest skonfigurowane do korzystania z szyfrowania opartego na plikach (FBE) w swojej pamięci wewnętrznej, wówczas możliwa do przyjęcia pamięć używa zarówno szyfrowania FBE, jak i metadanych . W przeciwnym razie magazyn możliwy do przyjęcia używa szyfrowania całego dysku (FDE).

Układ adoptowanego urządzenia na dysku ściśle odzwierciedla wewnętrzną partycję danych, w tym etykiety SELinux itp. Gdy na urządzeniu z systemem Android jest obsługiwana obsługa wielu użytkowników, przyjęte urządzenie pamięci masowej obsługuje również wielu użytkowników z tym samym poziomem izolacji, co wewnętrzne magazynowanie.

Ponieważ zawartość zaadoptowanego urządzenia magazynującego jest silnie powiązana z urządzeniem z systemem Android, które je zaadoptowało, klucze szyfrowania nie powinny być możliwe do wyodrębnienia z urządzenia nadrzędnego, a zatem nie można zainstalować urządzenia magazynującego w innym miejscu.

Jeśli Twoje urządzenie korzysta z FBE, zapoznaj się z dokumentacją FBE i dokumentacją szyfrowania metadanych, aby dowiedzieć się, jak skonfigurować FBE i szyfrowanie metadanych w przystosowanej pamięci masowej.

Wydajność i stabilność

Aby uniknąć przypadkowej utraty lub uszkodzenia danych, należy brać pod uwagę tylko zewnętrzne nośniki pamięci w stabilnych miejscach, takich jak gniazdo wewnątrz komory baterii lub za osłoną ochronną. W szczególności urządzenia USB podłączone do telefonu lub tabletu nigdy nie powinny być brane pod uwagę do przyjęcia. Jednym z powszechnych wyjątków byłby zewnętrzny dysk USB podłączony do urządzenia w stylu telewizora, ponieważ cały telewizor jest zwykle instalowany w stabilnym miejscu.

Gdy użytkownik adoptuje nowe urządzenie pamięci masowej, platforma uruchamia test porównawczy i porównuje jego wydajność z pamięcią wewnętrzną. Jeśli przyjęte urządzenie jest znacznie wolniejsze niż pamięć wewnętrzna, platforma ostrzega użytkownika o możliwym pogorszeniu jakości. Ten test porównawczy został wyprowadzony z rzeczywistego zachowania we/wy popularnych aplikacji na Androida. Obecnie implementacja AOSP będzie ostrzegać użytkowników tylko po przekroczeniu jednego progu, ale producenci urządzeń mogą to dalej dostosować, na przykład całkowicie odrzucić przyjęcie, jeśli karta jest bardzo wolna.

Przyjęte urządzenia muszą być sformatowane za pomocą systemu plików, który obsługuje uprawnienia POSIX i rozszerzone atrybuty, takie jak ext4 lub f2fs . W celu uzyskania optymalnej wydajności zalecany jest system plików f2fs dla urządzeń pamięci masowej opartych na pamięci flash.

Podczas okresowej konserwacji w stanie bezczynności platforma wydaje FI_TRIM na zaadoptowane nośniki, tak jak ma to miejsce w przypadku pamięci wewnętrznej. Obecna specyfikacja karty SD nie obsługuje polecenia DISCARD ; ale zamiast tego jądro powraca do polecenia ERASE , które oprogramowanie układowe karty SD może użyć do celów optymalizacji.

Testowanie

Aby sprawdzić, czy pamięć możliwa do zaadoptowania działa, uruchom ten test CTS:

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

Aby zweryfikować zachowanie dysków USB i kart SD, gdy urządzenie nie ma wbudowanego gniazda lub gdy złącze USB jest używane do aktywnego połączenia adb, użyj:

adb shell sm set-virtual-disk true