Festplattenverschlüsselung

Bei der Festplattenverschlüsselung werden alle Benutzerdaten auf einem Android-Gerät mit einem verschlüsselten Schlüssel verschlüsselt. Sobald ein Gerät verschlüsselt ist, werden alle vom Benutzer erstellten Daten automatisch verschlüsselt, bevor sie auf die Festplatte übertragen werden, und alle Lesevorgänge entschlüsseln die Daten automatisch, 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 diese neuen Funktionen ein:

  • Es wurde eine schnelle Verschlüsselung erstellt, die nur verwendete Blöcke auf der Datenpartition verschlüsselt, um zu vermeiden, dass der erste Start lange dauert. Derzeit unterstützen nur ext4- und f2fs-Dateisysteme die schnelle Verschlüsselung.
  • Hinzugefügt wurde den forceencrypt fstab - Flag beim ersten Start zu verschlüsseln.
  • Unterstützung für Muster und Verschlüsselung ohne Passwort hinzugefügt.
  • Hardware-gestützte Speicherung des Verschlüsselungsschlüssels mit der Signierfunktion von Trusted Execution Environment (TEE) hinzugefügt (z. B. in einer TrustZone). Siehe Speichern der verschlüsselten Schlüssel für weitere Details.

Achtung: Die Geräte auf Android aktualisiert 5.0 und dann können verschlüsselt auf einen unverschlüsselten Zustand durch die Werkseinstellungen zurücksetzen zurückgeschickt 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.

So funktioniert die Android-Festplattenverschlüsselung

Android Full-Disk - Verschlüsselung auf basiert dm-crypt , die eine Kernel - Funktion , dass die Arbeiten an der Block - Device - Schicht ist. Aus diesem Grunde , Verschlüsselung arbeitet mit Embedded Multimediacard (eMMC) und ähnlichen Blitzgeräten , die präsentieren sich an den Kernel als Blockgeräte. Eine Verschlüsselung ist mit YAFFS nicht möglich, das direkt mit einem rohen NAND-Flash-Chip kommuniziert.

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

Hinweis: OEMs kann ein 128-Bit oder höher den Hauptschlüssel zu verschlüsseln.

In der Android 5.0-Version gibt es vier Arten von Verschlüsselungsstatus:

  • Ursprünglich
  • STIFT
  • Passwort
  • Muster

Beim ersten Booten erstellt das Gerät einen zufällig generierten 128-Bit-Hauptschlüssel und hasht ihn dann mit einem Standardkennwort und gespeichertem Salt. Das Standardkennwort lautet: "default_password" Der resultierende Hash wird jedoch auch über ein TEE (wie TrustZone) signiert, das einen Hash der Signatur verwendet, um den Hauptschlüssel zu verschlüsseln.

Sie können das Standardkennwort im Android Open Source Project definiert finden cryptfs.cpp Datei.

Wenn der Benutzer PIN/Passwort oder Passwort auf dem Gerät festlegt, wird nur der 128-Bit-Schlüssel neu verschlüsselt und gespeichert. (dh. Benutzer - PIN / Pass / Musteränderungen verursachen keine erneute Verschlüsselung von Benutzerdaten.) Beachten Sie, dass verwaltete Gerät unterliegt PIN, Muster sein kann, oder das Kennwort Einschränkungen.

Die Verschlüsselung wird von verwaltet init und vold . init ruft vold und vold Sätze Eigenschaften Triggerereignisse in init. Auch andere Teile des Systems schauen sich die Eigenschaften an, um Aufgaben wie Statusmeldungen, Passwortabfrage oder Aufforderung zum Zurücksetzen auf die Werkseinstellungen im Falle eines schwerwiegenden Fehlers durchzuführen. Um Verschlüsselungsfunktionen in aufrufen vold , verwendet das System das Kommandozeilen - Tool vdc ‚s cryptfs Befehle: checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw und clearpw .

