Full-Disk Encryption

Full-Disk Encryption ist der Prozess der Verschlüsselung aller Benutzerdaten auf einem Android-Gerät mit einem verschlüsselten Schlüssel. Sobald ein Gerät verschlüsselt ist, werden alle vom Benutzer erstellten Daten automatisch verschlüsselt, bevor sie auf der Festplatte gespeichert werden, und alle gelesenen Daten werden automatisch entschlüsselt, bevor sie an den aufrufenden Prozess zurückgegeben werden.

Die Festplattenverschlüsselung wurde in Android 4.4 eingeführt, aber Android 5.0 führte folgende neue Funktionen ein:

  • Eine schnelle Verschlüsselung, die nur verwendete Blöcke auf der Datenpartition verschlüsselt, um zu vermeiden, dass der erste Start lange dauert. Nur ext4- und f2fs-Dateisysteme unterstützen derzeit schnelle Verschlüsselung.
  • Hinzufügen des fstab-Flags forceencrypt zur Verschlüsselung beim ersten Start.
  • Unterstützung für Muster und Verschlüsselung ohne Passwort hinzugefügt.
  • Hardwaregestützte Speicherung des Verschlüsselungsschlüssels unter Verwendung der TEE-Signierfunktion (Trusted Execution Environment) (z. B. in einer TrustZone). Weitere Einzelheiten finden Sie unter Speichern des verschlüsselten Schlüssels.

Achtung: Geräte, die auf Android 5.0 aktualisiert und anschließend verschlüsselt wurden, können durch Zurücksetzen der Werksdaten in einen unverschlüsselten Zustand zurückversetzt werden. Neue Android 5.0-Geräte, die beim ersten Start verschlüsselt wurden, können nicht in einen unverschlüsselten Zustand zurückversetzt werden.

Wie die Android-Vollfestplattenverschlüsselung funktioniert

Die Android-Vollfestplattenverschlüsselung basiert auf dm-crypt, einer Kernel-Funktion, die auf der Block-Geräteebene arbeitet. Aus diesem Grund funktioniert die Verschlüsselung mit Embedded MultiMediaCard (eMMC) und ähnlichen Flash-Geräten, die sich dem Kernel als Blockdevices präsentieren. Verschlüsselung ist nicht möglich mit YAFFS, das direkt mit einem RawNAND-Flash-Chip kommuniziert.

Der Verschlüsselungsalgorithmus ist 128 Advanced Encryption Standard (AES) mit Cipher-Block-Chaining (CBC) und ESSIV:SHA256. Der Hauptschlüssel wird mit 128-Bit-AES über Aufrufe der OpenSSL-Bibliothek verschlüsselt. Sie müssen mindestens 128 Bit für den Schlüssel verwenden (256 ist optional).

Hinweis: OEMs können 128-Bit oder höher für die Verschlüsselung des Hauptschlüssels verwenden.

In der Version Android 5.0 gibt es vier Arten von Verschlüsselungszuständen:

  • Standard
  • PIN
  • Passwort
  • Muster

Beim ersten Start erstellt das Gerät einen zufällig generierten 128-Bit-Hauptschlüssel und verschlüsselt ihn dann mit einem Standardpasswort und einem gespeicherten Salz. Das Standardpasswort lautet: „default_password“. Der resultierende Hash wird jedoch auch durch ein TEE (wie TrustZone) signiert, das einen Hash der Signatur zur Verschlüsselung des Hauptschlüssels verwendet.

Das Standardpasswort ist in der Datei cryptfs.cpp des Android Open Source Project definiert.

Wenn der Benutzer die PIN/den Pass oder das Passwort auf dem Gerät einstellt, wird nur der 128-Bit-Schlüssel erneut verschlüsselt und gespeichert. (d.h. Benutzer-PIN/Pass/Muster-Änderungen führen NICHT zu einer erneuten Verschlüsselung der Benutzerdaten.) Beachten Sie, dass das verwaltete Gerät PIN-, Muster- oder Kennworteinschränkungen unterliegen kann.

