Direct Boot-Modus unterstützen

Android 7.0 wird im sicheren Direktstart ausgeführt, wenn das Gerät eingeschaltet, aber nicht entsperrt wurde. Dazu 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 Direktstartmodus Aktionen ausführen muss, können Sie App-Komponenten registrieren, die in diesem Modus ausgeführt werden sollen. Einige häufige Anwendungsfälle Zu den Anwendungen, die während des Direct Boot-Modus ausgeführt werden müssen, gehören:

  • 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, nachdem der Nutzer das Gerät erfolgreich entsperrt hat, und bis er 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 kann im Direct Boot-Modus ausgeführt werden oder auf verschlüsseltes Gerät zugreifen Speicherplatz. Apps werden beim System registriert, indem die Komponenten Verschlüsselung bewusst. Um Ihre Komponente als verschlüsselungsbewusst zu markieren, legen Sie den Parameter android:directBootAware-Attribut in deinem Manifest auf „true“.

Verschlüsselungsbewusste Komponenten können sich für den Empfang eines ACTION_LOCKED_BOOT_COMPLETED Broadcast-Nachricht von wenn das Gerät neu gestartet wurde. Zu diesem Zeitpunkt ist der verschlüsselte Gerätespeicher verfügbar und Ihre Komponente kann Aufgaben ausführen, die im Direktstartmodus ausgeführt werden müssen, z. B. das Auslösen eines geplanten Weckers.

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

Wenn Sie auf den verschlüsselten Gerätespeicher zugreifen möchten, erstellen Sie eine zweite Context-Instanz, indem Sie Context.createDeviceProtectedStorageContext() aufrufen. 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:

val directBootContext: Context = appContext.createDeviceProtectedStorageContext()
// Access appDataFilename that lives in device encrypted storage
val inStream: InputStream = directBootContext.openFileInput(appDataFilename)
// Use inStream to read content...
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 verschlüsselten Gerätespeicher nicht als verschlüsselten Speicher für allgemeine Zwecke. Für private Nutzerinformationen oder verschlüsselte Daten, die während Direct Boot-Modus, mit Anmeldedaten verschlüsselter Speicher verwenden.

Benachrichtigungen über Entsperrung durch Nutzer erhalten

Wenn der Nutzer das Gerät nach dem Neustart entsperrt, kann deine App zu Zugriff auf Anmeldedaten-verschlüsselte Speicher und nutzen reguläre Systemdienste, sind von den Nutzeranmeldedaten abhängig.

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 nach dem Starten entsperrt:

  • Wenn Ihre App Prozesse im Vordergrund hat, die sofort benachrichtigt werden müssen, achten Sie auf die Meldung 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 auf den Direct Boot-Modus umstellt, müssen möglicherweise vorhandene Daten in den verschlüsselten Gerätespeicher migriert werden. 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, andere Daten in den geräteverschlüsselten Speicher zu migrieren. In einigen Szenarien müssen Sie separaten Datenbeständen in den beiden verschlüsselten Speichern.

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. Das gilt insbesondere für alle Geräte, auf denen die dateibasierte Verschlüsselung verwendet wird. 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 Android 7.0 bis Android 12 können auf die dateibasierte Verschlüsselung umgestellt werden. Dafür gibt es zwei Möglichkeiten:

      Warnung : Beide Methoden zur Konvertierung in Bei der dateibasierten Verschlüsselung werden alle Nutzerdaten auf dem Gerät gelöscht.

    • Aktivieren Sie auf dem Gerät die Entwickleroptionen, falls noch nicht geschehen. Gehen Sie dazu zu Einstellungen > Über das Telefon und tippen Sie siebenmal auf die Build-Nummer. 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
      
  • Geräte mit Android 13 oder niedriger unterstützen ein „emuliert“ Direct Boot-Modus, bei dem mithilfe von Dateiberechtigungen die welche Auswirkungen es hat, wenn verschlüsselte Dateien gesperrt oder entsperrt werden. Nur emulierten Modus verwenden während der Entwicklung; kann das zu Datenverlusten führen. Um emulierte Direct Boot-Modus, Sperrmuster auf dem Gerät einrichten, „Nein danke“ auswählen wenn beim Einrichten eines Sperrmusters aufgefordert, einen sicheren Startbildschirm aufzurufen, und führen Sie den folgenden Shell-Befehl aus:

    adb shell sm set-emulate-fbe true
    

    Führen Sie die folgende Shell aus, um den emulierten Direct Boot-Modus zu deaktivieren Befehl:

    adb shell sm set-emulate-fbe false
    

    Wenn Sie einen dieser Befehle ausführen, wird das Gerät neu gestartet.

Verschlüsselungsstatus der Geräterichtlinien prüfen

Apps zur Geräteverwaltung können DevicePolicyManager.getStorageEncryptionStatus() um den aktuellen Verschlüsselungsstatus des Geräts zu prüfen.

Wenn Ihre App auf ein API-Level unter Android 7.0 (API 24) ausgerichtet ist, getStorageEncryptionStatus() Rückgaberecht ENCRYPTION_STATUS_ACTIVE wenn das Gerät entweder die Datenträgervollverschlüsselung verwendet oder dateibasierte Verschlüsselung mit Direct Boot. In beiden Fällen werden Daten immer im Ruhezustand verschlüsselt gespeichert.

Wenn Ihre App auf Android 7.0 (API 24) oder höher ausgerichtet ist, gibt getStorageEncryptionStatus() ENCRYPTION_STATUS_ACTIVE zurück, wenn auf dem Gerät die Datenträgervollverschlüsselung verwendet wird. Sie gibt zurück ENCRYPTION_STATUS_ACTIVE_PER_USER, wenn das Gerät dateibasierte Verschlüsselung verwendet mit Direct Boot.

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.

Weitere Codebeispiele

Im Beispiel DirectBoot wird die Verwendung der auf dieser Seite beschriebenen APIs veranschaulicht.