Um zu verschlüsseln, entschlüsseln oder wischen /data , /data dürfen nicht montiert werden. Um jedoch jede Benutzeroberfläche (UI) zu zeigen, muss der Rahmen beginnen und das Framework erfordert /data auszuführen. Um dieses Rätsel zu lösen, ein temporäres Dateisystem auf montiert /data . Auf diese Weise kann Android bei Bedarf nach Passwörtern fragen, den Fortschritt anzeigen oder eine Datenlöschung vorschlagen. Es macht die Beschränkung auferlegen , dass aus dem temporären Dateisystem zu wahren , um Schalter , um /data - Dateisystem, das System alle Prozesse mit offenen Dateien auf dem temporären Dateisystem stoppen muß und diese Prozesse auf der Real Neustart /data - Dateisystem. Um dies zu tun, müssen alle Dienste in einer der drei Gruppen sein: core , main und late_start .

  • core : Niemals heruntergefahren nach dem Start.
  • main : Shut down und dann neu starten , nachdem das Disk Passwort eingegeben wird.
  • late_start : Fängt erst nach /data entschlüsselt worden und montiert.

Um diese Aktionen auslösen, die vold.decrypt ist Eigenschaft zu setzen verschiedene Strings . Zu töten und Neustarten von Diensten, die init sind Befehle ein :

  • class_reset : Stoppen einen Dienst , sondern ermöglicht es mit class_start neu gestartet werden.
  • class_start : Startet einen Dienst.
  • class_stop : Stoppen einen Dienst und fügt eine SVC_DISABLED Flagge. Gestoppt Dienste reagieren nicht auf class_start .

Flüsse

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

  • Verschlüsseln Sie ein zuvor unverschlüsseltes Gerät:
    • Verschlüsseln Sie ein neues Gerät mit forceencrypt : Mandatory Verschlüsselung beim ersten Start (ab Android L).
    • Ein vorhandenes Gerät verschlüsseln: Vom Benutzer initiierte Verschlüsselung (Android K und früher).
  • Booten Sie ein verschlüsseltes Gerät:
    • Starten eines verschlüsselten Geräts ohne Passwort: Starten 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 Passwort: Booten eines verschlüsselten Geräts, das über ein festgelegtes Passwort verfügt.

Zusätzlich zu diesen Strömungen, nicht das Gerät auch zu verschlüsseln /data . Jeder der Flüsse wird unten im Detail erklärt.

Verschlüsseln Sie ein neues Gerät mit Forcencrypt

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

  1. Detect unverschlüsselten Dateisystem mit forceencrypt flag

    /data sind nicht verschlüsselt , sondern Bedürfnisse , weil sein forceencrypt Mandate es. Aushängen /data .

  2. Start Verschlüsselungs- /data

    vold.decrypt = "trigger_encryption" Trigger init.rc , was dazu führen wird vold zu verschlüsseln /data ohne Passwort. (Keine ist eingestellt, da es sich um ein neues Gerät handeln sollte.)

  3. tmpfs montieren

    vold Mounts a tmpfs /data (die tmpfs Optionen verwenden ro.crypto.tmpfs_options ) und setzt die Eigenschaft vold.encrypt_progress auf 0 vold prepepares die tmpfs /data zum Booten eines verschlüsselten System und stellt die Eigenschaft vold.decrypt zu: trigger_restart_min_framework

  4. Rufen Sie den Rahmen auf, um den Fortschritt zu zeigen

    Da das Gerät praktisch keine Daten zum Verschlüsseln hat, wird der Fortschrittsbalken oft nicht angezeigt, weil die Verschlüsselung so schnell erfolgt. Siehe Verschlüsseln ein vorhandenes Gerät , um weitere Informationen über den Fortschritt UI.

  5. Wenn /data verschlüsselt ist, nehmen Sie den Rahmen nach unten

    vold Sätze vold.decrypt zu trigger_default_encryption , die die beginnt defaultcrypto Service. (Damit wird den Fluss unten für ein Standard - verschlüsselten Benutzerdaten Montag.) trigger_default_encryption prüft den Verschlüsselungstyp zu sehen , ob /data mit oder ohne Kennwort verschlüsselt sind. Da Android 5.0-Geräte beim ersten Start verschlüsselt werden, sollte kein Kennwort festgelegt werden. deshalb wir entschlüsseln und montieren /data .

  6. Berg /data

    init dann Mounts /data auf einem tmpfs RAMDISK Parametern nimmt sie von oben ro.crypto.tmpfs_options , die festgelegt ist init.rc .

  7. Framework starten

    Set vold zu trigger_restart_framework , die den üblichen Startvorgang fortgesetzt.

Ein 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 Vorgang ist benutzerinitiiert und wird im Code als „Inplace-Verschlüsselung“ bezeichnet. Wenn ein Benutzer ein Gerät verschlüsseln möchte, stellt die Benutzeroberfläche sicher, dass der Akku vollständig aufgeladen ist und das Netzteil angeschlossen ist, damit genügend Strom vorhanden ist, um den Verschlüsselungsvorgang abzuschließen.

