Dopuszczalne miejsce do przechowywania

Android zawsze obsługiwał zewnętrzne akcesoria do przechowywania danych (takie jak karty SD), ale w przeszłości te akcesoria ograniczały się do prostego przechowywania plików ze względu na ich oczekiwaną nietrwałość i minimalną ochronę danych oferowaną w przypadku tradycyjnej pamięci zewnętrznej . W systemie Android 6.0 wprowadzono możliwość wykorzystania zewnętrznych nośników pamięci, które działają jak pamięć wewnętrzna.

W przypadku zastosowania zewnętrznego nośnika pamięci jest on sformatowany i zaszyfrowany tak, aby działał jednocześnie tylko z jednym urządzeniem z systemem Android. Ponieważ multimedia są silnie powiązane z urządzeniem z Androidem, które je zaadoptowało, mogą bezpiecznie przechowywać zarówno aplikacje, jak i prywatne dane wszystkich użytkowników.

Kiedy użytkownicy wkładają nowy nośnik pamięci (taki jak karta SD) w odpowiednie miejsce, Android pyta ich, w jaki sposób chcą korzystać z multimediów. Mogą zdecydować się na przyjęcie nośnika, który go sformatuje i zaszyfruje, lub mogą nadal używać go w niezmienionym stanie do prostego przechowywania plików. Jeśli zdecydują się na adopcję, platforma oferuje migrację zawartości podstawowej pamięci współdzielonej (zwykle montowanej w /sdcard ) na nowo przyjęte nośniki, 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 , pamięć adaptacyjna wykorzystuje GPT i dlatego limit przechowywania plików wynosi ~ 9 ZB.

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 na przyjęte nośniki są zapamiętywane po wyrzuceniu nośnika i powracają po jego ponownym włożeniu.

Bezpieczeństwo

Platforma losowo generuje klucze szyfrujące dla każdego przyjętego urządzenia i przechowuje je w pamięci wewnętrznej urządzenia z systemem Android. Dzięki temu przyjęte nośniki są tak samo bezpieczne, jak pamięć wewnętrzna. Klucze są powiązane z przyjętymi urządzeniami w oparciu o przyjęty identyfikator GUID partycji.

Jeśli urządzenie jest skonfigurowane do korzystania z szyfrowania opartego na plikach (FBE) w swojej pamięci wewnętrznej, wówczas pamięć adaptowalna wykorzystuje zarówno szyfrowanie FBE, jak i metadanych . W przeciwnym razie pamięć adaptowalna wykorzystuje szyfrowanie całego dysku (FDE).

Układ na dysku przyjętego urządzenia ściśle odzwierciedla wewnętrzną partycję danych, łącznie z etykietami SELinux itp. Gdy na urządzeniu z systemem Android obsługiwana jest 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 składowanie.

Ponieważ zawartość adoptowanego urządzenia pamięci masowej jest silnie powiązana z urządzeniem z systemem Android, które je zaadoptowało, klucze szyfrowania nie powinny dać się wyodrębnić z urządzenia nadrzędnego, w związku z czym urządzenia magazynującego nie można zamontować w innym miejscu.

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

Wydajność i stabilność

Aby uniknąć przypadkowej utraty lub uszkodzenia danych, przy adopcji należy brać pod uwagę wyłącznie zewnętrzne nośniki pamięci umieszczone w stabilnych lokalizacjach, np. w gnieździe wewnątrz komory baterii lub za osłoną ochronną. W szczególności nie należy brać pod uwagę adopcji urządzeń USB podłączonych do telefonu lub tabletu. Częstym wyjątkiem jest zewnętrzny dysk USB podłączony do urządzenia przypominającego telewizor, ponieważ zazwyczaj cały telewizor jest instalowany w stabilnym miejscu.

Kiedy użytkownik adoptuje nowe urządzenie pamięci masowej, platforma przeprowadza 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 działania. Ten test porównawczy powstał na podstawie rzeczywistego zachowania we/wy popularnych aplikacji na Androida. Obecnie implementacja AOSP będzie ostrzegać użytkowników jedynie powyżej jednego progu, ale producenci urządzeń mogą to jeszcze bardziej dostosować, na przykład całkowicie odrzucić adopcję, jeśli karta jest wyjątkowo wolna.

Przyjęte urządzenia muszą być sformatowane przy użyciu systemu plików obsługującego uprawnienia POSIX i rozszerzone atrybuty, takie jak ext4 lub f2fs . Aby zapewnić optymalną wydajność, w przypadku urządzeń pamięci masowej typu flash zalecany jest system plików f2fs .

Podczas okresowej konserwacji bezczynności platforma wysyła FI_TRIM do przyjętych nośników, tak jak ma to miejsce w przypadku pamięci wewnętrznej. Bieżąca specyfikacja karty SD nie obsługuje polecenia DISCARD ; ale zamiast tego jądro powraca do polecenia ERASE , które oprogramowanie sprzętowe karty SD może wybrać do celów optymalizacji.

Testowanie

Aby sprawdzić, czy pamięć adaptacyjna 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