Как изменить спецификацию хеша и разовый проходом из существующего dm-склепа устройство LUKS?

Если Вы хотите заменить дубликаты Жесткими ссылками на Mac или какой-либо основанной на UNIX системе, можно попробовать SmartDupe http://sourceforge.net/projects/smartdupe/, разрабатываю его

11
15.11.2013, 23:21
2 ответа

Каждый ключевой слот имеет свое собственное итеративное время. Если Вы хотите изменить количество повторений, создать новый слот с тем же паролем и новое количество повторений, то удалите старый слот.

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

Я думаю, что хеш-алгоритм не может быть настроен на слот, это всегда - PBKDF2 с глобально выбранной хеш-функцией.

Последние версии cryptsetup включают инструмент cryptsetup-reencrypt, который может изменить основной ключ шифрования и все параметры, но это считают экспериментальным (и это повторно шифрует целое устройство даже при том, что это не было бы необходимо просто изменить основанную на пароле ключевую функцию деривации).

5
27.01.2020, 19:58
#!/bin/bash
for i in {01..84}; do
    x=$(printf '%02d' $i)
    set -- $x?*.csv
    if [ -f "$1" ]; then
        cp "$1" $i.csv
        shift
        if [ -f "$1" ]; then
            tail -q -n +2 "$@" >> $x.csv
        fi
    fi
done

Для каждого префикса устанавливается список файлов с этим префиксом в качестве аргументов, чтобы можно было использовать $1 для доступа к первому и т. д.

Если $1 является файлом (для поиска случая, когда нет файлов с заданным префиксом), затем скопировать этот файл в prefix.csv. Затем проверьте, было ли несколько файлов с этим префиксом, сместив первый файл и проверив, что следующий файл также является файлом. Если это так, пропустите строку заголовка каждого файла с помощью команды tail и добавьте ее к prefix.csv.

Опция -q для tail предназначена для подавления строки заголовка tail , которая сама будет добавлена, если в списке аргументов будет передано более одного файла; здесь исходили строки = = > 19XXX.csv < = .

Вероятно, в вашем решении необходима только опция -q , но я нахожу ее слишком сложной, требующей bash буферизации выходных данных команды tail и т.д., что может быть причиной преждевременной остановки сценария (сбой?).

EDIT: добавлено x = $ (printf '% 02d' $ i) , поскольку {01.. 84} расширяется до 1 2 3... без ведущих нулей.

-121--205437-

С sed ...

getval() { sed "/^\([^=]*,\)*$1[,=]/!d;s/.*=//;q"; } <infile

Возможно, потребуется проверить $1 в качестве входных данных.

Или с GNU grep и cut :

getval() { grep -Em1 "^([^=]*,)*$1[,=]" | cut -d= -f2-; } <infile
-121--133726-

Если все, что вы хотите изменить, это хэш, нет необходимости повторно шифровать. Тем не менее, вы все еще должны построить новый заголовок 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

Как видите, паршивые итерации подсчитывают, стандартные хеши sha1.

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

Получение главного ключа: (Внимание: в этом примере происходит утечка главного ключа в файл, доступный для чтения во всем мире, в список процессов, а также в историю оболочки. Чтобы быть в безопасности, сделайте это в оперативной памяти/на живом 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

Вот вы и идете.

9
27.01.2020, 19:58

Теги

Похожие вопросы