Festplattenverschlüsselung

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 wurden jedoch folgende neue Funktionen eingeführt:

  • 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. Derzeit wird die schnelle Verschlüsselung nur von ext4- und f2fs-Dateisystemen unterstützt.
  • Das forceencrypt-Fstab-Flag wurde hinzugefügt, um beim ersten Start zu verschlüsseln.
  • Unterstützung für Muster und Verschlüsselung ohne Passwort hinzugefügt.
  • 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 durch Zurücksetzen auf die Werkseinstellungen wieder in den unverschlüsselten Zustand versetzt werden. Neue Android 5.0-Geräte, die beim ersten Start verschlüsselt wurden, können nicht mehr in den unverschlüsselten Zustand zurückversetzt werden.

So funktioniert die vollständige Datenträgerverschlüsselung unter Android

Die vollständige Datenträgerverschlüsselung unter Android basiert auf dm-crypt, einer Kernelfunktion, die auf Blockgeräteebene funktioniert. Daher funktioniert die Verschlüsselung mit Embedded MultiMediaCards (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 über Aufrufe der OpenSSL-Bibliothek mit 128-Bit-AES 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 mehr 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 eine TEE (z. B. TrustZone) signiert, die den Masterschlüssel mit einem Hash der Signatur verschlüsselt.

Das Standardpasswort finden Sie in der Datei cryptfs.cpp des Android Open Source Project.

Wenn der Nutzer die PIN, den Passcode 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. Für verwaltete Geräte gelten möglicherweise Einschränkungen für PINs, Muster oder Passwörter.

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 Befehlszeilentools vdc: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpw und clearpw.

Damit /data verschlüsselt, entschlüsselt oder gelöscht werden kann, darf /data nicht bereitgestellt werden. Damit jedoch eine Benutzeroberfläche angezeigt werden kann, muss das Framework gestartet werden. Dafür ist /data erforderlich. 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. Es gibt jedoch die Einschränkung, dass zum Wechseln vom temporären Dateisystem zum echten /data-Dateisystem alle Prozesse mit geöffneten Dateien im temporären Dateisystem angehalten und im echten /data-Dateisystem neu gestartet werden müssen. 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.

Um diese Aktionen auszulösen, wird die Property 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“ wieder gestartet werden.
  • class_start: Startet einen Dienst neu.
  • class_stop: Ein Dienst wird angehalten und ein SVC_DISABLED-Flag wird hinzugefügt. Gestoppte Dienste antworten nicht auf class_start.

Abläufe

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:
    • Verschlüsseln Sie ein neues Gerät mit forceencrypt: Verschlüsselung beim ersten Start obligatorisch (ab Android L).
    • Vorhandenes Gerät verschlüsseln: Verschlüsselung durch Nutzer (Android K und darunter)
  • Verschlüsseltes Gerät starten:
    • Verschlüsseltes Gerät ohne Passwort starten: Starten eines verschlüsselten Geräts, für das kein Passwort festgelegt wurde (relevant für Geräte mit Android 5.0 und höher).
    • Verschlüsseltes Gerät mit Passwort starten: Starten eines verschlüsselten Geräts, für das ein Passwort festgelegt wurde.

Zusätzlich zu diesen Datenflüssen kann das Gerät auch /data nicht verschlüsseln. Die einzelnen Abläufe werden unten ausführlich beschrieben.

Neues Gerät mit forceencrypt verschlüsseln

Das ist der normale erste Start eines Android 5.0-Geräts.

  1. Unverschlüsseltes Dateisystem mit dem Flag forceencrypt erkennen

    /data ist nicht verschlüsselt, muss es aber sein, da forceencrypt dies vorschreibt. Trennen Sie /data.

  2. Verschlüsselung starten /data

    vold.decrypt = "trigger_encryption" löst init.rc aus, wodurch vold /data ohne Passwort verschlüsselt. (Es ist keine festgelegt, da es sich um ein neues Gerät handeln sollte.)

  3. Tmpfs bereitstellen

    vold stellt ein tmpfs-/data bereit (mit den tmpfs-Optionen aus ro.crypto.tmpfs_options) und setzt das Attribut vold.encrypt_progress auf 0. vold bereitet das tmpfs /data für das Booten eines verschlüsselten Systems vor und legt die Eigenschaft vold.decrypt auf Folgendes fest: trigger_restart_min_framework

  4. Framework aufrufen, um den Fortschritt anzuzeigen

    Da auf dem Gerät praktisch keine Daten verschlüsselt werden müssen, 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.

  5. Wenn /data verschlüsselt ist, Framework entfernen

    vold setzt vold.decrypt auf trigger_default_encryption, wodurch der Dienst defaultcrypto gestartet wird. Dadurch wird der unten beschriebene Ablauf zum Bereitstellen der standardmäßig verschlüsselten 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.

  6. Mount /data

    init stellt dann /data auf einer tmpfs-RAM-Disk bereit, wobei die Parameter aus ro.crypto.tmpfs_options übernommen werden, die in init.rc festgelegt ist.

  7. Framework starten

    vold setzt vold.decrypt auf trigger_restart_framework, wodurch der normale Bootvorgang fortgesetzt wird.

Vorhandenes Gerät verschlüsseln

Das passiert, wenn Sie ein unverschlüsseltes Android K- oder älteres Gerät verschlüsseln, das zu 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 genügend Strom für die Verschlüsselung zur Verfügung steht.

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.

Um die Vor-Ort-Verschlüsselung zu aktivieren, startet vold eine Schleife, um jeden Sektor des physischen Blockgeräts zu lesen und dann in das Krypto-Blockgerät zu schreiben. 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 Trigger on nonencrypted init aus, um mit dem Starten fortzufahren.

  1. Passwort prüfen

    Die Benutzeroberfläche ruft vold mit dem Befehl cryptfs enablecrypto inplace auf, wobei passwd das Passwort für den Sperrbildschirm des Nutzers ist.

  2. Framework entfernen

    vold prüft auf Fehler, gibt -1 zurück, wenn die Verschlüsselung nicht möglich ist, und druckt einen Grund in das Protokoll. Wenn eine Verschlüsselung möglich ist, wird die Property vold.decrypt auf trigger_shutdown_framework festgelegt. Dadurch werden von init.rc die Dienste in den Klassen late_start und main angehalten.

  3. Crypto-Fußzeile erstellen
  4. Brotkrummendatei erstellen
  5. Neu starten
  6. Navigationspfaddatei erkennen
  7. Verschlüsselung starten /data

    vold richtet dann die Kryptozuordnung ein, wodurch ein virtuelles Krypto-Blockgerät erstellt wird, das dem physischen Blockgerät zugeordnet ist, aber jeden Sektor beim Schreiben verschlüsselt und beim Lesen entschlüsselt. vold erstellt dann die Krypto-Metadaten und schreibt sie aus.

  8. Tmpfs während der Verschlüsselung bereitstellen

    vold stellt ein tmpfs-Volume /data bereit (mit den tmpfs-Optionen von ro.crypto.tmpfs_options) und setzt das Attribut vold.encrypt_progress auf 0. vold bereitet das tmpfs-/data für das Starten eines verschlüsselten Systems vor und legt die Eigenschaft vold.decrypt auf Folgendes fest: trigger_restart_min_framework

  9. Framework aufrufen, um den Fortschritt anzuzeigen

    trigger_restart_min_framework bewirkt, dass init.rc die Dienstklasse main startet. Wenn das Framework feststellt, dass vold.encrypt_progress auf 0 festgelegt ist, wird die Benutzeroberfläche mit der Fortschrittsanzeige angezeigt. Dabei wird diese Eigenschaft alle fünf Sekunden abgefragt und die Fortschrittsanzeige aktualisiert. Die Verschlüsselungsschleife aktualisiert vold.encrypt_progress jedes Mal, wenn ein weiteres Prozent der Partition verschlüsselt wird.

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

    Wenn /data erfolgreich verschlüsselt wurde, setzt vold das Flag ENCRYPTION_IN_PROGRESS in den Metadaten zurück.

    Wenn das Gerät entsperrt wurde, wird das Passwort zum Verschlüsseln des Masterschlüssels verwendet 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 auf der Benutzeroberfläche wird eine Meldung angezeigt, in der der Nutzer aufgefordert wird, eine Schaltfläche zum Neustarten zu drücken. Das sollte jedoch nicht 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.

  1. Verschlüsselte /data ohne Passwort erkennen

    Erkennen, dass das Android-Gerät verschlüsselt ist, weil /data nicht bereitgestellt werden kann und eines der Flags encryptable oder forceencrypt gesetzt ist.

    vold setzt vold.decrypt auf trigger_default_encryption, wodurch der Dienst defaultcrypto gestartet wird. trigger_default_encryptionprüft den Verschlüsselungstyp, um festzustellen, ob /data mit oder ohne Passwort verschlüsselt ist.

  2. /data entschlüsseln

    Das dm-crypt-Gerät wird über das Blockgerät erstellt, sodass es einsatzbereit ist.

  3. /data bereitstellen

    vold mountet dann die entschlüsselte echte /data-Partition und bereitet die neue Partition vor. Dabei wird das Attribut vold.post_fs_data_done auf 0 und dann vold.decrypt auf trigger_post_fs_data gesetzt. Dadurch werden die post-fs-data-Befehle von init.rc ausgeführt. Er erstellt alle erforderlichen Verzeichnisse oder Links und legt dann vold.post_fs_data_done auf 1 fest.

    Sobald vold die 1 in dieser Property sieht, setzt es die Property vold.decrypt auf: trigger_restart_framework.. Dadurch startet init.rc die Dienste in der Klasse main noch einmal und auch die Dienste in der Klasse late_start zum ersten Mal seit dem Start.

  4. Framework starten

    Jetzt startet das Framework alle seine Dienste mit dem 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 mit einem festgelegten Passwort starten. Das Passwort des Geräts kann eine PIN, ein Muster oder ein Passwort sein.

  1. Verschlüsseltes Gerät mit Passwort erkennen

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

    vold setzt vold.decrypt auf trigger_restart_min_framework, da /data mit einem Passwort verschlüsselt ist.

  2. Tmpfs bereitstellen

    init legt fünf Eigenschaften fest, um die anfänglichen Bereitstellungsoptionen für /data mit Parametern aus init.rc zu speichern. vold verwendet diese Eigenschaften, um die Krypto-Zuordnung 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-Hexadezimalzahl mit 8 Ziffern, vorangestellt von 0x)
  3. Framework starten, um nach dem Passwort zu fragen

    Das Framework wird gestartet und erkennt, dass vold.decrypt auf trigger_restart_min_framework festgelegt ist. Dies teilt dem Framework mit, dass es von einem tmpfs-/data-Laufwerk gestartet wird und das Nutzerpasswort abrufen muss.

    Zuerst muss jedoch sichergestellt werden, dass das Laufwerk ordnungsgemäß verschlüsselt wurde. Er 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 ermittelt dies, indem es in den Krypto-Metadaten nach dem Flag CRYPTO_ENCRYPTION_IN_PROGRESS sucht. Wenn diese Option festgelegt ist, wurde der Verschlüsselungsprozess unterbrochen und es befinden sich keine verwendbaren Daten auf dem Gerät. Wenn vold 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.

  4. Daten mit Passwort entschlüsseln

    Wenn cryptfs cryptocomplete erfolgreich war, zeigt das Framework eine Benutzeroberfläche an, in der Sie nach dem Laufwerkpasswort gefragt werden. Die Benutzeroberfläche prüft das Passwort, indem der Befehl cryptfs checkpw an vold gesendet wird. 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), speichert vold den Namen des entschlüsselten Blockgeräts in der Property ro.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.

  5. Stopp-Framework

    Die Benutzeroberfläche zeigt eine Krypto-Bootgrafik an und ruft dann vold mit dem Befehl cryptfs restart auf. vold legt das Attribut vold.decrypt auf trigger_reset_main fest, wodurch init.rc class_reset main ausführt. Dadurch werden alle Dienste in der Hauptklasse angehalten, sodass das tmpfs-Volume /data getrennt werden kann.

  6. Mount /data

    vold mountet dann die entschlüsselte echte /data-Partition und bereitet die neue Partition vor, die möglicherweise nie vorbereitet wurde, wenn sie mit der Löschoption verschlüsselt wurde, die in der ersten Version nicht unterstützt wird. Dabei wird das Attribut vold.post_fs_data_done auf 0 und dann vold.decrypt auf trigger_post_fs_data gesetzt. Dadurch werden die post-fs-data-Befehle von init.rc ausgeführt. Er erstellt alle erforderlichen Verzeichnisse oder Links und legt dann vold.post_fs_data_done auf 1 fest. Wenn vold die 1 in dieser Property sieht, wird die Property vold.decrypt auf trigger_restart_framework festgelegt. Dadurch startet init.rc die Dienste in der Klasse main noch einmal und auch die Dienste in der Klasse late_start zum ersten Mal seit dem Start.

  7. 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:

  1. Verschlüsseltes Gerät mit Passwort erkennen
  2. tmpfs bereitstellen
  3. Framework starten, um nach dem 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. Auf der Benutzeroberfläche wird der Nutzer aufgefordert, neu zu starten, und darauf hingewiesen, 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 wird jedoch nicht abgefangen. 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, und 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 Hardwareunterstützung 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 Anwendung von scrypt in einen Schlüssel mit geeigneter Länge umgewandelt. Dieser Schlüssel wird dann zum Verschlüsseln und Entschlüsseln des Masterschlüssels verwendet. So speichern Sie diesen Schlüssel:

  1. Generieren Sie einen zufälligen 16-Byte-Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) und eine 16-Byte-Salz.
  2. Wende Scrypt auf das Nutzerpasswort und das Salt an, um den 32-Byte-Zwischenschlüssel 1 (IK1) zu generieren.
  3. Fügen Sie IK1 mit Null-Byten auf die Größe des hardwaregebundenen privaten Schlüssels (HBK) auf. Die Ausweitung erfolgt so: 00 || IK1 || 00..00 (ein Null-Byte, 32 IK1-Byte, 223 Null-Byte).
  4. Signatur des gepaddeten IK1 mit HBK, um ein 256-Byte-IK2 zu erstellen.
  5. Wenden Sie scrypt auf IK2 und Salt (dasselbe Salt wie in Schritt 2) an, um 32 Byte IK3 zu generieren.
  6. Verwenden Sie die ersten 16 Byte von IK3 als KEK und die letzten 16 Byte als IV.
  7. 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 Properties 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 Wird von vold festgelegt, um die Benutzeroberfläche herunterzufahren, wenn nach dem Laufwerkpasswort 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 Framework und alle Dienste zu starten.