Achtung: Wenn das Gerät von Strom ausläuft und wird ausgeschaltet, bevor es fertig Verschlüsselungs- hat, werden Dateidaten in einem teilweise verschlüsselten Zustand. Das Gerät muss auf die Werkseinstellungen zurückgesetzt werden und alle Daten gehen verloren.

Um Inplace - Verschlüsselung zu aktivieren, vold beginnt eine Schleife jeden Sektor des realen Blockgerätes zu lesen und es dann an das Krypto - Blockgerät schreiben. vold überprüft, ob ein Sektor in Gebrauch ist , bevor das Lesen und Schreiben es, die Verschlüsselung viel schneller auf ein neues Gerät macht , die wenig bis gar keine Daten hat.

Zustand Geräte: Set ro.crypto.state = "unencrypted" und führen Sie die on nonencrypted init Trigger Booten fortzusetzen.

  1. Passwort prüfen

    Die Benutzeroberfläche ruft vold mit dem Befehl cryptfs enablecrypto inplace wo passwd den Sperrbildschirm Kennwort des Benutzers ist.

  2. Nehmen Sie den Rahmen ab

    vold prüft , ob Fehler, -1 , wenn es kann nicht verschlüsseln, und druckt einen Grund im Protokoll. Wenn es verschlüsseln kann, setzt es die Eigenschaft vold.decrypt zu trigger_shutdown_framework . Diese Ursachen init.rc Dienstleistungen in den Klassen zu stoppen late_start und main .

  3. Erstellen Sie eine Krypto-Fußzeile
  4. Erstellen Sie eine Breadcrumb-Datei
  5. Neustart
  6. Breadcrumb-Datei erkennen
  7. Start Verschlüsselungs- /data

    vold setzt dann die Krypto - Mapping, die über eine virtuelle Kryptoblockvorrichtung , die Karten auf der realen Blockgerät erzeugt aber verschlüsselt jeden Sektor , wie es geschrieben ist, und entschlüsselt jeden Sektor , wie es gelesen wird. vold dann erzeugt und die Krypto - Metadaten schreibt.

  8. Während es verschlüsselt wird, mounten Sie tmpfs

    vold Halterungen ein tmpfs /data (die tmpfs Optionen verwenden ro.crypto.tmpfs_options ) und setzt die Eigenschaft vold.encrypt_progress auf 0 vold die tmpfs bereitet /data für das Booten eines verschlüsselten System und setzt die Eigenschaft vold.decrypt zu: trigger_restart_min_framework

  9. Rufen Sie den Rahmen auf, um den Fortschritt zu zeigen

    trigger_restart_min_framework verursacht init.rc die Start main Wenn der Rahmen sieht , dass vold.encrypt_progress auf 0 gesetzt ist , bringt es die Fortschrittsbalken UI auf, die alle fünf Sekunden , die Eigenschaft abfragt und aktualisieren einen Fortschrittsbalken. Die Verschlüsselungsschleife Updates vold.encrypt_progress jedes Mal , es ein weiteres Prozent der Partition verschlüsselt.

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

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

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

    Wenn der Neustart aus irgendeinem Grund fehlschlägt, vold setzt die Eigenschaft vold.encrypt_progress zu error_reboot_failed und die Benutzeroberfläche sollte eine Meldung angezeigt , die den Benutzer auffordert , einen Knopf zu Neustart zu drücken. Es wird nicht erwartet, dass dies jemals der Fall ist.

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

