ハッシュ仕様と繰り返し時間を変更する方法既存のdm-crypt LUKSデバイス?
明らかに1つを作成すると、オプションを渡すことができます新しいデバイス例:
sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0
しかし、デバイスがすでに存在する場合、デバイスを「中断」せずに繰り返し時間を変更またはsha256
変更する方法は何ですか?sha1
(もちろん、新しいハッシュが生成されるため、パスワードを再入力する必要があります。)
答え1
ハッシュのみを変更したい場合は、再暗号化する必要はありません。ただし、まだ新しいLUKSヘッダーを構築する必要があります。同じパスワード、同じマスターキー、同じオフセット、異なるハッシュ。
自分で試してみてください。まず、標準設定と誤った繰り返し数を使用してLUKSデバイスを設定します。
# 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
この時点では、暗号化されたデータ「Hello World I am LUKS」を含むLUKSデバイスがあります。特に次のようになります。
# 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
ご覧のとおり、標準sha1ハッシュの繰り返し回数は良くありません。
再暗号化なしで高い反復回数とsha512ハッシュに切り替えるには、同じマスターキー、同じパスワード、および同じペイロードオフセットを使用する新しいLUKSヘッダーが必要です。
マスターキーのインポート:(警告:この例では、マスターキーを誰でも読み取り可能なファイル、プロセスリスト、およびシェル履歴に漏洩します。安全のためにRAM / Live CD /他の場所でこれを実行してください。)
# 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
次のキーを使用して新しいLUKSヘッダーを生成します。 (失敗する可能性があります。古いLUKSヘッダを最初にバックアップしてください!)
# 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:
次のようになります。
# 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
今、私たちはそれを持っています。同じパスワード、オフセット[異なる場合はluksFormatで指定する必要があります]、新しいハッシュ、および適切な繰り返し数。
しかし、内容はまだ残っていますか?
# cryptsetup luksOpen /dev/shm/foobar foobar
Enter passphrase for /dev/shm/foobar:
# strings /dev/mapper/foobar
Hello World I am LUKS
それではそうします。
答え2
各キーウェイには独自の繰り返し時間があります。繰り返し回数を変更するには、同じパスワードと新しい繰り返し番号で新しいスロットを作成し、古いスロットを削除します。
cryptsetup -i 100000 --key-slot 2 luksAddKey $device
cryptsetup luksKillSlot $device 1
ハッシュアルゴリズムはスロットごとに設定できず、常にグローバルに選択されたハッシュ関数を使用するPBKDF2です。
最新バージョンのcryptsetupマスター暗号化キーとすべてのパラメータを変更するためのツールが含まれていますが、cryptsetup-reencrypt
これは実験的なものと見なされます(パスワードベースのキー派生機能を変更するために必ずしも必要ではありませんが、デバイス全体を再暗号化します)。