Bei der Festplattenvollverschlüsselung werden alle Nutzerdaten auf einem Android-Gerät mit einem verschlüsselten Schlüssel codiert. Sobald ein Gerät verschlüsselt ist, werden alle vom Nutzer erstellten Daten automatisch verschlüsselt, bevor sie auf die Festplatte geschrieben werden. Bei allen Lesevorgängen werden die Daten automatisch entschlüsselt, bevor sie an den aufrufenden Prozess zurückgegeben werden.
Die vollständige Datenträgerverschlüsselung wurde in Android 4.4 eingeführt. Mit Android 5.0 kamen jedoch folgende neue Funktionen hinzu:
- Es wurde eine schnelle Verschlüsselung erstellt, bei der nur verwendete Blöcke auf der Datenpartition verschlüsselt werden, um zu vermeiden, dass der erste Start lange dauert. Die schnelle Verschlüsselung wird derzeit nur von den Dateisystemen ext4 und f2fs unterstützt.
- Das fstab-Flag
forceencrypt
wurde zum Verschlüsseln beim ersten Start hinzugefügt. - Muster und Verschlüsselung ohne Passwort werden jetzt unterstützt.
- Hardwaregestützter Speicher des Verschlüsselungsschlüssels mithilfe der Signaturfunktion der Trusted Execution Environment (TEE) hinzugefügt (z. B. in einer TrustZone). Weitere Informationen finden Sie unter Verschlüsselten Schlüssel speichern.
Achtung:Geräte, die auf Android 5.0 aktualisiert und dann verschlüsselt wurden, können beim Zurücksetzen auf die Werkseinstellungen 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.
So funktioniert die Android-Vollverschlüsselungsverschlüsselung
Die Android-Volllaufwerkverschlüsselung basiert auf dm-crypt
, einer Kernel-Funktion auf Blockgeräteebene. Aus diesem Grund funktioniert die Verschlüsselung mit Embedded MultiMediaCard (eMMC) und ähnlichen Flash-Geräten, die sich dem Kernel als Blockgeräte präsentieren. Mit YAFFS ist keine Verschlüsselung möglich, da es direkt mit einem Roh-NAND-Flash-Chip kommuniziert.
Der Verschlüsselungsalgorithmus ist AES-128 (Advanced Encryption Standard) mit Cipher-Block-Chaining (CBC) und ESSIV:SHA256. Der Masterschlü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 Bit sind optional).
Hinweis:OEMs können 128-Bit oder höher verwenden, um den Masterschlüssel zu verschlüsseln.
In der Android 5.0-Version gibt es vier Arten von Verschlüsselungsstatus:
- Standard
- PIN
- Passwort
- Muster
Beim ersten Start erstellt das Gerät einen zufällig generierten 128‑Bit-Masterschlüssel und hasht ihn dann mit einem Standardpasswort und einem gespeicherten Salt. Das Standardpasswort lautet „default_password“. Der resultierende Hash wird jedoch auch über einen TEE (z. B. TrustZone) signiert, der einen Hash der Signatur verwendet, um den Masterschlüssel zu verschlüsseln.
Das Standardpasswort finden Sie in der Datei cryptfs.cpp des Android Open Source Project.
Wenn der Nutzer die PIN, das Ticket oder das Passwort auf dem Gerät festlegt, wird nur der 128-Bit-Schlüssel neu verschlüsselt und gespeichert. Das bedeutet, dass Änderungen an der PIN, dem Passwort oder dem Muster des Nutzers NICHT zu einer erneuten Verschlüsselung der Nutzerdaten führen. Beachten Sie, dass verwaltete Geräte möglicherweise Einschränkungen durch PIN, Muster oder Passwort unterliegen.
Die Verschlüsselung wird von init
und vold
verwaltet.
init
ruft vold
auf und vold legt Eigenschaften fest, um Ereignisse in init auszulösen. Andere Teile des Systems rufen die Properties ebenfalls auf, um Aufgaben wie den Berichtsstatus zu prüfen, ein Passwort anzufordern oder im Falle eines schwerwiegenden Fehlers zum Zurücksetzen auf die Werkseinstellungen aufzufordern. Zum Aufrufen von Verschlüsselungsfunktionen in vold
verwendet das System die cryptfs
-Befehle des vdc
-Befehlszeilentools: checkpw
, restart
, enablecrypto
, changepw
, cryptocomplete
, verifypw
, setfield
, getfield
, mountdefaultencrypted
, getpwtype
, getpw
und clearpw
.
Zum Verschlüsseln, Entschlüsseln oder Löschen von /data
darf /data
nicht bereitgestellt werden. Damit jedoch eine Benutzeroberfläche (UI) angezeigt werden kann, muss das Framework gestartet werden und es muss /data
ausgeführt werden. Um dieses Problem zu lösen, wird ein temporäres Dateisystem unter /data
bereitgestellt.
So kann Android nach Passwörtern fragen, den Fortschritt anzeigen oder bei Bedarf eine Datenlöschung vorschlagen. Die Einschränkung besteht jedoch darin, dass das System zum Wechseln vom temporären Dateisystem zum echten /data
-Dateisystem jeden Prozess mit geöffneten Dateien im temporären Dateisystem beenden und diese Prozesse im echten /data
-Dateisystem neu starten muss. Dazu müssen alle Dienste in einer der drei Gruppen core
, main
und late_start
sein.
core
: Wird nach dem Start nie heruntergefahren.main
: Nach Eingabe des Laufwerkpassworts herunterfahren und dann neu starten.late_start
: startet erst, nachdem/data
entschlüsselt und bereitgestellt wurde.
Zum Auslösen dieser Aktionen wird das Attribut vold.decrypt
auf verschiedene Strings festgelegt.
So beenden und starten Sie Dienste mit init
:
class_reset
: Ein Dienst wird beendet, kann aber mit „class_start“ neu gestartet werden.class_start
: Startet einen Dienst neu.class_stop
: Ein Dienst wird angehalten und einSVC_DISABLED
-Flag wird hinzugefügt. Gestoppte Dienste antworten nicht aufclass_start
.
Datenflüsse
Für ein verschlüsseltes Gerät gibt es vier Abläufe. Ein Gerät wird nur einmal verschlüsselt und durchläuft dann einen normalen Bootvorgang.
- So verschlüsseln Sie ein zuvor unverschlüsseltes Gerät:
- Neues Gerät mit
forceencrypt
verschlüsseln: Obligatorische Verschlüsselung beim ersten Start (ab Android L). - Vorhandenes Gerät verschlüsseln: Vom Nutzer initiierte Verschlüsselung (Android K und niedriger).
- Neues Gerät mit
- Starten Sie ein verschlüsseltes Gerät:
- Verschlüsseltes Gerät ohne Passwort starten: Ein verschlüsseltes Gerät ohne festgelegtes Passwort wird gestartet (für Geräte mit Android 5.0 und höher relevant).
- Verschlüsseltes Gerät mit Passwort starten: Starten eines verschlüsselten Geräts, für das ein Passwort festgelegt wurde.
Zusätzlich zu diesen Übertragungen kann das Gerät auch /data
nicht verschlüsseln.
Jeder dieser Abläufe wird unten ausführlich erläutert.
Neues Gerät mit „forceencrypt“ verschlüsseln
Dies ist der normale erste Startvorgang für ein Gerät mit Android 5.0.
- Unverschlüsseltes Dateisystem mit dem Flag
forceencrypt
erkennen/data
ist nicht verschlüsselt, dies ist jedoch erforderlich, weilforceencrypt
dies vorschreibt. Trennen Sie/data
. /data
verschlüsselnvold.decrypt = "trigger_encryption"
löstinit.rc
aus, wodurchvold
/data
ohne Passwort verschlüsselt. (Es ist keine festgelegt, da es sich um ein neues Gerät handeln sollte.)- Tmpfs bereitstellen
vold
stellt ein tmpfs-/data
bereit (mit den tmpfs-Optionen ausro.crypto.tmpfs_options
) und setzt das Attributvold.encrypt_progress
auf 0.vold
bereitet den tmpfs-/data
für den Start eines verschlüsselten Systems vor und legt das Attributvold.decrypt
auftrigger_restart_min_framework
fest: - Nennen Sie das Framework, um den Fortschritt zu demonstrieren.
Da auf dem Gerät praktisch keine Daten zu verschlüsseln sind, wird die Fortschrittsanzeige nicht oft angezeigt, da die Verschlüsselung so schnell erfolgt. Weitere Informationen zur Benutzeroberfläche für den Fortschritt finden Sie unter Vorhandenes Gerät verschlüsseln.
- Deaktivieren Sie das Framework, wenn
/data
verschlüsselt ist.vold
setztvold.decrypt
auftrigger_default_encryption
, wodurch derdefaultcrypto
-Dienst gestartet wird. Damit wird der Ablauf unten für die Bereitstellung standardmäßig verschlüsselter Nutzerdaten gestartet.trigger_default_encryption
prü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 festgelegt sein. Daher entschlüsseln und bereitstellen wir/data
. - Mount
/data
Anschließend stellt
init
/data
auf einer tmpfs-RAMDisk mit Parametern bereit, die vonro.crypto.tmpfs_options
abgerufen werden und ininit.rc
festgelegt sind. - Framework starten
vold
setztvold.decrypt
auftrigger_restart_framework
. Dadurch wird der übliche Bootvorgang fortgesetzt.
Vorhandenes Gerät verschlüsseln
Das passiert, wenn Sie ein unverschlüsseltes Android-Gerät mit Version K oder niedriger verschlüsseln, das zu Android L migriert wurde.
Dieser Vorgang wird vom Nutzer initiiert und im Code als „In-Place-Verschlüsselung“ bezeichnet. Wenn ein Nutzer ein Gerät verschlüsseln möchte, wird auf der Benutzeroberfläche geprüft, ob der Akku vollständig geladen und das Netzteil angeschlossen ist, damit der Verschlüsselungsprozess abgeschlossen werden kann.
Warnung: Wenn der Akku des Geräts leer ist und es heruntergefahren wird, bevor die Verschlüsselung abgeschlossen ist, sind die Dateidaten nur teilweise verschlüsselt. Das Gerät muss auf die Werkseinstellungen zurückgesetzt werden und alle Daten gehen verloren.
Zum Aktivieren der direkten Verschlüsselung startet vold
eine Schleife, in der jeder Sektor des echten Blockgeräts gelesen und dann in das kryptografische Blockgerät geschrieben wird. vold
prüft, ob ein Sektor belegt ist, bevor er gelesen und darauf geschrieben wird. Dadurch ist die Verschlüsselung auf einem neuen Gerät mit wenig bis gar keinen Daten viel schneller.
Gerätestatus: Legen Sie ro.crypto.state = "unencrypted"
fest und führen Sie den on nonencrypted
-init
-Trigger aus, um den Bootvorgang fortzusetzen.
- Passwort prüfen
Die UI ruft
vold
mit dem Befehlcryptfs enablecrypto inplace
auf, wobeipasswd
das Passwort des Sperrbildschirms des Nutzers ist. - Rahmenbedingungen entfernen
vold
prüft auf Fehler, gibt -1 zurück, wenn eine Verschlüsselung nicht möglich ist, und gibt einen Grund im Log aus. Wenn eine Verschlüsselung möglich ist, wird die Propertyvold.decrypt
auftrigger_shutdown_framework
festgelegt. Dadurch werden voninit.rc
die Dienste in den Klassenlate_start
undmain
angehalten. - Krypto-Fußzeile erstellen
- Brotkrummendatei erstellen
- Neu starten
- Navigationspfaddatei erkennen
/data
verschlüsselnvold
richtet dann die kryptografische Zuordnung ein, die ein virtuelles kryptografisches Blockgerät erstellt, das dem echten Blockgerät zugeordnet wird, aber jeden Sektor beim Schreiben verschlüsselt und jeden Sektor beim Lesen entschlüsselt.vold
erstellt dann die Krypto-Metadaten und schreibt sie aus.- Tmpfs während der Verschlüsselung bereitstellen
vold
stellt ein tmpfs-/data
bereit (mit den tmpfs-Optionen vonro.crypto.tmpfs_options
) und setzt das Attributvold.encrypt_progress
auf 0.vold
bereitet das tmpfs-/data
für das Starten eines verschlüsselten Systems vor und legt die Eigenschaftvold.decrypt
auf Folgendes fest:trigger_restart_min_framework
- Framework aufrufen, um den Fortschritt anzuzeigen
trigger_restart_min_framework
veranlasstinit.rc
, die Dienstklassemain
zu starten. Wenn das Framework erkennt, dassvold.encrypt_progress
auf 0 gesetzt ist, wird die Benutzeroberfläche für die Fortschrittsanzeige aufgerufen, die dieses Attribut alle fünf Sekunden abfragt und eine Fortschrittsanzeige aktualisiert. Die Verschlüsselungsschleife aktualisiertvold.encrypt_progress
jedes Mal, wenn ein weiterer Prozentsatz der Partition verschlüsselt wird. - Krypto-Fußzeile aktualisieren, wenn
/data
verschlüsselt istWenn
/data
erfolgreich verschlüsselt wurde, setztvold
das FlagENCRYPTION_IN_PROGRESS
in den Metadaten zurück.Wenn das Gerät erfolgreich entsperrt wurde, wird das Passwort zum Verschlüsseln des Masterschlüssels verwendet und die Krypto-Fußzeile wird aktualisiert.
Wenn der Neustart fehlschlägt, setzt
vold
das Attributvold.encrypt_progress
auferror_reboot_failed
. In der UI sollte dann eine Meldung angezeigt werden, in der der Nutzer aufgefordert wird, zum Neustart eine Taste zu drücken. Das wird nie passieren.
Verschlüsseltes Gerät mit Standardverschlüsselung starten
Das passiert, wenn Sie ein verschlüsseltes Gerät ohne Passwort starten. Da Android 5.0-Geräte beim ersten Start verschlüsselt werden, sollte kein Passwort festgelegt sein. Dies ist der Standardverschlüsselungsstatus.
- Verschlüsselte
/data
ohne Passwort erkennenErkennen, dass das Android-Gerät verschlüsselt ist, weil
/data
nicht bereitgestellt werden kann und eines der Flagsencryptable
oderforceencrypt
gesetzt ist.vold
setztvold.decrypt
auftrigger_default_encryption
, wodurch der Dienstdefaultcrypto
gestartet wird.trigger_default_encryption
prüft den Verschlüsselungstyp, um festzustellen, ob/data
mit oder ohne Passwort verschlüsselt ist. - /data entschlüsseln
Das
dm-crypt
-Gerät wird über das blockorientierte Gerät erstellt, sodass es einsatzbereit ist. - /data bereitstellen
vold
stellt dann die entschlüsselte echte/data
-Partition bereit und bereitet die neue Partition vor. Das Attributvold.post_fs_data_done
wird auf 0 und dannvold.decrypt
auftrigger_post_fs_data
gesetzt. Dadurch führtinit.rc
seinepost-fs-data
-Befehle aus. Er erstellt alle erforderlichen Verzeichnisse oder Links und legt dannvold.post_fs_data_done
auf 1 fest.Sobald
vold
die 1 in dieser Property sieht, setzt es die Propertyvold.decrypt
auf:trigger_restart_framework.
. Dadurch startetinit.rc
die Dienste in der Klassemain
noch einmal und auch die Dienste in der Klasselate_start
zum ersten Mal seit dem Start. - Framework starten
Jetzt startet das Framework alle Dienste mit der entschlüsselten
/data
und das System ist einsatzbereit.
Verschlüsseltes Gerät ohne Standardverschlüsselung starten
Das passiert, wenn Sie ein verschlüsseltes Gerät starten, für das ein Passwort festgelegt ist. Das Passwort des Geräts kann eine PIN, ein Muster oder ein Passwort sein.
- Verschlüsseltes Gerät mit Passwort erkennen
Erkennen, dass das Android-Gerät verschlüsselt ist, weil das Flag
ro.crypto.state = "encrypted"
vold
setztvold.decrypt
auftrigger_restart_min_framework
, da/data
mit einem Passwort verschlüsselt ist. - tmpfs bereitstellen
init
legt fünf Attribute fest, um die anfänglichen Bereitstellungsoptionen für/data
mit Parametern zu speichern, die voninit.rc
übergeben werden.vold
verwendet diese Eigenschaften, um die Krypto-Zuordnung einzurichten:ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(ASCII-Hexadezimalzahl mit 8 Ziffern, vorangestellt von 0x)
- Framework starten, um nach dem Passwort zu fragen
Das Framework wird gestartet und erkennt, dass
vold.decrypt
auftrigger_restart_min_framework
gesetzt ist. Dadurch wird dem Framework mitgeteilt, dass es auf einem tmpfs-Laufwerk/data
startet und das Nutzerpasswort abrufen muss.Zuerst muss jedoch sichergestellt werden, dass das Laufwerk ordnungsgemäß verschlüsselt wurde. Er 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
ermittelt dies, indem es in den Krypto-Metadaten nach dem FlagCRYPTO_ENCRYPTION_IN_PROGRESS
sucht. Wenn die Richtlinie konfiguriert ist, wurde der Verschlüsselungsprozess unterbrochen und es befinden sich keine nutzbaren Daten auf dem Gerät. Wennvold
einen Fehler zurückgibt, sollte auf der Benutzeroberfläche eine Meldung angezeigt werden, in der der Nutzer aufgefordert wird, das Gerät neu zu starten und auf die Werkseinstellungen zurückzusetzen. Außerdem sollte eine Schaltfläche angezeigt werden, über die er dies tun kann. - Daten mit Passwort entschlüsseln
Wenn
cryptfs cryptocomplete
erfolgreich war, wird im Framework eine Benutzeroberfläche angezeigt, auf der Sie nach dem Laufwerkpasswort gefragt werden. Die UI prüft das Passwort durch Senden des Befehlscryptfs checkpw
anvold
. Wenn das Passwort korrekt ist (was durch das erfolgreiche Bereitstellen des entschlüsselten/data
an einem temporären Speicherort und das anschließende Trennen der Bereitstellung ermittelt wird), speichertvold
den Namen des entschlüsselten Blockgeräts in der Propertyro.crypto.fs_crypto_blkdev
und gibt den Status 0 an die Benutzeroberfläche zurück. Wenn das Passwort falsch ist, wird -1 an die Benutzeroberfläche zurückgegeben. - Framework beenden
Die Benutzeroberfläche zeigt eine Krypto-Bootgrafik an und ruft dann
vold
mit dem Befehlcryptfs restart
auf.vold
legt das Attributvold.decrypt
auftrigger_reset_main
fest, wodurchinit.rc
class_reset main
ausführt. Dadurch werden alle Dienste in der Hauptklasse angehalten, sodass das tmpfs-Volume/data
getrennt werden kann. - Montage
/data
vold
stellt dann die entschlüsselte echte/data
-Partition bereit und bereitet die neue Partition vor. Diese wurde möglicherweise nie vorbereitet, wenn sie mit der Löschoption verschlüsselt wurde, die im ersten Release nicht unterstützt wird. Dabei wird das Attributvold.post_fs_data_done
auf 0 und dannvold.decrypt
auftrigger_post_fs_data
gesetzt. Dadurch werden diepost-fs-data
-Befehle voninit.rc
ausgeführt. Er erstellt alle erforderlichen Verzeichnisse oder Links und setzt dannvold.post_fs_data_done
auf 1. Wennvold
die 1 in dieser Property sieht, wird die Propertyvold.decrypt
auftrigger_restart_framework
festgelegt. Dies führt dazu, dassinit.rc
die Dienste in der Klassemain
wieder startet und auch Dienste in der Klasselate_start
zum ersten Mal seit dem Start wieder startet. - Vollständiges Framework starten
Jetzt startet das Framework alle seine Dienste mit dem entschlüsselten
/data
-Dateisystem und das System ist einsatzbereit.
Fehler
Wenn ein Gerät nicht entschlüsselt werden kann, kann das verschiedene Gründe haben. Das Gerät führt die normalen Schritte zum Starten aus:
- Verschlüsseltes Gerät mit einem Passwort erkennen
- tmpfs bereitstellen
- Framework starten, um nach Passwort zu fragen
Nach dem Öffnen des Frameworks können jedoch einige Fehler auftreten:
- Passwort stimmt überein, aber Daten können nicht entschlüsselt werden
- Nutzer gibt 30-mal ein falsches Passwort ein
Wenn diese Fehler nicht behoben werden, bitte den Nutzer, das Gerät auf die Werkseinstellungen zurückzusetzen:
Wenn vold
während des Verschlüsselungsprozesses einen Fehler erkennt, noch keine Daten gelöscht wurden und das Framework aktiv ist, setzt vold
die Property vold.encrypt_progress
auf error_not_encrypted
.
Die UI fordert den Nutzer zum Neustart auf und benachrichtigt ihn, dass der Verschlüsselungsprozess nie gestartet wurde. Wenn der Fehler auftritt, nachdem das Framework entfernt wurde, aber bevor die Fortschrittsanzeige angezeigt wird, startet vold
das System neu. Wenn der Neustart fehlschlägt, wird vold.encrypt_progress
auf error_shutting_down
gesetzt und -1 zurückgegeben. Der Fehler kann jedoch nicht abgefangen werden. Das sollte nicht passieren.
Wenn vold
während des Verschlüsselungsprozesses einen Fehler erkennt, wird vold.encrypt_progress
auf error_partially_encrypted
gesetzt und -1 zurückgegeben. Auf der Benutzeroberfläche sollte dann eine Meldung angezeigt werden, dass die Verschlüsselung fehlgeschlagen ist, sowie eine Schaltfläche, über die der Nutzer das Gerät auf die Werkseinstellungen zurücksetzen kann.
Verschlüsselten Schlüssel speichern
Der verschlüsselte Schlüssel wird in den Krypto-Metadaten gespeichert. Die Hardwaresicherung wird mithilfe der Signaturfunktion der Trusted Execution Environment (TEE) implementiert. Bisher haben wir den Masterschlüssel mit einem Schlüssel verschlüsselt, der durch Anwendung von Scrypt auf das Passwort des Nutzers und das gespeicherte 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 Verschlüsselungsanwendung in einen geeigneten Längenschlüssel umgewandelt. Dieser Schlüssel wird dann zum Ver- und Entschlüsseln des Masterschlüssels verwendet. So speichern Sie diesen Schlüssel:
- Generieren Sie einen zufälligen 16-Byte-Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) und eine 16-Byte-Salz.
- Wenden Sie Scrypt auf das Nutzerpasswort und den Salt an, um den 32-Byte-Zwischenschlüssel 1 (IK1) zu erzeugen.
- Auffüllen von IK1 mit null Byte zur Größe des hardwaregebundenen privaten Schlüssels (HBK). Die Ausweitung erfolgt so: 00 || IK1 || 00..00 (ein Null-Byte, 32 IK1-Byte, 223 Null-Byte).
- Vorzeichen aufgefüllt IK1 mit HBK, um 256 Byte IK2 zu erzeugen.
- Wenden Sie Scrypt auf IK2 und Salt an (gleiches Salt wie in Schritt 2), um 32-Byte-IK3 zu erzeugen.
- Verwenden Sie die ersten 16 Byte von IK3 als KEK und die letzten 16 Byte als IV.
- Verschlüsseln Sie den DEK mit AES_CBC, dem Schlüssel KEK und dem Initialisierungsvektor IV.
Passwort ändern
Wenn ein Nutzer in den Einstellungen sein Passwort ändern oder entfernen möchte, sendet die Benutzeroberfläche den Befehl cryptfs changepw
an vold
. vold
verschlüsselt dann den Masterschlüssel des Laufwerks noch einmal mit dem neuen Passwort.
Verschlüsselungseigenschaften
vold
und init
kommunizieren miteinander, indem sie Eigenschaften festlegen. Hier ist eine Liste der verfügbaren Eigenschaften für die Verschlüsselung.
Vold-Properties
Attribut | Beschreibung |
---|---|
vold.decrypt trigger_encryption |
Verschlüsseln Sie das Laufwerk ohne Passwort. |
vold.decrypt trigger_default_encryption |
Prüfen Sie, ob das Laufwerk ohne Passwort verschlüsselt ist.
Wenn ja, entschlüsseln und bereitstellen. Andernfalls vold.decrypt auf „trigger_restart_min_framework“ festlegen. |
vold.decrypt trigger_reset_main |
Mit vold festlegen, dass die Benutzeroberfläche heruntergefahren und nach dem Passwort des Laufwerks gefragt wird. |
vold.decrypt trigger_post_fs_data |
Wird von vold festgelegt, um /data mit den erforderlichen Verzeichnissen usw. vorzubereiten. |
vold.decrypt trigger_restart_framework |
Wird von vold festgelegt, um das echte Framework und alle Dienste zu starten. |
vold.decrypt trigger_shutdown_framework |
Legen Sie diese Option fest, um das vollständige Framework herunterzufahren und die Verschlüsselung zu starten. |
vold.decrypt trigger_restart_min_framework |
Wird mit vold festgelegt, um die Fortschrittsanzeige-UI zur Verschlüsselung zu starten oder zur Eingabe eines Passworts aufzufordern, je nach Wert von ro.crypto.state . |
vold.encrypt_progress |
Wenn dieses Attribut festgelegt ist, wechseln Sie beim Start des Frameworks in den UI-Modus der Fortschrittsanzeige. |
vold.encrypt_progress 0 to 100 |
Die Benutzeroberfläche der Fortschrittsanzeige sollte den festgelegten Prozentwert anzeigen. |
vold.encrypt_progress error_partially_encrypted |
Auf der Benutzeroberfläche der Fortschrittsanzeige sollte eine Meldung angezeigt werden, dass die Verschlüsselung fehlgeschlagen ist. Außerdem sollte der Nutzer die Möglichkeit haben, das Gerät auf die Werkseinstellungen zurückzusetzen. |
vold.encrypt_progress error_reboot_failed |
Auf der Benutzeroberfläche der Fortschrittsanzeige sollte eine Meldung angezeigt werden, dass die Verschlüsselung abgeschlossen ist. Außerdem sollte der Nutzer eine Schaltfläche zum Neustarten des Geräts haben. Dieser Fehler tritt nicht ein. |
vold.encrypt_progress error_not_encrypted |
Die Fortschrittsanzeige sollte eine Meldung anzeigen, dass ein Fehler aufgetreten ist, aber keine Daten verschlüsselt oder verloren gegangen sind. Außerdem sollte eine Schaltfläche angezeigt werden, über die der Nutzer das System neu starten kann. |
vold.encrypt_progress error_shutting_down |
Die Fortschrittsanzeige-UI wird nicht ausgeführt, daher ist unklar, wer auf diesen Fehler reagiert. Und das sollte sowieso nie passieren. |
vold.post_fs_data_done 0 |
Von vold festgelegt, kurz bevor vold.decrypt auf trigger_post_fs_data gesetzt wurde. |
vold.post_fs_data_done 1 |
Wird von init.rc oder init.rc direkt nach Abschluss der Aufgabe post-fs-data festgelegt. |
init-Properties
Attribut | Beschreibung |
---|---|
ro.crypto.fs_crypto_blkdev |
Wird mit dem Befehl vold checkpw festgelegt und kann später mit dem Befehl vold restart verwendet werden. |
ro.crypto.state unencrypted |
Von init festgelegt, um anzugeben, dass dieses System mit einer unverschlüsselten /data ro.crypto.state encrypted ausgeführt wird. Von init festgelegt, um anzugeben, dass dieses System mit einer verschlüsselten /data ausgeführt wird. |
|
Diese fünf Eigenschaften werden von init festgelegt, wenn versucht wird, /data mit Parametern zu mounten, die von init.rc übergeben wurden. vold verwendet diese, um die Krypto-Zuordnung einzurichten. |
ro.crypto.tmpfs_options |
Wird von init.rc mit den Optionen festgelegt, die init beim Bereitstellen des tmpfs-/data -Dateisystems verwenden soll. |
Initialisierungsaktionen
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