Dies passiert, wenn Sie ein verschlüsseltes Gerät ohne Passwort starten. Da Android 5.0 - Geräte auf dem ersten Boot - verschlüsselt sind, soll es kein festgelegtes Passwort sein , und deshalb ist dies der Standardverschlüsselungsstatus.

  1. Detect verschlüsselt /data ohne Passwort

    Erkennen , dass das Gerät , weil Android verschlüsselt ist /data nicht montiert werden kann , und eine der Fahnen encryptable oder forceencrypt gesetzt.

    vold Sätze vold.decrypt zu trigger_default_encryption , die die beginnt defaultcrypto Service. trigger_default_encryption prüft den Verschlüsselungstyp zu sehen , ob /data mit oder ohne Kennwort verschlüsselt ist.

  2. /Daten entschlüsseln

    Erzeugt das dm-crypt - Gerät über das Block - Gerät , damit das Gerät betriebsbereit ist.

  3. Mount /Daten

    vold montiert dann die reale entschlüsselt /data und bereitet dann die neue Partition. Es setzt die Eigenschaft vold.post_fs_data_done auf 0 und setzt dann vold.decrypt zu trigger_post_fs_data . Diese Ursachen init.rc seine laufen post-fs-data - Befehle. Sie werden alle notwendigen Verzeichnisse oder Links erstellen und dann Satz vold.post_fs_data_done 1.

    Sobald vold die 1 in dieser Eigenschaft sieht, setzt es die Eigenschaft vold.decrypt zu: trigger_restart_framework. Diese Ursachen init.rc Dienstleistungen der Klasse starten main wieder und auch die Dienstleistungen der Klasse beginnen late_start zum ersten Mal seit dem Boot.

  4. Framework starten

    Nun werden die Rahmen Stiefel alle seine Dienste die entschlüsselten mit /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 Passwort des Geräts kann eine PIN, ein Muster oder ein Passwort sein.

  1. Verschlüsselte Geräte mit einem Passwort erkennen

    Erkennen , dass das Android Gerät verschlüsselt wird , weil das Flag ro.crypto.state = "encrypted"

    vold Sätze vold.decrypt zu trigger_restart_min_framework da /data mit einem Passwort verschlüsselt.

  2. tmpfs montieren

    init setzt fünf Eigenschaften die ersten Mount - Optionen für gegeben speichern /data mit den Parametern von geben init.rc . vold nutzt diese Eigenschaften das Krypto - Mapping 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 Hexadezimalzahl von 0x voran)
  3. Starten Sie das Framework, um zur Passworteingabe aufzufordern

    Der Rahmen wird gestartet und sieht , dass vold.decrypt eingestellt ist trigger_restart_min_framework . Dies teilt den Rahmen , dass es auf einer tmpfs bootet /data , und es muss das Benutzer - Passwort erhalten.

    Zunächst muss jedoch sichergestellt werden, dass die Festplatte ordnungsgemäß verschlüsselt wurde. Es sendet den Befehl cryptfs cryptocomplete zu vold . vold 0 zurück , wenn die Verschlüsselung erfolgreich abgeschlossen wurde, -1 auf interne Fehler oder -2 , wenn die Verschlüsselung wurde nicht erfolgreich abgeschlossen. vold bestimmt diese durch in den Krypto - Metadaten für die Suche CRYPTO_ENCRYPTION_IN_PROGRESS Flagge. Wenn es gesetzt ist, wurde der Verschlüsselungsvorgang unterbrochen und es befinden sich keine verwertbaren Daten auf dem Gerät. Wenn vold einen Fehler zurückgibt, sollte die UI eine Nachricht an Neustart und Werksreset des Gerätes, dem Benutzer angezeigt werden und der Benutzer eine Taste zu drücken geben dies zu tun.

  4. Daten mit Passwort entschlüsseln

    Sobald cryptfs cryptocomplete erfolgreich ist, fragt der Rahmen zeigt eine Benutzeroberfläche für das Plattenkennwort. Die UI prüft das Passwort durch den Befehl Senden cryptfs checkpw zu vold . Wenn das Passwort korrekt ist (die erfolgreich bestimmt wird durch die entschlüsselten Montage /data an einem temporären Speicherort, dann ist es Aushängen), vold speichert den Namen des entschlüsselten Blockgerät in der Eigenschaft ro.crypto.fs_crypto_blkdev und kehrt Status 0 auf den UI . Wenn das Kennwort falsch ist, wird -1 an die Benutzeroberfläche zurückgegeben.

  5. Rahmen stoppen

    Der UI - Puts auf eine Krypto - Boot - Grafik und ruft dann vold mit dem Befehl cryptfs restart . vold setzt die Eigenschaft vold.decrypt zu trigger_reset_main , die bewirkt , dass init.rc tun class_reset main . Dies beendet alle Dienste in der Hauptklasse, die die tmpfs erlaubt /data ausgehängt werden.

  6. Berg /data

    vold montiert dann die reale entschlüsselt /data und bereitet die neue Partition (die nie hergestellt worden sind, wenn sie mit dem Wischtuch Option verschlüsselt wurde, die nicht auf den ersten Release unterstützt wird). Es setzt die Eigenschaft vold.post_fs_data_done auf 0 und setzt dann vold.decrypt zu trigger_post_fs_data . Diese Ursachen init.rc seine laufen post-fs-data - Befehle. Sie werden alle notwendigen Verzeichnisse oder Links erstellen und dann Satz vold.post_fs_data_done bis 1. Sobald vold die 1 in dieser Eigenschaft sieht, setzt sich die Eigenschaft vold.decrypt zu trigger_restart_framework . Diese Ursachen init.rc Dienstleistungen der Klasse starten main wieder und auch die Dienstleistungen der Klasse beginnen late_start zum ersten Mal seit dem Boot.

  7. Komplettes Framework starten

    Jetzt sind die Rahmen Stiefel alle seine Dienste die entschlüsselte mit /data - Dateisystem und das System ist einsatzbereit.

