it-swarm.com.de

Wie kann das Passwort des Benutzers geändert werden, nachdem der Speicher verschlüsselt wurde? (unter OS X, Android)

Es gibt integrierte Funktionen zum Verschlüsseln eines Speichers unter OS X ( FileVault ) und Android.

Unter OS X: Um die Verschlüsselung zu aktivieren, muss der aktuelle Benutzer über ein kennwortgeschütztes Konto verfügen. Nach dem Aktivieren der Verschlüsselung wird ein Wiederherstellungsschlüssel generiert (so etwas wie HHWj-Y8DK-ODO4-BQEN-FQ4V-M4O8). Nach Abschluss der Verschlüsselung (und aller Wahrscheinlichkeit nach auch davor) kann der Benutzer sein Kennwort ändern, ohne den Speicher erneut verschlüsseln zu müssen.

Unter Android: Der Benutzer muss den Sperrbildschirmschutz entweder auf PIN oder Passwort einstellen. Nachdem die Speicherverschlüsselung abgeschlossen ist (wahrscheinlich auch vorher), kann der Benutzer das Kennwort ändern und sogar von Kennwort zu PIN und umgekehrt wechseln.

Folgendes verwirrt mich: Mein Verständnis ist, dass bei der Verschlüsselung des Speichers das aktuelle Benutzerkennwort verwendet wird (ähnlich wie beim Verschlüsseln eines Archivs). Wenn das Kennwort geändert wird, muss der gesamte Speicher neu verschlüsselt werden. Dieses (anscheinend falsche) Verständnis bringt mich zu folgenden Fragen:

  1. Basierend auf welchem ​​"Schlüssel" (da es sich nicht um das Passwort selbst handelt) erfolgt dann die Verschlüsselung?
    • Ich vermute, für OS X ist es der Wiederherstellungsschlüssel, aber wie ist er dann mit dem Kennwort des Benutzers verbunden?
  2. Wenn das Kennwort nicht die Grundlage für die Verschlüsselung ist, warum muss vor der Verschlüsselung Ihres Speichers ein Kennwort festgelegt werden?
  3. Wie bleibt die Fähigkeit zum Entschlüsseln des Speichers erhalten (ohne erneut zu verschlüsseln), nachdem das Kennwort geändert wurde?
28
Filippo Walker

Auf hoher Ebene wird die Festplattenverschlüsselung mithilfe eines Datenverschlüsselungsschlüssels (DEK) und eines Schlüsselverschlüsselungsschlüssels (KEK) implementiert. Das DEK wird zufällig generiert und zum Verschlüsseln des Laufwerks verwendet. Das KEK wird aus dem Kennwort des Benutzers unter Verwendung eines KDF wie PBKDF2 oder Argon2 abgeleitet und dann zum Verschlüsseln des DEK verwendet.

Beim Ändern des Passworts wird das DEK einfach mit einem neuen KEK verschlüsselt, der vom neuen Passwort abgeleitet ist.

Das Verschlüsseln ohne Passwort ist wahrscheinlich verboten, um ein falsches Sicherheitsgefühl zu vermeiden. Es wäre ein bisschen so, als würde man die Tür abschließen, aber den Schlüssel im Schloss lassen.

Wenn Sie Ihr Passwort ändern, weil Sie glauben, dass jemand es herausgefunden hat und diese Person auch Zugriff auf das verschlüsselte Gerät hatte, ist es natürlich möglich, dass sie eine Kopie des DEK gespeichert hat. In diesem Fall kann es erforderlich sein, das gesamte Laufwerk neu zu verschlüsseln, dies wird jedoch wahrscheinlich einige Zeit dauern.

48
AndrolGenhald

Ich stimme der hochrangigen Antwort von AndrolGenhald voll und ganz zu. Falls Sie an einer ergänzenden Einführung in die Speicherverschlüsselungsimplementierung von Android auf niedriger Ebene interessiert sind:

Android kann File-Based Encryption (FBE) und Full-Disc Encryption (FDE) ausführen, wobei sich "Disc" auf die/data-Partition bezieht. Ich werde mich auf FDE konzentrieren, um das Prinzip zu veranschaulichen. Die Einrichtung erfolgt durch den Volume Daemon (Vold), insbesondere in system/vold/cryptfs.cpp .

  • cryptfs_enable_internal(int crypt_type, const char* passwd, ...) startet die Speicherverschlüsselung, wobei crypt_type angibt, ob eine PIN oder ein Kennwort verwendet wird (um zu bestimmen, welche Tastatur auf dem Entsperrbildschirm angezeigt werden soll) und passwd unter Angabe der tatsächlichen Benutzer-PIN/des Kennworts. Es wird eine Fußzeile crypt_ftr Richten, die entlang der verschlüsselten Partition gespeichert wird, und dann wird create_encrypted_random_key Aufgerufen, um den crypt_ftr Aufzufüllen.

    • create_encrypted_random_key generiert einen zufälligen Hauptschlüssel und ein zufälliges Salz und gibt diese an encrypt_master_key Weiter.
    • encrypt_master_key verwendet eine Schlüsselableitungsfunktion (z. B. Verschlüsselung), die das Salz und die Benutzer-PIN/das Kennwort als Eingabe verwendet und deterministisch einen Zwischenschlüssel ableitet. Der Hauptschlüssel wird dann mit dem Zwischenschlüssel unter Verwendung von AES-128-CBC verschlüsselt. Der verschlüsselte Hauptschlüssel und das Salt werden in crypt_ftr Gespeichert, nicht jedoch in der Benutzer-PIN/dem Kennwort.
    • Zurück in cryptfs_enable_internal Wird der crypt_ftr Auf die Disc geschrieben. Dann wird die eigentliche Speicherverschlüsselung über Linux 'dm-crypt Mit dem entschlüsselten Hauptschlüssel ausgelöst.
  • cryptfs_check_passwd(const char* passwd) startet die Speicherentschlüsselung, indem die obigen Schritte zurückverfolgt werden, um den entschlüsselten Hauptschlüssel zu erhalten. Der crypt_ftr Muss von der Disc gelesen werden, die den verschlüsselten Hauptschlüssel und das Salz enthält. Die vom Benutzer bereitgestellte PIN/das Passwort plus Salz werden in die Schlüsselableitungsfunktion eingespeist. Dies führt zu einem Zwischenschlüssel, der den Hauptschlüssel entschlüsseln kann (das meiste geschieht in decrypt_master_key_aux ).

  • cryptfs_changepw(int crypt_type, const char* newpw) behandelt das Ändern der Benutzer-PIN/des Kennworts. Es wird kein neuer Hauptschlüssel generiert, sondern lediglich der vorhandene Hauptschlüssel über encrypt_master_key Mit der neuen Benutzer-PIN/dem neuen Kennwort verschlüsselt.

Basierend auf diesen Informationen wären die Antworten auf Ihre Fragen:

  1. Der zufällig generierte Hauptschlüssel wird für die eigentliche Speicherverschlüsselung verwendet.

  2. Wir benötigen eine Benutzer-PIN/ein Kennwort, um den Hauptschlüssel zu verschlüsseln. Daher wird die Benutzer-PIN/das Kennwort benötigt, um später den Hauptschlüssel zum Entschlüsseln des Speichers abzurufen.

  3. Durch Ändern der Benutzer-PIN/des Kennworts wird nicht der Hauptschlüssel geändert, sondern nur die Verschlüsselung des Hauptschlüssels.