Wie ändere ich die Hash-Spezifikation und die Iterationszeit eines vorhandenen dm-crypt LUKS-Geräts?

11

Wie kann ich die Hash-Spezifikation und die Iterationszeit eines vorhandenen dm-crypt LUKS-Geräts ändern ?

Natürlich kann ich die Optionen übergeben, wenn ich ein neues Gerät erstelle , zum Beispiel so etwas:

 sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0

Aber , wenn das Gerät bereits vorhanden ist , wie kann ich zum Beispiel ändern sha256zu sha1oder die Iteration der Zeit ändern , ohne „ zerstören“ , um das Gerät. (Natürlich müssten Sie Ihr Passwort erneut eingeben, da ein neuer Hash generiert wird.)

Schüler
quelle
Was verstehst du in meiner Frage nicht?
Student
Könnte nur ich sein, aber ich halte es für unhöflich, einen 1-Satz Q zu fragen, ohne zumindest auf eine Manpage oder ein Tutorial oder etwas zu verweisen, dem Sie mit Einzelheiten folgen möchten, z. B. was hash-specist oder welche iter-timeEinstellungen spezifischer sind.
slm
Ich denke, wir haben schon früher bei Fragen zusammengearbeitet (und Sie haben normalerweise hervorragende Details hinzugefügt), und es hat mich überrascht, dass Sie diesmal nicht waren.
slm
Ich habe in diesem Fall keine weiteren Informationen und habe auf der Manpage nicht gefunden, was ich will ...
Student
2
Auch gibt es Erwähnung eines anderen Werkzeugs , cryptsetup-reencrypt. Die Aufzählungsliste klingt wie das, was Sie mir antun wollen: "Ändern Sie beliebige Verschlüsselungsparameter".
slm

Antworten:

6

Jeder Schlüsselschlitz hat seine eigene Iterationszeit. Wenn Sie die Anzahl der Iterationen ändern möchten, erstellen Sie einen neuen Slot mit derselben Passphrase und einer neuen Anzahl von Iterationen und entfernen Sie den alten Slot.

cryptsetup -i 100000 --key-slot 2 luksAddKey $device
cryptsetup luksKillSlot $device 1

Ich denke, der Hash-Algorithmus kann nicht pro Slot konfiguriert werden, er ist immer PBKDF2 mit einer global ausgewählten Hash-Funktion.

Neuere Versionen von cryptsetup enthalten ein Tool cryptsetup-reencrypt, mit dem der Hauptverschlüsselungsschlüssel und alle Parameter geändert werden können. Es wird jedoch als experimentell angesehen (und das gesamte Gerät wird neu verschlüsselt, obwohl dies nicht erforderlich wäre, um lediglich die kennwortbasierte Schlüsselableitungsfunktion zu ändern.) .

Gilles 'SO - hör auf böse zu sein'
quelle
9

Wenn Sie nur den Hash ändern möchten, müssen Sie ihn nicht erneut verschlüsseln. Sie müssen jedoch noch einen neuen LUKS-Header erstellen. Gleiche Chiffre, gleicher Hauptschlüssel, gleicher Offset, unterschiedlicher Hash.

Sie können dies selbst versuchen. Zuerst richten wir ein LUKS-Gerät mit Standardeinstellungen und miesen Iterungszahlen ein:

# truncate -s 8M /dev/shm/foobar
# cryptsetup --iter-time=42 luksFormat /dev/shm/foobar

WARNING!
========
This will overwrite data on /dev/shm/foobar irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 
# cryptsetup luksOpen /dev/shm/foobar foobar
Enter passphrase for /dev/shm/foobar: 
# shred -z /dev/mapper/foobar
# echo Hello World I am LUKS > /dev/mapper/foobar
# strings /dev/mapper/foobar
Hello World I am LUKS
# cryptsetup luksClose foobar

Zu diesem Zeitpunkt haben wir ein LUKS-Gerät mit den verschlüsselten Daten "Hello World I am LUKS". Insbesondere sieht es so aus:

# cryptsetup luksDump /dev/shm/foobar
LUKS header information for /dev/shm/foobar

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      30 87 62 81 8e 8f a9 15 68 e0 82 c0 dc ee 19 54 9b f2 eb 5c 
MK salt:        c3 e0 28 53 67 10 13 d4 43 e3 7b d1 ce 62 6b e3 
                58 85 ee 67 71 76 b6 48 78 a8 34 71 58 71 21 f8 
