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
- Flows
- Ein neues Gerät mit forceencrypt
- Vorhandenes Gerät verschlüsseln
- Starten eines verschlüsselten Geräts mit Standardverschlüsselung
- Starten eines verschlüsselten Geräts ohne Standardverschlüsselung
- Fehler
- Speichern des verschlüsselten Schlüssels
- Kennwort ändern
- Verschlüsselungseigenschaften
- Eigenschaften
- Eigenschaften einrichten
- Init-Aktionen
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 einSVC_DISABLED
-Flag hinzu. Gestoppte Dienste reagieren nicht aufclass_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).
- Verschlüsseln Sie ein neues Gerät mit
- 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.
- Unverschlüsseltes Dateisystem mit
forceencrypt
-Flag/data
erkennen ist nicht verschlüsselt, muss aber sein, weilforceencrypt
es vorschreibt./data
aushängen. - Starten Sie die Verschlüsselung von
/data
vold.decrypt = "trigger_encryption"
löstinit.rc
aus, wasvold
veranlasst,/data
ohne Passwort zu verschlüsseln.(Keines ist gesetzt, weil dies ein neues Gerät sein sollte.) - Mount tmpfs
vold
mountet ein tmpfs/data
(unter Verwendung der tmpfs-Optionen ausro.crypto.tmpfs_options
) und setzt die Eigenschaftvold.encrypt_progress
auf 0.vold
bereitet das tmpfs/data
für das Booten eines verschlüsselten Systems vor und setzt dieEigenschaftvold.decrypt
auf:trigger_restart_min_framework
- 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.
- Wenn
/data
verschlüsselt ist, wird das Frameworkvold
heruntergefahren undvold.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
. - Mount
/data
init
mounten dann/data
auf einer tmpfs RAMDisk unter Verwendung von Parametern, die es vonro.crypto.tmpfs_options
übernimmt, das ininit.rc
gesetzt ist. - Start framework
Setzen Sie
vold
auftrigger_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
init
Auslöser aus, um mit dem Booten fortzufahren.
- Passwort prüfen
Das UI ruft
vold
mit dem Befehlcryptfs enablecrypto inplace
auf, wobeipasswd
das Sperrbildschirm-Passwort des Benutzers ist. - Abbau des Frameworks
vold
prü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 Eigenschaftvold.decrypt
auftrigger_shutdown_framework
. Dies veranlasstinit.rc
, die Dienste der Klassenlate_start
undmain
zu beenden. - Erstellen einer Krypto-Fußzeile
- Erstellen einer Breadcrumb-Datei
- Reboot
- Erkennen der Breadcrumb-Datei
- 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. - Während es verschlüsselt, mount tmpfs
vold
mountet ein tmpfs/data
(unter Verwendung der tmpfs-Optionen ausro.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
- Bringt das Framework zum Anzeigen des Fortschritts
trigger_restart_min_framework
veranlasstinit.rc
, die Klasse der Dienstemain
zu starten. Die Verschlüsselungsschleife aktualisiertvold.encrypt_progress
jedes Mal, wenn sie ein weiteres Prozent der Partition verschlüsselt. - Wenn
/data
verschlüsselt ist, aktualisiere die Krypto-FußzeileWenn
/data
erfolgreich verschlüsselt ist, löschtvold
das KennzeichenENCRYPTION_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 Eigenschaftvold.encrypt_progress
auferror_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.
- Erkenne verschlüsseltes
/data
ohne PasswortErkenne, dass das Android-Gerät verschlüsselt ist, weil
/data
nicht gemountet werden kann und eines der Flagsencryptable
oderforceencrypt
gesetzt ist.vold
setztvold.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. - Entschlüsseln /data
Erzeugt das Gerät
dm-crypt
über dem Blockgerät, so dass das Gerät einsatzbereit ist. - Einhängen /data
vold
hä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 dannvold.decrypt
auftrigger_post_fs_data
. Dies veranlasstinit.rc
, seinepost-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 Eigenschaftvold.decrypt
auf:trigger_restart_framework.
Dies veranlasstinit.rc
, die Dienste der Klassemain
erneut zu starten und auch die Dienste der Klasselate_start
zum ersten Mal seit dem Booten zu starten. - 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.
- Verschlüsseltes Gerät mit Passwort erkennen
Ermittelt, dass das Android-Gerät verschlüsselt ist, weil das Flag
ro.crypto.state = "encrypted"
vold
vold.decrypt
auftrigger_restart_min_framework
gesetzt ist, weil/data
mit einem Passwort verschlüsselt ist. - Mount tmpfs
init
setzt fünf Eigenschaften, um die anfänglichen Mount-Optionen für/data
mit Parametern zu speichern, die voninit.rc
übergeben wurden.vold
verwendet diese Eigenschaften, um die Kryptozuordnung einzurichten:-
ro.crypto.fs_type
-
ro.crypto.fs_real_blkdev
-
ro.crypto.fs_mnt_point
-
ro.crypto.fs_options
-
ro.crypto.fs_flags
(ASCII 8-stellige hexadezimale Zahl mit vorangestelltem 0x)
-
- 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
anvold
.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 demCRYPTO_ENCRYPTION_IN_PROGRESS
-Flag sucht. Wenn es gesetzt ist, wurde der Verschlüsselungsprozess unterbrochen, und es befinden sich verwertbare Daten auf dem Gerät. Wennvold
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. - 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 Befehlscryptfs checkpw
anvold
. 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), speichertvold
den Namen des entschlüsselten Blockgeräts in der Eigenschaftro.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. - Stop framework
Die Benutzeroberfläche zeigt eine Krypto-Boot-Grafik an und ruft dann
vold
mit dem Befehlcryptfs restart
auf.vold
setzt die Eigenschaftvold.decrypt
auftrigger_reset_main
, wasinit.rc
veranlasst,class_reset main
auszuführen. Dies stoppt alle Dienste in der Hauptklasse, wodurch das tmpfs/data
ausgehängt werden kann. - 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 Eigenschaftvold.post_fs_data_done
auf 0 und setzt dannvold.decrypt
auftrigger_post_fs_data
. Dies veranlasstinit.rc
, seinepost-fs-data
Befehle auszuführen. Sie erstellen alle notwendigen Verzeichnisse oder Links und setzen dannvold.post_fs_data_done
auf 1. Sobaldvold
die 1 in dieser Eigenschaft sieht, setzt es die Eigenschaftvold.decrypt
auftrigger_restart_framework
. Dies veranlasstinit.rc
, die Dienste der Klassemain
erneut zu starten und auch die Dienste der Klasselate_start
zum ersten Mal seit dem Booten zu starten. - Vollständiges Framework starten
Jetzt bootet das Framework alle seine Dienste unter Verwendung des entschlüsselten
/data
Dateisystems, 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:
- Verschlüsseltes Gerät mit einem Kennwort erkennen
- Tmpfs einhängen
- 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 vold
die 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:
- Erzeugen Sie einen zufälligen 16-Byte-Disk Encryption Key (DEK) und ein 16-Byte-Salz.
- Scrypt auf das Benutzerpasswort und das Salt anwenden, um den 32-Byte-Zwischenschlüssel 1 (IK1) zu erzeugen.
- 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.
- Aufgefüllte IK1 mit HBK, um 256 Byte IK2 zu erzeugen.
- Scrypt auf IK2 und Salt (dasselbe Salt wie in Schritt 2) anwenden, um 32-Byte-IK3 zu erzeugen.
- Die ersten 16 Bytes von IK3 als KEK und die letzten 16 Bytes als IV verwenden.
- 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. |
|
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. |