Android 7.0 wird im sicheren Direktstart ausgeführt, wenn das Gerät eingeschaltet, aber nicht entsperrt wurde. Zu diesem Zweck bietet das System zwei Speicherorte für Daten:
- Verschlüsselter Anmeldedatenspeicher: Dies ist der Standardspeicherort und er ist nur verfügbar, nachdem der Nutzer das Gerät entsperrt hat.
- Vom Gerät verschlüsselter Speicher: Dieser Speicherort ist sowohl im Direct Boot-Modus als auch nach dem Entsperren des Geräts verfügbar.
Standardmäßig werden Apps im Direct Boot-Modus nicht ausgeführt. Wenn Ihre App im Direct Boot-Modus Aktionen ausführen muss, können Sie App-Komponenten, die in diesem Modus ausgeführt werden. Hier einige häufige Anwendungsfälle für Apps, die im Direktstartmodus ausgeführt werden müssen:
- Apps mit geplanten Benachrichtigungen, z. B. Wecker-Apps
- Apps, die wichtige Nutzerbenachrichtigungen senden, z. B. SMS-Apps
- Apps, die Bedienungshilfen wie TalkBack bieten
Wenn Ihre App im Direktstartmodus auf Daten zugreifen muss, verwenden Sie den vom Gerät verschlüsselten Speicher. Der verschlüsselte Gerätespeicher enthält Daten, die mit einem Schlüssel verschlüsselt sind, der erst verfügbar ist, nachdem ein Gerät einen erfolgreichen verifizierten Start ausgeführt hat.
Verwenden Sie den verschlüsselten Anmeldedatenspeicher für Daten, die mit einem Schlüssel verschlüsselt werden müssen, der mit Nutzeranmeldedaten wie einer PIN oder einem Passwort verknüpft ist. Der mit Anmeldedaten verschlüsselte Speicher ist verfügbar, sobald der Nutzer entsperrt werden und der Nutzer das Gerät neu startet. Wenn der Nutzer den Sperrbildschirm nach dem Entsperren des Geräts aktiviert, bleibt der verschlüsselte Anmeldedatenspeicher verfügbar.
Zugriff anfordern, um während des direkten Starts ausgeführt zu werden
Apps müssen ihre Komponenten beim System registrieren, bevor sie im Direct Boot-Modus ausgeführt werden oder auf den verschlüsselten Gerätespeicher zugreifen können. Apps registrieren sich beim System, indem sie Komponenten als verschlüsselungsbewusst kennzeichnen. Wenn Sie Ihre Komponente als verschlüsselungsbewusst kennzeichnen möchten, setzen Sie das Attribut android:directBootAware
in Ihrem Manifest auf „true“.
Verschlüsselungsbewusste Komponenten können sich registrieren, um eine ACTION_LOCKED_BOOT_COMPLETED
-Broadcastnachricht vom System zu erhalten, wenn das Gerät neu gestartet wurde. Gerät zu diesem Zeitpunkt verschlüsselt
Speicherplatz ist verfügbar und Ihre Komponente kann Aufgaben ausführen,
ausgeführt werden, um beispielsweise einen geplanten Alarm auszulösen.
Das folgende Code-Snippet zeigt ein Beispiel für die Registrierung eines
BroadcastReceiver
als verschlüsselungsbewusst eingestuft und fügen einen
Intent-Filter für ACTION_LOCKED_BOOT_COMPLETED
im App-Manifest:
<receiver android:directBootAware="true" > ... <intent-filter> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> </intent-filter> </receiver>
Sobald der Nutzer das Gerät entsperrt hat, können alle Komponenten sowohl auf den verschlüsselten Gerätespeicher als auch auf den verschlüsselten Anmeldedatenspeicher zugreifen.
Auf verschlüsselten Gerätespeicher zugreifen
Erstelle einen zweiten Speicher, um auf den verschlüsselten Speicher des Geräts zuzugreifen
Context
durch Aufrufen von
Context.createDeviceProtectedStorageContext()
. Alle Storage API-Aufrufe, die mit diesem Kontext erfolgen, greifen auf den verschlüsselten Gerätespeicher zu. Im folgenden Beispiel wird auf den verschlüsselten Gerätespeicher zugegriffen und eine vorhandene App-Datendatei geöffnet:
Kotlin
val directBootContext: Context = appContext.createDeviceProtectedStorageContext() // Access appDataFilename that lives in device encrypted storage val inStream: InputStream = directBootContext.openFileInput(appDataFilename) // Use inStream to read content...
Java
Context directBootContext = appContext.createDeviceProtectedStorageContext(); // Access appDataFilename that lives in device encrypted storage FileInputStream inStream = directBootContext.openFileInput(appDataFilename); // Use inStream to read content...
Verwenden Sie den verschlüsselten Gerätespeicher nur für Informationen, auf die im Direktstartmodus zugegriffen werden muss. Verwenden Sie den geräteverschlüsselten Speicher nicht als allgemeinen verschlüsselten Speicher. Verwenden Sie für private Nutzerinformationen oder verschlüsselte Daten, die im Direktstartmodus nicht benötigt werden, einen mit Anmeldedaten verschlüsselten Speicher.
Benachrichtigungen bei Nutzerentsperrung erhalten
Wenn der Nutzer das Gerät nach dem Neustart entsperrt, kann Ihre App zum Zugriff auf den mit Anmeldedaten verschlüsselten Speicher wechseln und reguläre Systemdienste verwenden, die von Nutzeranmeldedaten abhängen.
Wenn Sie benachrichtigt werden möchten, wenn der Nutzer das Gerät nach einem Neustart entsperrt, registrieren Sie eine BroadcastReceiver
von einer laufenden Komponente, um auf Benachrichtigungsnachrichten für die Entsperrung zu warten. Wenn der Nutzer das Gerät entsperrt
nach dem Start:
- Wenn Ihre App Prozesse im Vordergrund hat, die sofort benachrichtigt werden müssen,
Warten Sie auf die Nachricht
ACTION_USER_UNLOCKED
. - Wenn Ihre App nur Hintergrundprozesse verwendet, die verzögert reagieren können,
Benachrichtigung erhalten, warten Sie auf das Ereignis
ACTION_BOOT_COMPLETED
.
Wenn der Nutzer das Gerät entsperrt hat, kannst du dies durch folgenden Aufruf herausfinden:
UserManager.isUserUnlocked()
Vorhandene Daten migrieren
Wenn ein Nutzer sein Gerät für die Verwendung des Direct Boot-Modus aktualisiert, haben Sie möglicherweise
vorhandene Daten, die in den vom Gerät verschlüsselten Speicher migriert werden müssen. Verwenden Sie Context.moveSharedPreferencesFrom()
und Context.moveDatabaseFrom()
, wobei der Zielkontext als Methode aufruft und der Quellkontext als Argument dient, um Präferenz- und Datenbankdaten zwischen mit Anmeldedaten verschlüsseltem Speicher und mit dem Gerät verschlüsseltem Speicher zu migrieren.
Migrieren Sie keine privaten Nutzerinformationen wie Passwörter oder Autorisierungstokens von Anmeldedaten-verschlüsselter Speicher zu Geräte-verschlüsseltem Speicher. Entscheiden Sie nach eigenem Ermessen, welche anderen Daten Sie in den verschlüsselten Gerätespeicher migrieren möchten. In einigen Fällen müssen Sie möglicherweise separate Datensätze in den beiden verschlüsselten Speichern verwalten.
Verschlüsselungsbewusste App testen
Testen Sie Ihre verschlüsselungsbewusste App mit aktiviertem Direktstartmodus.
Die meisten Geräte mit aktuellen Android-Versionen aktivieren den Direct Boot-Modus Wenn eine Anmeldedaten für den Sperrbildschirm (PIN, Muster oder Passwort) festgelegt wurden. Dies gilt insbesondere für alle Geräte mit dateibasierter Verschlüsselung. So prüfen Sie, ob ein Gerät die dateibasierte Verschlüsselung verwendet: Shell-Befehl:
adb shell getprop ro.crypto.type
Wenn die Ausgabe file
lautet, ist die dateibasierte Verschlüsselung auf dem Gerät aktiviert.
Auf Geräten, die standardmäßig keine dateibasierte Verschlüsselung verwenden, kann es weitere Optionen zum Testen des Direct Boot-Modus:
-
Einige Geräte mit Datenträgervollverschlüsselung (
ro.crypto.type=block
) und unter Android 7.0 bis Android 12 kann in ein dateibasiertes Betriebssystem umgewandelt werden Verschlüsselung. Dafür gibt es zwei Möglichkeiten:- Aktivieren Sie auf dem Gerät die Entwickleroptionen, falls noch nicht geschehen indem Sie zu Einstellungen > Über das Telefon und das Tippen auf Builds Nummer siebenmal. Gehen Sie dann zu Einstellungen > Entwickler*in und wählen Sie In Dateiverschlüsselung konvertieren aus.
- Alternativ können Sie die folgenden Shell-Befehle ausführen:
adb reboot-bootloader
fastboot --wipe-and-use-fbe
Warnung: Bei beiden Methoden zur Umstellung auf die dateibasierte Verschlüsselung werden alle Nutzerdaten auf dem Gerät gelöscht.
-
Geräte mit Android 13 oder niedriger unterstützen einen „emulierten“ Direct Boot-Modus, bei dem die Auswirkungen des Sperrens und Entsperrens verschlüsselter Dateien anhand von Dateiberechtigungen simuliert werden. Verwenden Sie den emulierten Modus nur während der Entwicklung, da er zu Datenverlusten führen kann. Wenn Sie den emulierten Direktstartmodus aktivieren möchten, legen Sie ein Sperrmuster auf dem Gerät fest. Wählen Sie „Nein danke“ aus, wenn Sie beim Festlegen eines Sperrmusters aufgefordert werden, einen sicheren Startbildschirm festzulegen. Führen Sie dann den folgenden Shell-Befehl aus:
adb shell sm set-emulate-fbe true
Führen Sie den folgenden Shell-Befehl aus, um den emulierten Direct Boot-Modus zu deaktivieren:
adb shell sm set-emulate-fbe false
Wenn Sie einen dieser Befehle ausführen, wird das Gerät neu gestartet.
Verschlüsselungsstatus der Geräterichtlinie prüfen
Mit DevicePolicyManager.getStorageEncryptionStatus()
können Apps zur Geräteverwaltung den aktuellen Verschlüsselungsstatus des Geräts prüfen.
Wenn Ihre App auf ein API-Level niedriger als Android 7.0 (API 24) ausgerichtet ist, gibt getStorageEncryptionStatus()
ENCRYPTION_STATUS_ACTIVE
zurück, wenn auf dem Gerät entweder die Volllaufwerkverschlüsselung oder die dateibasierte Verschlüsselung mit Direct Boot verwendet wird. In beiden Fällen werden Daten immer im Ruhezustand verschlüsselt gespeichert.
Wenn deine App auf Android 7.0 (API 24) oder höher ausgerichtet ist,
getStorageEncryptionStatus()
Rückgaberecht
ENCRYPTION_STATUS_ACTIVE
, wenn das Gerät die Datenträgervollverschlüsselung verwendet. Es wird ENCRYPTION_STATUS_ACTIVE_PER_USER
zurückgegeben, wenn auf dem Gerät die dateibasierte Verschlüsselung mit Direct Boot verwendet wird.
Wenn Sie eine App zur Geräteverwaltung entwickeln, die auf Android 7.0 ausgerichtet ist, prüfen Sie sowohl ENCRYPTION_STATUS_ACTIVE
als auch ENCRYPTION_STATUS_ACTIVE_PER_USER
, um festzustellen, ob das Gerät verschlüsselt ist.
Zusätzliche Codebeispiele
Im Beispiel DirectBoot wird die Verwendung der auf dieser Seite beschriebenen APIs veranschaulicht.