Die Verschlüsselung wird von init und vold verwaltet.init ruft vold auf, und vold setzt Eigenschaften, um Ereignisse in init auszulösen. Andere Teile des Systems greifen ebenfalls auf die Eigenschaften zurück, um Aufgaben wie die Meldung des Status, die Abfrage eines Kennworts oder die Aufforderung zum Zurücksetzen auf die Werkseinstellungen im Falle eines schwerwiegenden Fehlers durchzuführen. Um Verschlüsselungsfunktionen in vold aufzurufen, verwendet das System die cryptfs-Befehle des Befehlszeilentoolsvdc: checkpw,restart, enablecrypto, changepw,cryptocomplete, verifypw, setfield,getfield, mountdefaultencrypted, getpwtype,getpw, und clearpw.

Um /data zu verschlüsseln, zu entschlüsseln oder zu löschen, darf /data nicht gemountet sein. Um jedoch eine Benutzeroberfläche (UI) anzuzeigen, muss das Framework gestartet werden, und das Framework benötigt /data, um zu laufen. Um dieses Problem zu lösen, wird ein temporäres Dateisystem auf /data gemountet, so dass Android bei Bedarf nach Passwörtern fragen, den Fortschritt anzeigen oder einen Datenlöschvorgang vorschlagen kann. Um vom temporären Dateisystem zum echten /data-Dateisystem zu wechseln, muss das System jeden Prozess mit offenen Dateien auf dem temporären Dateisystem anhalten und diese Prozesse auf dem echten /data-Dateisystem neu starten. Dazu müssen sich alle Dienste in einer der drei Gruppen befinden: core, main undlate_start.

  • core: Niemals nach dem Start herunterfahren.
  • main: Herunterfahren und dann neu starten, nachdem das Festplattenkennwort eingegeben wurde.
  • late_start: Startet erst, nachdem /data entschlüsselt und gemountet wurde.

Um diese Aktionen auszulösen, wird die vold.decrypt-Eigenschaft auf verschiedene Zeichenfolgen gesetzt.Zum Beenden und Neustarten von Diensten gibt es folgende init-Befehle:

  • class_reset: Stoppt einen Dienst, ermöglicht aber seinen Neustart mit class_start.
  • class_start: Startet einen Dienst neu.
  • class_stop: Hält einen Dienst an und fügt ein SVC_DISABLED-Flag hinzu. Gestoppte Dienste reagieren nicht auf class_start.

Flows

Es gibt vier Flows für ein verschlüsseltes Gerät. Ein Gerät wird nur einmal verschlüsselt und folgt dann einem normalen Boot-Flow.

  • Ein zuvor unverschlüsseltes Gerät verschlüsseln:
    • Verschlüsseln Sie ein neues Gerät mit forceencrypt: Obligatorische Verschlüsselung beim ersten Start (ab Android L).
    • Ein vorhandenes Gerät verschlüsseln: Benutzer-initiierte Verschlüsselung (Android K und früher).
  • Booten eines verschlüsselten Geräts:
    • Starten eines verschlüsselten Geräts ohne Passwort: Booten eines verschlüsselten Geräts ohne festgelegtes Passwort (relevant für Geräte mit Android 5.0 und höher).
    • Starten eines verschlüsselten Geräts mit einem Kennwort: Starten eines verschlüsselten Geräts mit einem festgelegten Kennwort.

Zusätzlich zu diesen Abläufen kann das Gerät auch bei der Verschlüsselung scheitern /data.Jeder der Abläufe wird unten im Detail erklärt.

Ein neues Gerät mit forceencrypt

