Luks

如何更改現有 dm-crypt LUKS 設備的 hash-spec 和 iter-time?

  • May 30, 2015

如何更改現有dm-crypt LUKS 設備的雜湊規範和迭代時間?

顯然,如果我創建一個設備,我可以傳遞選項,例如:

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

但是,如果設備已經存在,我該如何更改sha256sha1更改迭代時間而不“破壞”設備。(顯然,您必須重新輸入密碼,因為會生成新的雜湊值。)

每個鍵槽都有自己的迭代時間。如果要更改迭代次數,請使用相同的密碼和新的迭代次數創建一個新插槽,然後刪除舊插槽。

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

我認為散列算法不能為每個插槽配置,它始終是具有全域選擇散列函式的 PBKDF2。

最新版本的 cryptsetup包括一個工具cryptsetup-reencrypt,它可以更改主加密密鑰和所有參數,但它被認為是實驗性的(它會重新加密整個設備,即使僅僅更改基於密碼的密鑰派生函式不需要這樣做) .

如果您只想更改雜湊,則無需重新加密。不過,您仍然必須建構一個新的 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 標頭,使用相同的主密鑰、相同的密碼和相同的有效負載偏移量。

獲取主密鑰:(警告:此範例將您的主密鑰洩漏到一個世界可讀的文件、程序列表以及您的 shell 的歷史記錄中。為了安全起見,請在 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

現在我們有了。相同的密碼,偏移量

$$ if they differ you must specify them along with the luksFormat $$,新的雜湊和適當的迭代次數。 但是內容還在嗎?

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

你去吧。

引用自:https://unix.stackexchange.com/questions/101343