Jak zmienić specyfikację skrótu i ​​czas iteracji istniejącego urządzenia LUKS dm-crypt?


11

Jak mogę zmienić specyfikację skrótu i ​​czas iteracji istniejącego urządzenia LUKS dm-crypt?

Oczywiście mogę przekazać opcje, jeśli utworzę nowe urządzenie, na przykład coś takiego:

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

Ale jeśli urządzenie już istnieje, w jaki sposób można zmienić na przykład sha256na sha1lub zmienić czas iteracji bez „zniszczenie” urządzenie. (Oczywiście musisz ponownie wpisać hasło, ponieważ zostanie wygenerowany nowy skrót).


Czego nie rozumiesz w moim pytaniu?
student

Być może jestem tylko ja, ale uważam za nieuprzejme zadawanie 1 zdania Q bez odwoływania się do strony podręcznika lub samouczka lub czegoś, co próbujesz zastosować ze szczegółami, takimi jak to, co hash-specjest lub iter-timeustawienia są bardziej szczegółowe.
slm

Myślę, że wcześniej pracowaliśmy razem nad Q (i zwykle umieszczasz w nich doskonałe szczegóły) i zaskoczyło mnie, że tym razem nie.
slm

Nie mam więcej informacji w tym przypadku i nie znalazłem tego, czego chcę na stronie podręcznika ...
student

2
Nie ma też wzmianki o innym narzędziem , cryptsetup-reencrypt. Lista wypunktowana brzmi jak to, co próbujesz mi zrobić: „zmień dowolne parametry szyfrowania”.
slm

Odpowiedzi:


6

Każdy klucz ma swój własny czas iteracji. Jeśli chcesz zmienić liczbę iteracji, utwórz nowy boks z tym samym hasłem i nową liczbą iteracji, a następnie usuń stary boks.

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

Myślę, że algorytmu skrótu nie można skonfigurować dla każdego gniazda, zawsze jest to PBKDF2 z globalnie wybraną funkcją skrótu.

Najnowsze wersje cryptsetup zawierają narzędzie cryptsetup-reencrypt, które może zmienić główny klucz szyfrowania i wszystkie parametry, ale jest uważane za eksperymentalne (i ponownie szyfruje całe urządzenie, nawet jeśli nie byłoby to konieczne, aby po prostu zmienić funkcję wyprowadzania klucza opartą na haśle) .


9

Jeśli wszystko, co chcesz zmienić, to skrót, nie ma potrzeby ponownego szyfrowania. Nadal jednak musisz zbudować nowy nagłówek LUKS. Ten sam szyfr, ten sam klucz główny, to samo przesunięcie, inny skrót.

Możesz spróbować tego sam. Najpierw skonfigurujemy urządzenie LUKS ze standardowymi ustawieniami i kiepską liczbą iteracji:

# 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

W tym momencie mamy urządzenie LUKS z zaszyfrowanymi danymi „Hello World I am LUKS”. W szczególności wygląda to tak:

# 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

Jak widać, liczy się kiepska iteracja, standardowe skróty sha1.

Aby przełączyć na wysoką liczbę iteracji i skrót sha512, bez ponownego szyfrowania, potrzebujemy nowego nagłówka LUKS przy użyciu tego samego klucza głównego, tego samego szyfru i tego samego przesunięcia ładunku.

Uzyskiwanie klucza głównego: (Ostrzeżenie: ten przykład powoduje wyciek klucza głównego do pliku, który można odczytać z całego świata, do listy procesów, a także do historii powłoki. Aby być bezpiecznym, zrób to w RAM / na Live CD / cokolwiek innego)

# 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

Utwórz nowy nagłówek LUKS za pomocą tego klucza: (awaria jest możliwa - najpierw wykonaj kopię zapasową starego nagłówka 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: 

A oto jak to wygląda:

# 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

Teraz to mamy. Ten sam szyfr, przesunięcie [jeśli się różnią, musisz je podać wraz z luksFormat], nowy skrót i odpowiednia liczba iteracji.

Ale czy treść nadal tam jest?

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

Proszę bardzo.


6
cryptsetup-reencrypt --keep-key --hash sha512robi to samo.
frostschutz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.