Anpassbare Aufbewahrung

Android hat seit jeher externes Speicherzubehör (z. B. SD-Karten) unterstützt, aber dieses Zubehör war in der Vergangenheit aufgrund seiner erwarteten Vergänglichkeit und des minimalen Datenschutzes, den herkömmliche externe Speicher bieten, auf die einfache Dateispeicherung beschränkt. Mit Android 6.0 wurde die Möglichkeit eingeführt, externe Speichermedien so zu nutzen , dass sie wie interne Speicher fungieren.

Wenn externe Speichermedien verwendet werden, werden diese so formatiert und verschlüsselt, dass sie jeweils nur mit einem einzigen Android-Gerät funktionieren. Da das Medium stark an das Android-Gerät gebunden ist, das es verwendet hat, kann es sowohl Apps als auch private Daten für alle Benutzer sicher speichern.

Wenn Benutzer neue Speichermedien (z. B. eine SD-Karte) an einem geeigneten Ort einlegen, werden sie von Android gefragt, wie sie die Medien verwenden möchten. Sie haben die Wahl, das Medium zu übernehmen, es zu formatieren und zu verschlüsseln, oder es unverändert zur einfachen Dateispeicherung weiterzuverwenden. Wenn sie sich für die Einführung entscheiden, bietet die Plattform an, die primären freigegebenen Speicherinhalte (normalerweise unter /sdcard gemountet) auf die neu übernommenen Medien zu migrieren und so wertvollen Speicherplatz im internen Speicher freizugeben. Im Gegensatz zu herkömmlichem Speicher, der aufgrund der Verwendung von MBR auf 2 TB begrenzt ist, verwendet adoptierbarer Speicher GPT und hat daher ein Dateispeicherlimit von ~9 ZB.

Apps können nur dann auf übernommenen Speichermedien platziert werden, wenn der Entwickler die Unterstützung über das Attribut android:installLocation angegeben hat. Neuinstallationen unterstützter Apps werden automatisch auf dem Speichergerät mit dem meisten freien Speicherplatz abgelegt, und Benutzer können unterstützte Apps in der App „Einstellungen“ zwischen Speichergeräten verschieben. Auf übernommene Medien verschobene Apps werden beim Auswerfen des Mediums gespeichert und kehren zurück, wenn das Medium wieder eingelegt wird.

Sicherheit

Die Plattform generiert nach dem Zufallsprinzip Verschlüsselungsschlüssel für jedes übernommene Gerät und speichert sie im internen Speicher des Android-Geräts. Dadurch werden die verwendeten Medien effektiv genauso sicher wie der interne Speicher. Schlüssel werden übernommenen Geräten basierend auf der übernommenen Partitions-GUID zugeordnet.

Wenn das Gerät für die Verwendung der dateibasierten Verschlüsselung (FBE) für seinen internen Speicher konfiguriert ist, verwendet der anpassbare Speicher sowohl FBE als auch Metadatenverschlüsselung . Andernfalls verwendet der anpassbare Speicher die vollständige Festplattenverschlüsselung (FDE).

Das Festplattenlayout des übernommenen Geräts spiegelt weitgehend die interne Datenpartition wider, einschließlich SELinux-Labels usw. Wenn Mehrbenutzer auf dem Android-Gerät unterstützt wird, unterstützt das übernommene Speichergerät auch Mehrbenutzer mit demselben Isolationsgrad wie intern Lagerung.

Da der Inhalt eines übernommenen Speichergeräts stark an das Android-Gerät gebunden ist, das es übernommen hat, sollten die Verschlüsselungsschlüssel nicht vom übergeordneten Gerät extrahiert werden können und das Speichergerät daher nicht an anderer Stelle bereitgestellt werden können.

Wenn Ihr Gerät FBE verwendet, lesen Sie in der FBE-Dokumentation und der Metadatenverschlüsselungsdokumentation nach, wie Sie FBE und Metadatenverschlüsselung auf anpassbarem Speicher konfigurieren.

Leistung und Stabilität

Um versehentlichen Datenverlust oder -beschädigung zu vermeiden, sollten nur externe Speichermedien an stabilen Standorten in Betracht gezogen werden, beispielsweise in einem Steckplatz in einem Batteriefach oder hinter einer Schutzhülle. Insbesondere sollten USB-Geräte, die an ein Telefon oder Tablet angeschlossen sind, niemals für die Einführung in Betracht gezogen werden. Eine häufige Ausnahme wäre ein externes USB-Laufwerk, das an ein Fernsehgerät angeschlossen ist, da der gesamte Fernseher normalerweise an einem stabilen Ort installiert ist.

Wenn ein Benutzer ein neues Speichergerät anwendet, führt die Plattform einen Benchmark durch und vergleicht seine Leistung mit dem internen Speicher. Wenn das verwendete Gerät deutlich langsamer ist als der interne Speicher, warnt die Plattform den Benutzer vor einer möglicherweise beeinträchtigten Erfahrung. Dieser Benchmark wurde aus dem tatsächlichen I/O-Verhalten beliebter Android-Apps abgeleitet. Derzeit warnt die AOSP-Implementierung Benutzer nur ab einem bestimmten Schwellenwert, Gerätehersteller können dies jedoch weiter anpassen, indem sie beispielsweise die Einführung vollständig ablehnen, wenn die Karte extrem langsam ist.

Übernommene Geräte müssen mit einem Dateisystem formatiert sein, das POSIX-Berechtigungen und erweiterte Attribute wie ext4 oder f2fs unterstützt. Für optimale Leistung wird das f2fs Dateisystem für Flash-basierte Speichergeräte empfohlen.

Bei der Durchführung regelmäßiger Leerlaufwartungen vergibt die Plattform FI_TRIM an die übernommenen Medien, genau wie beim internen Speicher. Die aktuelle SD-Kartenspezifikation unterstützt den DISCARD Befehl nicht; Stattdessen greift der Kernel jedoch auf den ERASE Befehl zurück, den die SD-Karten-Firmware möglicherweise zu Optimierungszwecken verwendet.

Testen

Führen Sie diesen CTS-Test aus, um zu testen, ob der anpassbare Speicher funktioniert:

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

Um das Verhalten von USB-Laufwerken und SD-Karten zu überprüfen, wenn ein Gerät keinen integrierten Steckplatz hat oder wenn der USB-Anschluss für eine aktive ADB-Verbindung verwendet wird, verwenden Sie Folgendes:

adb shell sm set-virtual-disk true