vold.decrypt trigger_shutdown_framework Wird von vold festgelegt, um das gesamte Framework herunterzufahren und die Verschlüsselung zu starten.
vold.decrypt trigger_restart_min_framework Wird von vold festgelegt, um je nach Wert von ro.crypto.state die Fortschrittsanzeige für die Verschlüsselung zu starten oder ein Passwort anzufordern.
vold.encrypt_progress Wenn diese Eigenschaft beim Starten des Frameworks festgelegt ist, wird der UI-Modus der Fortschrittsanzeige verwendet.
vold.encrypt_progress 0 to 100 Die Benutzeroberfläche der Fortschrittsanzeige sollte den festgelegten Prozentwert anzeigen.
vold.encrypt_progress error_partially_encrypted In der Fortschrittsanzeige sollte eine Meldung angezeigt werden, dass die Verschlüsselung fehlgeschlagen ist, und dem Nutzer die Möglichkeit gegeben werden, das Gerät auf die Werkseinstellungen zurückzusetzen.
vold.encrypt_progress error_reboot_failed In der Fortschrittsanzeige sollte eine Meldung angezeigt werden, dass die Verschlüsselung abgeschlossen ist, und eine Schaltfläche, über die der Nutzer das Gerät neu starten kann. Dieser Fehler sollte nicht auftreten.
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 sie eine Schaltfläche zum Neustarten des Systems enthalten.
vold.encrypt_progress error_shutting_down Die Benutzeroberfläche mit der Fortschrittsanzeige wird nicht ausgeführt. Daher ist nicht klar, 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 Von init.rc oder init.rc kurz 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 Wird 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.

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 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.

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