Як змінити хеш-специфікацію та ітер-час існуючого dm-криптованого пристрою LUKS?


11

Як я можу змінити хеш-специфікацію та ітератор часу для існуючого dm-криптованого пристрою LUKS?

Очевидно, що я можу передавати параметри, якщо створити новий пристрій, наприклад щось подібне:

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

Але якщо пристрій вже існує, то як я можу змінити, наприклад , sha256щоб sha1або змінити час ітерації без «знищення» пристрою. (Очевидно, що вам доведеться повторно ввести пароль, оскільки буде створено новий хеш.)


Що ви не розумієте в моєму питанні?
студент

Я можу бути лише я, але я вважаю недоречним запитати 1 речення Q без принаймні посилання на сторінку чоловіка чи підручник або щось, що ви намагаєтесь дотримуватися з конкретними ознаками, такими як, що hash-specє, чи iter-timeналаштуваннями більш конкретно.
slm

Я здогадуюсь, що ми раніше працювали разом над питаннями Q (і ти зазвичай вкладаєш в них чудові деталі), і це мене змусило охороняти, що цього разу ти цього не зробив.
slm

Я не маю більше інформації в цьому випадку і не знайшов того, що хочу на сторінці чоловіка ...
студент

2
Також є згадка іншого інструменту , cryptsetup-reencrypt. Список куль виглядає як те, що ви намагаєтесь зробити мені: "змінити довільні параметри шифрування".
slm

Відповіді:


6

У кожного ключового слота є свій час ітерації. Якщо ви хочете змінити кількість ітерацій, створіть новий слот з тією ж парольною фразою та новою кількістю ітерацій, а потім видаліть старий слот.

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

Я думаю, що алгоритм хешу неможливо налаштувати на кожен слот, це завжди PBKDF2 з глобально обраною хеш-функцією.

Останні версії cryptsetup включають інструмент cryptsetup-reencrypt, який може змінювати головний ключ шифрування та всі параметри, але він вважається експериментальним (і він перекодує весь пристрій, навіть якщо цього не потрібно було б просто змінити функцію виведення ключа на основі пароля) .


9

Якщо все, що ви хочете змінити, це хеш, не потрібно повторно шифрувати. Ви все ще повинні створити новий заголовок 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

На даний момент у нас є пристрій LUKS із зашифрованими даними "Hello World I am 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

Як бачимо, вакуумні ітерації підраховуються, стандартні хешові ша1.

Для того, щоб переключити це на великі значення ітерації та хеш sha512, без повторного шифрування, нам потрібен новий заголовок LUKS, використовуючи той же головний ключ, той самий шифр та таке ж зміщення корисної навантаження.

Отримання головного ключа: (Попередження: цей приклад пропускає ваш головний ключ до файлу, який читається у всьому світі, до списку процесів, а також до історії вашої оболонки. Щоб бути безпечним, робіть це в оперативній пам'яті / на 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

Ось так.


6
cryptsetup-reencrypt --keep-key --hash sha512робить те саме.
frostschutz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.