Versagen

Ein Gerät, das nicht entschlüsselt werden kann, kann aus verschiedenen Gründen falsch sein. Das Gerät startet mit den normalen Schritten zum Booten:

  1. Verschlüsselte Geräte mit einem Passwort erkennen
  2. tmpfs montieren
  3. Starten Sie das Framework, um zur Passworteingabe aufzufordern

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

  • Passwort stimmt überein, kann aber keine Daten entschlüsseln
  • Benutzer gibt 30 Mal ein falsches Passwort ein

Wenn diese Fehler nicht behoben werden, prompt Benutzer Fabrik wischen:

Wenn vold erkennt während des Verschlüsselungsvorgangs einen Fehler, und wenn noch keine Daten zerstört worden ist , und der Rahmen ist oben, vold setzt die Eigenschaft vold.encrypt_progress zu error_not_encrypted . Die Benutzeroberfläche fordert den Benutzer zum Neustart auf und warnt ihn, dass der Verschlüsselungsprozess nie gestartet wurde. Wenn der Fehler auftritt , nachdem der Rahmen abgerissen wurde, aber bevor die Fortschrittsbalken UI oben ist, vold wird das System neu starten. Wenn der Neustart fehlschlägt, setzt es vold.encrypt_progress zu error_shutting_down und -1 zurück; aber es wird nichts geben, um den Fehler abzufangen. Dies wird nicht erwartet.

Wenn vold einen Fehler während des Verschlüsselungsvorgangs erkennt, setzt er vold.encrypt_progress auf error_partially_encrypted und -1 zurück. Die Benutzeroberfläche sollte dann eine Meldung anzeigen, die besagt, dass die Verschlüsselung fehlgeschlagen ist, und eine Schaltfläche bereitstellen, mit der der Benutzer das Gerät auf die Werkseinstellungen zurücksetzen kann.

Speichern des verschlüsselten Schlüssels

Der verschlüsselte Schlüssel wird in den Krypto-Metadaten gespeichert. Die Hardwareunterstützung wird mithilfe der Signaturfunktion von Trusted Execution Environment (TEE) implementiert. Zuvor haben wir den Hauptschlüssel mit einem Schlüssel verschlüsselt, der durch Anwenden von scrypt auf das Passwort des Benutzers und den gespeicherten Salt generiert 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 verwendet, um den Hauptschlüssel zu verschlüsseln und zu entschlüsseln. Um diesen Schlüssel zu speichern:

  1. Generieren Sie einen zufälligen 16-Byte-Festplattenverschlüsselungsschlüssel (DEK) und einen 16-Byte-Salt.
  2. Wenden Sie scrypt auf das Benutzerkennwort und den Salt an, um einen 32-Byte-Zwischenschlüssel 1 (IK1) zu erstellen.
  3. Füllen Sie IK1 mit null Byte auf die Größe des hardwaregebundenen privaten Schlüssels (HBK) auf. Konkret schreiben wir als: 00 || IK1 || 00..00; ein Null-Byte, 32 IK1-Bytes, 223 Null-Bytes.
  4. IK1 mit HBK vorzeichenaufgefüllt, um 256-Byte-IK2 zu erzeugen.
  5. Wenden Sie scrypt auf IK2 und Salt an (gleiches Salt wie in Schritt 2), um 32-Byte-IK3 zu erzeugen.
  6. Verwenden Sie die ersten 16 Bytes von IK3 als KEK und die letzten 16 Bytes als IV.
  7. DEK mit AES_CBC, mit Schlüssel KEK und Initialisierungsvektor IV verschlüsseln.

Passwort ändern