Dies ist der normale erste Start für ein Android 5.0-Gerät.

  1. Unverschlüsseltes Dateisystem mit forceencrypt-Flag

    /data erkennen ist nicht verschlüsselt, muss aber sein, weil forceencrypt es vorschreibt./data aushängen.

  2. Starten Sie die Verschlüsselung von /data

    vold.decrypt = "trigger_encryption" löst init.rc aus, was vold veranlasst, /data ohne Passwort zu verschlüsseln.(Keines ist gesetzt, weil dies ein neues Gerät sein sollte.)

  3. Mount tmpfs

    vold mountet ein tmpfs /data (unter Verwendung der tmpfs-Optionen ausro.crypto.tmpfs_options) und setzt die Eigenschaft vold.encrypt_progress auf 0.vold bereitet das tmpfs /data für das Booten eines verschlüsselten Systems vor und setzt dieEigenschaft vold.decrypt auf: trigger_restart_min_framework

  4. Bring up framework to show progress

    Da das Gerät praktisch keine Daten zu verschlüsseln hat, wird der Fortschrittsbalken oft nicht angezeigt, weil die Verschlüsselung so schnell abläuft. Weitere Informationen über die Fortschrittsanzeige finden Sie unter Verschlüsseln eines vorhandenen Geräts.

  5. Wenn /data verschlüsselt ist, wird das Framework

    vold heruntergefahren und vold.decrypt auftrigger_default_encryption gesetzt, wodurch derdefaultcrypto Dienst gestartet wird. (trigger_default_encryption überprüft den Verschlüsselungstyp, um festzustellen, ob /data mit oder ohne Passwort verschlüsselt ist. Da Android 5.0-Geräte beim ersten Start verschlüsselt werden, sollte kein Passwort gesetzt sein; daher entschlüsseln und mounten wir /data.

  6. Mount /data

    init mounten dann /data auf einer tmpfs RAMDisk unter Verwendung von Parametern, die es von ro.crypto.tmpfs_options übernimmt, das in init.rc gesetzt ist.

  7. Start framework

    Setzen Sie vold auf trigger_restart_framework, was den üblichen Boot-Prozess fortsetzt.

Vorhandenes Gerät verschlüsseln

Dies geschieht, wenn Sie ein unverschlüsseltes Android K- oder früheres Gerät verschlüsseln, das auf L migriert wurde.

Dieser Prozess wird vom Benutzer initiiert und wird im Code als „Inplace-Verschlüsselung“ bezeichnet. Wenn ein Benutzer die Verschlüsselung eines Geräts auswählt, stellt die Benutzeroberfläche sicher, dass die Batterie vollständig aufgeladen und das Netzteil eingesteckt ist, damit genügend Strom für den Abschluss des Verschlüsselungsvorgangs vorhanden ist.

Warnung: Wenn dem Gerät der Strom ausgeht und es sich ausschaltet, bevor es den Verschlüsselungsvorgang abgeschlossen hat, bleiben die Dateidaten in einem teilweise verschlüsselten Zustand. Das Gerät muss auf die Werkseinstellungen zurückgesetzt werden, und alle Daten gehen verloren.

Um die Verschlüsselung an Ort und Stelle zu aktivieren, startet vold eine Schleife, um jeden Sektor des realen Blockgeräts zu lesen und ihn dann in das Kryptoblockgerät zu schreiben. vold prüft, ob ein Sektor in Gebrauch ist, bevor er gelesen und geschrieben wird, was die Verschlüsselung auf einem neuen Gerät, das wenig oder gar keine Daten enthält, erheblich beschleunigt.

Zustand des Geräts: Setzen Sie ro.crypto.state = "unencrypted"und führen Sie den on nonencrypted initAuslöser aus, um mit dem Booten fortzufahren.

  1. Passwort prüfen

    Das UI ruft vold mit dem Befehl cryptfs enablecrypto inplaceauf, wobei passwd das Sperrbildschirm-Passwort des Benutzers ist.

  2. Abbau des Frameworks

    voldprüft auf Fehler, gibt -1 zurück, wenn es nicht verschlüsseln kann, und druckt einen Grund in das Protokoll. Wenn es verschlüsseln kann, setzt es die Eigenschaft vold.decrypt auf trigger_shutdown_framework. Dies veranlasst init.rc, die Dienste der Klassen late_start und main zu beenden.

  3. Erstellen einer Krypto-Fußzeile
  4. Erstellen einer Breadcrumb-Datei
  5. Reboot
  6. Erkennen der Breadcrumb-Datei
  7. Beginnen Sie mit der Verschlüsselung /data

    vold und richten Sie dann die Kryptozuordnung ein, Dadurch wird ein virtuelles Krypto-Blockgerät erstellt, das auf das reale Blockgerät abgebildet wird, aber jeden Sektor beim Schreiben verschlüsselt und beim Lesen entschlüsselt. vold erstellt dann die Crypto-Metadaten und schreibt sie aus.

  8. Während es verschlüsselt, mount tmpfs

    vold mountet ein tmpfs /data (unter Verwendung der tmpfs-Optionen aus ro.crypto.tmpfs_options) und setzt die Eigenschaftvold.encrypt_progress auf 0. vold bereitet das tmpfs/data zum Booten eines verschlüsselten Systems vor und setzt die Eigenschaftvold.decrypt auf: trigger_restart_min_framework

  9. Bringt das Framework zum Anzeigen des Fortschritts

    trigger_restart_min_framework veranlasst init.rc, die Klasse der Dienste main zu starten. Die Verschlüsselungsschleife aktualisiert vold.encrypt_progress jedes Mal, wenn sie ein weiteres Prozent der Partition verschlüsselt.

  10. Wenn /data verschlüsselt ist, aktualisiere die Krypto-Fußzeile

    Wenn /data erfolgreich verschlüsselt ist, löscht vold das Kennzeichen ENCRYPTION_IN_PROGRESS in den Metadaten.

    Wenn das Gerät erfolgreich entsperrt ist, wird das Passwort verwendet, um den Hauptschlüssel zu verschlüsseln, und die Krypto-Fußzeile wird aktualisiert.

    Wenn der Neustart aus irgendeinem Grund fehlschlägt, setzt vold die Eigenschaft vold.encrypt_progress auf error_reboot_failed, und die Benutzeroberfläche sollte eine Meldung anzeigen, die den Benutzer auffordert, eine Taste zum Neustart zu drücken. Es wird nicht erwartet, dass dies jemals auftritt.

Starten eines verschlüsselten Geräts mit Standardverschlüsselung

Dies ist, was passiert, wenn Sie ein verschlüsseltes Gerät ohne Kennwort booten.Da Android 5.0-Geräte beim ersten Start verschlüsselt werden, sollte kein Kennwort gesetzt werden und daher ist dies der Standardverschlüsselungsstatus.

  1. Erkenne verschlüsseltes /data ohne Passwort

    Erkenne, dass das Android-Gerät verschlüsselt ist, weil /datanicht gemountet werden kann und eines der Flags encryptable oderforceencrypt gesetzt ist.

    vold setzt vold.decrypt auftrigger_default_encryption, was dendefaultcrypto-Dienst startet. trigger_default_encryptionüberprüft den Verschlüsselungstyp, um festzustellen, ob /data mit oder ohne Passwort verschlüsselt ist.

  2. Entschlüsseln /data

    Erzeugt das Gerät dm-crypt über dem Blockgerät, so dass das Gerät einsatzbereit ist.

  3. Einhängen /data

    voldhängt dann die entschlüsselte echte /data-Partition ein und bereitet die neue Partition vor. Es setzt die Eigenschaftvold.post_fs_data_done auf 0 und setzt dann vold.decrypt auf trigger_post_fs_data. Dies veranlasst init.rc, seine post-fs-data-Befehle auszuführen. Sie erstellen alle notwendigen Verzeichnisse oder Links und setzen dann vold.post_fs_data_done auf 1.

    Sobald vold die 1 in dieser Eigenschaft sieht, setzt es die Eigenschaft vold.decrypt auf: trigger_restart_framework. Dies veranlasst init.rc, die Dienste der Klasse main erneut zu starten und auch die Dienste der Klasse late_start zum ersten Mal seit dem Booten zu starten.

  4. Start framework

    Jetzt bootet das Framework alle seine Dienste unter Verwendung des entschlüsselten /data, und das System ist einsatzbereit.

Starten eines verschlüsselten Geräts ohne Standardverschlüsselung

Dies geschieht, wenn Sie ein verschlüsseltes Gerät mit einem festgelegten Kennwort starten. Das Kennwort des Geräts kann ein Pin, ein Muster oder ein Kennwort sein.

  1. Verschlüsseltes Gerät mit Passwort erkennen

    Ermittelt, dass das Android-Gerät verschlüsselt ist, weil das Flagro.crypto.state = "encrypted"

    vold vold.decrypt auftrigger_restart_min_framework gesetzt ist, weil /data mit einem Passwort verschlüsselt ist.

  2. Mount tmpfs

    init setzt fünf Eigenschaften, um die anfänglichen Mount-Optionen für /data mit Parametern zu speichern, die von init.rc übergeben wurden.vold verwendet diese Eigenschaften, um die Kryptozuordnung einzurichten:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (ASCII 8-stellige hexadezimale Zahl mit vorangestelltem 0x)
  3. Start framework to prompt for password

    Das Framework startet und sieht, dass vold.decrypt auftrigger_restart_min_framework gesetzt ist. Das sagt dem Framework, dass es auf einer tmpfs /data-Platte bootet und das Benutzerpasswort abfragen muss.

    Zuerst muss es jedoch sicherstellen, dass die Platte richtig verschlüsselt wurde. Es sendet den Befehl cryptfs cryptocomplete an vold.vold gibt 0 zurück, wenn die Verschlüsselung erfolgreich abgeschlossen wurde, -1 bei einem internen Fehler oder-2, wenn die Verschlüsselung nicht erfolgreich abgeschlossen wurde. vold stellt dies fest, indem es in den Krypto-Metadaten nach dem CRYPTO_ENCRYPTION_IN_PROGRESS-Flag sucht. Wenn es gesetzt ist, wurde der Verschlüsselungsprozess unterbrochen, und es befinden sich verwertbare Daten auf dem Gerät. Wenn vold einen Fehler zurückgibt, sollte die Benutzeroberfläche den Benutzer auffordern, das Gerät neu zu starten und auf die Werkseinstellungen zurückzusetzen, und dem Benutzer eine entsprechende Taste zur Verfügung stellen.

  4. Daten mit Kennwort entschlüsseln

    Wenn cryptfs cryptocomplete erfolgreich ist, zeigt das Framework eine Benutzeroberfläche an, die nach dem Festplattenkennwort fragt. Die Benutzeroberfläche prüft das Kennwort durch Senden des Befehls cryptfs checkpw an vold. Wenn das Kennwort korrekt ist (was durch erfolgreiches Einhängen des entschlüsselten /data an einem temporären Ort und anschließendes Aushängen festgestellt wird), speichert vold den Namen des entschlüsselten Blockgeräts in der Eigenschaft ro.crypto.fs_crypto_blkdev und gibt Status 0 an die Benutzeroberfläche zurück. Wenn das Passwort falsch ist, wird -1 an die Benutzeroberfläche zurückgegeben.

  5. Stop framework

    Die Benutzeroberfläche zeigt eine Krypto-Boot-Grafik an und ruft dann vold mit dem Befehl cryptfs restart auf. vold setzt die Eigenschaft vold.decrypt auf trigger_reset_main, was init.rc veranlasst, class_reset main auszuführen. Dies stoppt alle Dienste in der Hauptklasse, wodurch das tmpfs /data ausgehängt werden kann.

  6. Mount /data

    vold hängt dann die entschlüsselte echte /data Partition ein und bereitet die neue Partition vor (die möglicherweise nie vorbereitet wurde, wenn sie mit der Option wipe verschlüsselt wurde, die in der ersten Version nicht unterstützt wird). Es setzt die Eigenschaft vold.post_fs_data_done auf 0 und setzt dann vold.decrypt auf trigger_post_fs_data. Dies veranlasstinit.rc, seine post-fs-data Befehle auszuführen. Sie erstellen alle notwendigen Verzeichnisse oder Links und setzen dannvold.post_fs_data_done auf 1. Sobald vold die 1 in dieser Eigenschaft sieht, setzt es die Eigenschaft vold.decrypt auftrigger_restart_framework. Dies veranlasst init.rc, die Dienste der Klasse main erneut zu starten und auch die Dienste der Klasse late_start zum ersten Mal seit dem Booten zu starten.

  7. Vollständiges Framework starten

    Jetzt bootet das Framework alle seine Dienste unter Verwendung des entschlüsselten /dataDateisystems, und das System ist einsatzbereit.

Fehler

Ein Gerät, bei dem die Entschlüsselung fehlschlägt, kann aus mehreren Gründen fehlerhaft sein. Das Gerät beginnt mit der normalen Reihe von Schritten zum Booten:

  1. Verschlüsseltes Gerät mit einem Kennwort erkennen
  2. Tmpfs einhängen
  3. Rahmenwerk starten, um zur Eingabe des Kennworts aufzufordern

Aber nachdem das Rahmenwerk geöffnet wurde, kann das Gerät auf einige Fehler stoßen:

  • Kennwort stimmt überein, aber Daten können nicht entschlüsselt werden
  • Benutzer gibt 30 Mal ein falsches Kennwort ein

Wenn diese Fehler nicht behoben werden, wird der Benutzer aufgefordert, das Gerät zu löschen:

Wenn vold einen Fehler während des Verschlüsselungsprozesses feststellt und noch keine Daten zerstört wurden und das Framework läuft, setzt volddie Eigenschaft vold.encrypt_progress auf error_not_encrypted.Die Benutzeroberfläche fordert den Benutzer zum Neustart auf und weist ihn darauf hin, dass der Verschlüsselungsprozess nicht gestartet wurde. Wenn der Fehler auftritt, nachdem das Framework abgebaut wurde, aber bevor die Fortschrittsanzeige erscheint, startet vold das System neu. Wenn der Neustart fehlschlägt, wird vold.encrypt_progress auferror_shutting_down gesetzt und -1 zurückgegeben, aber es wird nichts geben, um den Fehler abzufangen. Es wird nicht erwartet, dass dies passiert.

Wenn vold einen Fehler während des Verschlüsselungsprozesses entdeckt, setzt es vold.encrypt_progress auf error_partially_encrypted und gibt -1 zurück. Die Benutzeroberfläche sollte dann eine Meldung anzeigen, dass die Verschlüsselung fehlgeschlagen ist, und dem Benutzer eine Schaltfläche zum Zurücksetzen des Geräts auf die Werkseinstellungen anbieten.

Speichern des verschlüsselten Schlüssels

Der verschlüsselte Schlüssel wird in den Krypto-Metadaten gespeichert. Die Hardwaresicherung wird durch die Verwendung der Signierfunktion des Trusted Execution Environment (TEE) implementiert. Zuvor haben wir den Hauptschlüssel mit einem Schlüssel verschlüsselt, der durch Anwendung von scrypt auf das Passwort des Benutzers und das gespeicherte Salz erzeugt wurde. Um den Schlüssel widerstandsfähig gegen Off-Box-Angriffe zu machen, erweitern wir diesen Algorithmus, indem wir den resultierenden Schlüssel mit einem gespeicherten TEE-Schlüssel signieren. Die resultierende Signatur wird dann durch eine weitere Anwendung von scrypt in einen Schlüssel geeigneter Länge umgewandelt. Dieser Schlüssel wird dann zum Ver- und Entschlüsseln des Hauptschlüssels verwendet. So speichern Sie diesen Schlüssel:

  1. Erzeugen Sie einen zufälligen 16-Byte-Disk Encryption Key (DEK) und ein 16-Byte-Salz.
  2. Scrypt auf das Benutzerpasswort und das Salt anwenden, um den 32-Byte-Zwischenschlüssel 1 (IK1) zu erzeugen.
  3. Füllen Sie IK1 mit null Bytes auf die Größe des hardwaregebundenen privaten Schlüssels (HBK) auf, und zwar wie folgt: 00 || IK1 || 00..00; ein Nullbyte, 32 IK1-Bytes, 223Nullbytes.
  4. Aufgefüllte IK1 mit HBK, um 256 Byte IK2 zu erzeugen.
  5. Scrypt auf IK2 und Salt (dasselbe Salt wie in Schritt 2) anwenden, um 32-Byte-IK3 zu erzeugen.
  6. Die ersten 16 Bytes von IK3 als KEK und die letzten 16 Bytes als IV verwenden.
  7. Verschlüsseln Sie DEK mit AES_CBC, mit dem Schlüssel KEK und dem Initialisierungsvektor IV.

Kennwort ändern

Wenn ein Benutzer sein Kennwort in den Einstellungen ändern oder entfernen möchte, sendet die Benutzeroberfläche den Befehl cryptfs changepw an vold und vold verschlüsselt den Hauptschlüssel der Festplatte mit dem neuen Kennwort neu.

Verschlüsselungseigenschaften

vold und init kommunizieren miteinander, indem sie Eigenschaften festlegen. Hier ist eine Liste der verfügbaren Eigenschaften für die Verschlüsselung.

Eigenschaften

Eigenschaft Beschreibung
vold.decrypt trigger_encryption Verschlüsseln Sie das Laufwerk ohne Kennwort.
vold.decrypt trigger_default_encryption Prüfen Sie das Laufwerk, um zu sehen, ob es ohne Kennwort verschlüsselt ist. wenn ja, entschlüsseln und mounten Sie es, ansonsten setzen Sie vold.decrypt auf trigger_restart_min_framework.
vold.decrypt trigger_reset_main Setzen von vold, um das UI, das nach dem Festplattenpasswort fragt, abzuschalten.
vold.decrypt trigger_post_fs_data Setzen von vold, um /data mit den notwendigen Verzeichnissen vorzubereiten, usw.
vold.decrypt trigger_restart_framework Setzen von vold, um das echte Framework und alle Dienste zu starten.
vold.decrypt trigger_shutdown_framework Setzen von vold, um das komplette Framework herunterzufahren und die Verschlüsselung zu starten.
vold.decrypt trigger_restart_min_framework Von vold eingestellt, um die Fortschrittsanzeige für die Verschlüsselung zu starten oder nach dem Passwort zu fragen, abhängig vom Wert von ro.crypto.state.
vold.encrypt_progress Wenn das Framework startet, wird, wenn diese Eigenschaft gesetzt ist, der Fortschrittsbalken-UI-Modus aktiviert.
vold.encrypt_progress 0 to 100 Der Fortschrittsbalken-UI sollte den eingestellten Prozentwert anzeigen.
vold.encrypt_progress error_partially_encrypted Die Fortschrittsanzeige sollte eine Meldung anzeigen, dass die Verschlüsselung fehlgeschlagen ist, und dem Benutzer die Möglichkeit geben, das Gerät auf die Werkseinstellungen zurückzusetzen.
vold.encrypt_progress error_reboot_failed Die Fortschrittsanzeige sollte eine Meldung anzeigen, dass die Verschlüsselung abgeschlossen ist, und dem Benutzer eine Schaltfläche zum Neustart des Geräts geben. Dieser Fehler sollte nicht auftreten.
vold.encrypt_progress error_not_encrypted Die Fortschrittsanzeige sollte eine Meldung anzeigen, die besagt, dass ein Fehler aufgetreten ist, keine Daten verschlüsselt wurden oder verloren gegangen sind, und dem Benutzer eine Schaltfläche zum Neustart des Systems geben.
vold.encrypt_progress error_shutting_down Die Fortschrittsanzeige wird nicht ausgeführt, daher ist unklar, wer auf diesen Fehler reagiert. Und es sollte sowieso nie passieren.
vold.post_fs_data_done 0 Setzen von vold kurz vor dem Setzen von vold.decrypt auf trigger_post_fs_data.
vold.post_fs_data_done 1 Setzen von init.rc oder init.rc kurz nach dem Beenden der Aufgabe post-fs-data.

Eigenschaften einrichten

Eigenschaft Beschreibung
ro.crypto.fs_crypto_blkdev Setzen durch den vold Befehl checkpw zur späteren Verwendung durch den vold Befehl restart.
ro.crypto.state unencrypted Gesetzt durch init um zu sagen, dass dieses System mit einem unverschlüsselten /data ro.crypto.state encrypted läuft. Von init gesetzt, um zu sagen, dass dieses System mit einem verschlüsselten /data läuft.

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

Diese fünf Eigenschaften werden von init gesetzt, wenn es versucht, /data mit von init.rc übergebenen Parametern zu mounten. vold verwendet diese, um das Crypto-Mapping einzurichten.
ro.crypto.tmpfs_options Sie werden von init.rc mit den Optionen gesetzt, die init beim Einhängen des tmpfs /data-Dateisystems verwenden soll.

Init-Aktionen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.