MK iterations:  6175
UUID:           14a0a11d-0890-433e-bdcb-d2d1f5281bc2

Key Slot 0: ENABLED
    Iterations:             26033
    Salt:                   a1 7b 2b 5b 3d 8c 3c d1 3b 57 61 5a df 25 47 c8 
                            29 97 62 09 08 2b e1 b2 af 61 56 80 2f af a6 ae 
    Key material offset:    8
    AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Wie Sie sehen können, zählt miese Iteration, Standard-sha1-Hashes.

Um dies auf hohe Iterationszahlen und sha512-Hash umzustellen, ohne erneut zu verschlüsseln, benötigen wir einen neuen LUKS-Header, der denselben Hauptschlüssel, dieselbe Verschlüsselung und denselben Nutzlastoffset verwendet.

Erhalten des Hauptschlüssels: (Warnung: In diesem Beispiel wird Ihr Hauptschlüssel an eine weltweit lesbare Datei, an die Prozessliste sowie an den Verlauf Ihrer Shell weitergegeben. Um dies sicher zu tun, tun Sie dies im RAM / auf einer Live-CD / was auch immer.)

# cryptsetup --dump-master-key luksDump /dev/shm/foobar

WARNING!
========
Header dump with volume key is sensitive information
which allows access to encrypted partition without passphrase.
This dump should be always stored encrypted on safe place.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
LUKS header information for /dev/shm/foobar
Cipher name:    aes
Cipher mode:    xts-plain64
Payload offset: 4096
UUID:           14a0a11d-0890-433e-bdcb-d2d1f5281bc2
MK bits:        256
MK dump:    eb aa 57 2d 42 93 fe 90 00 b9 d2 e0 e0 7b 73 26 
            4b 64 1b 8b 8e 61 75 84 1b c3 d6 f7 3f 03 d2 14 

# printf '\xeb\xaa\x57\x2d\x42\x93\xfe\x90\x00\xb9\xd2\xe0\xe0\x7b\x73\x26\x4b\x64\x1b\x8b\x8e\x61\x75\x84\x1b\xc3\xd6\xf7\x3f\x03\xd2\x14' > /dev/shm/masterkey
# hexdump -C /dev/shm/masterkey
00000000  eb aa 57 2d 42 93 fe 90  00 b9 d2 e0 e0 7b 73 26  |..W-B........{s&|
00000010  4b 64 1b 8b 8e 61 75 84  1b c3 d6 f7 3f 03 d2 14  |Kd...au.....?...|
00000020

Erstellen Sie den neuen LUKS-Header mit diesem Schlüssel: (Fehler ist möglich - sichern Sie zuerst Ihren alten LUKS-Header!)

# cryptsetup --master-key-file=/dev/shm/masterkey --iter-time=5000 --hash=sha512 luksFormat /dev/shm/foobar

WARNING!
========
This will overwrite data on /dev/shm/foobar irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 

Und so sieht es aus:

# cryptsetup luksDump /dev/shm/foobar
LUKS header information for /dev/shm/foobar

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha512
Payload offset: 4096
MK bits:        256
MK digest:      47 ab 7b c6 41 b0 7c d8 af 3c a0 a4 23 e6 72 87 9c 0f c6 a0 
MK salt:        32 49 a5 b5 cb 4d 8a d7 25 69 72 ae e5 b2 9e 9d 
                14 09 00 1d 01 f3 c9 99 da e1 6c fc 69 78 e4 64 
MK iterations:  393750
UUID:           fd554ae8-a862-4609-8327-c6dd65ee9a83

Key Slot 0: ENABLED
    Iterations:             1578295
    Salt:                   e5 75 1c 1f 63 1d c6 0b d9 27 1a b1 27 85 b9 c1 
                            89 e8 57 95 2a c8 a0 24 9c 29 c0 f2 27 d7 2f 9a 
    Key material offset:    8
    AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Jetzt haben wir es. Gleiche Chiffre, Offset [wenn sie sich unterscheiden, müssen Sie sie zusammen mit dem luksFormat angeben], neuer Hash und die richtige Anzahl von Iterationen.

Aber ist der Inhalt noch da?

# cryptsetup luksOpen /dev/shm/foobar foobar
Enter passphrase for /dev/shm/foobar: 
# strings /dev/mapper/foobar
Hello World I am LUKS

Los geht's.

Frostschutz
quelle
6
cryptsetup-reencrypt --keep-key --hash sha512macht das gleiche.
Frostschutz