Wenn ein Benutzer entschließt , zu ändern oder ihr Passwort in den Einstellungen entfernen, sendet die UI der Befehl cryptfs changepw zu vold und vold wieder verschlüsselt den Plattenhauptschlüssel mit dem neuen Passwort.

Verschlüsselungseigenschaften

vold und init kommunizieren miteinander durch Eigenschaften einstellen. Hier ist eine Liste der verfügbaren Eigenschaften für die Verschlüsselung.

Vold-Eigenschaften

Eigentum Beschreibung
vold.decrypt trigger_encryption Verschlüsseln Sie das Laufwerk ohne Kennwort.
vold.decrypt trigger_default_encryption Überprüfen Sie das Laufwerk, um festzustellen, ob es ohne Kennwort verschlüsselt ist. Wenn es ist, zu entschlüsseln und montieren, sonst Satz vold.decrypt zu trigger_restart_min_framework.
vold.decrypt trigger_reset_main Wird von vold eingestellt, um die Benutzeroberfläche herunterzufahren und nach dem Festplattenkennwort zu fragen.
vold.decrypt trigger_post_fs_data Set von vold prep /data mit der notwendigen Verzeichnisse, et al.
vold.decrypt trigger_restart_framework Wird von vold gesetzt, um das eigentliche Framework und alle Dienste zu starten.
vold.decrypt trigger_shutdown_framework Wird von vold festgelegt, um das gesamte Framework herunterzufahren, um die Verschlüsselung zu starten.
vold.decrypt trigger_restart_min_framework Gesetzt von vold die Statusleiste UI für die Verschlüsselung oder Eingabeaufforderung für das Kennwort zu starten, je nach dem Wert von ro.crypto.state .
vold.encrypt_progress Wenn das Framework gestartet wird und diese Eigenschaft festgelegt ist, wechseln Sie in den Fortschrittsbalken-UI-Modus.
vold.encrypt_progress 0 to 100 Die Benutzeroberfläche der Fortschrittsleiste sollte den eingestellten Prozentwert anzeigen.
vold.encrypt_progress error_partially_encrypted Die Benutzeroberfläche der Fortschrittsleiste 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 Benutzeroberfläche der Fortschrittsleiste sollte eine Meldung anzeigen, die besagt, dass die Verschlüsselung abgeschlossen ist, und dem Benutzer eine Schaltfläche zum Neustarten des Geräts geben. Dieser Fehler wird nicht erwartet.
vold.encrypt_progress error_not_encrypted Die Benutzeroberfläche der Fortschrittsleiste sollte eine Meldung anzeigen, dass ein Fehler aufgetreten ist, keine Daten verschlüsselt wurden oder verloren wurden, und dem Benutzer eine Schaltfläche zum Neustarten des Systems geben.
vold.encrypt_progress error_shutting_down Die Benutzeroberfläche der Fortschrittsleiste wird nicht ausgeführt, daher ist unklar, wer auf diesen Fehler reagiert. Und es sollte sowieso nie passieren.
vold.post_fs_data_done 0 Set von vold kurz vor Einstellung vold.decrypt zu trigger_post_fs_data .
vold.post_fs_data_done 1 Set von init.rc oder init.rc kurz nach der Aufgabe Finishing post-fs-data .

init-Eigenschaften

Eigentum Beschreibung
ro.crypto.fs_crypto_blkdev Stellen Sie durch den vold Befehl checkpw für eine spätere Verwendung durch den vold Befehl restart .
ro.crypto.state unencrypted Set von init dieses System zu sagen , läuft mit einer unverschlüsselten /data ro.crypto.state encrypted . Gesetzt von init dieses System zu sagen , wird mit einem verschlüsselten Laufe /data .

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 durch gesetzt init , wenn er versucht zu montieren /data mit den Parametern übergeben von init.rc . vold nutzt diese die Krypto - Mapping einrichten.
ro.crypto.tmpfs_options Set von init.rc mit den Optionen init verwenden sollte , wenn die tmpfs Montage /data - Dateisystem.

Init-Aktionen

on post-fs-data
on nonencrypted
on property:vold.decrypt=trigger_reset_main
on property:vold.decrypt=trigger_post_fs_data
on property:vold.decrypt=trigger_restart_min_framework
on property:vold.decrypt=trigger_restart_framework
on property:vold.decrypt=trigger_shutdown_framework
on property:vold.decrypt=trigger_encryption
on property:vold.decrypt=trigger_default_encryption