Ja, Sie können dazu auf den Hauptschlüssel zugreifen, während das Volume entschlüsselt wird.
Das schnelle und schmutzige Hinzufügen einer neuen Passphrase:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
und volume_name
sollte entsprechend eingestellt werden.
volume_name
ist der Name des entschlüsselten Volumes, in dem Sie sehen /dev/mapper
.
Erläuterung:
LUKS-Volumes verschlüsseln ihre Daten mit einem Hauptschlüssel. Jede von Ihnen hinzugefügte Passphrase speichert einfach eine mit dieser Passphrase verschlüsselte Kopie dieses Hauptschlüssels. Wenn Sie also den Hauptschlüssel haben, müssen Sie ihn nur in einem neuen Schlüsselschlitz verwenden.
Lassen Sie uns den obigen Befehl zerreißen.
$ dmsetup table --showkeys $volume_name
Dadurch werden eine Reihe von Informationen über das aktiv entschlüsselte Volume ausgegeben. Die Ausgabe sieht folgendermaßen aus:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Feld Nr. 5 ist der Hauptschlüssel.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Die Ausgabe davon wird nicht als Binärdaten angezeigt, aber dies bewirkt, dass der Hauptschlüssel für das Volume abgerufen und dann in rohe Binärdaten konvertiert wird, die später benötigt werden.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Dies weist cryptsetup an, dem Volume einen neuen Schlüssel hinzuzufügen. Normalerweise erfordert diese Aktion einen vorhandenen Schlüssel. Wir --master-key-file
teilen ihm jedoch mit, dass wir stattdessen den Hauptschlüssel verwenden möchten.
Dies <(...)
ist die Ersetzung und Umleitung von Shell-Befehlen. Es führt im Grunde genommen alles aus, sendet die Ausgabe an eine Pipe und ersetzt die <(...)
durch einen Pfad zu dieser Pipe.
Der gesamte Befehl ist also nur ein einziger Zeilenumbruch, um mehrere Vorgänge zu verdichten.