Bagaimana cara mengubah hash-spec dan iter-time dari perangkat LUKS dm-crypt yang ada?

11

Bagaimana saya bisa mengubah hash-spec dan iter-waktu dari yang sudah ada perangkat LUKS dm-crypt?

Jelas saya bisa meneruskan opsi jika saya membuat perangkat baru , misalnya sesuatu seperti ini:

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

Tetapi jika perangkat sudah ada, bagaimana saya bisa mengubah misalnya sha256untuk sha1atau mengubah waktu iterasi tanpa "menghancurkan" perangkat. (Jelas Anda harus mengetik ulang kata sandi Anda karena hash baru akan dihasilkan.)

siswa
sumber
Apa yang tidak Anda mengerti dalam pertanyaan saya?
siswa
Mungkin hanya saya, tetapi saya menganggap tidak sopan untuk bertanya 1 kalimat Q tanpa setidaknya merujuk halaman manual atau tutorial atau sesuatu yang Anda coba ikuti dengan spesifik seperti apa hash-specatau iter-timepengaturan yang lebih spesifik.
slm
Saya kira kami telah bekerja bersama sebelumnya pada Q's (dan Anda biasanya menaruh detail yang sangat baik di dalamnya) dan itu membuat saya lengah bahwa kali ini Anda tidak melakukannya.
slm
Saya tidak memiliki info lebih lanjut dalam hal ini dan tidak menemukan apa yang saya inginkan di halaman manual ...
siswa
2
Juga ada menyebutkan alat lain , cryptsetup-reencrypt. Daftar bullet terdengar seperti apa yang Anda coba lakukan kepada saya: "ubah parameter enkripsi sewenang-wenang".
slm

Jawaban:

6

Setiap slot kunci memiliki waktu iterasi sendiri. Jika Anda ingin mengubah jumlah iterasi, buat slot baru dengan frasa sandi yang sama dan nomor iterasi baru, kemudian lepaskan slot lama.

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

Saya pikir algoritma hash tidak dapat dikonfigurasi per slot, itu selalu PBKDF2 dengan fungsi hash yang dipilih secara global.

Versi terbaru cryptsetup termasuk alat cryptsetup-reencrypt, yang dapat mengubah kunci enkripsi utama dan semua parameter, tetapi itu dianggap eksperimental (dan itu memasukkan kembali seluruh perangkat meskipun ini tidak perlu hanya mengubah fungsi derivasi kunci berbasis kata sandi) .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
9

Jika semua yang ingin Anda ubah adalah hash, tidak perlu untuk mengenkripsi ulang. Anda masih harus membuat header LUKS baru. Sandi yang sama, kunci master yang sama, offset yang sama, hash yang berbeda.

Anda bisa mencobanya sendiri. Pertama-tama kita mengatur perangkat LUKS dengan pengaturan standar dan jumlah yang buruk:

# 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

Pada titik ini kami memiliki perangkat LUKS dengan data terenkripsi "Hello World I am LUKS". Secara khusus terlihat seperti ini:

# 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

Seperti yang Anda lihat, jumlah iterasi yang buruk, hash standar sha1.

Untuk mengalihkannya ke jumlah iterasi tinggi dan hash sha512, tanpa enkripsi ulang, kita membutuhkan header LUKS baru menggunakan kunci master yang sama, sandi yang sama, dan offset muatan yang sama.

Memperoleh kunci master: (Peringatan: contoh ini membocorkan kunci master Anda ke file yang dapat dibaca dunia, ke daftar proses, serta ke riwayat shell Anda. Agar aman, lakukan dalam RAM / pada CD Langsung / apa pun)

# 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

Buat tajuk LUKS baru menggunakan kunci ini: (kegagalan dimungkinkan - buat cadangan tajuk LUKS lama Anda dulu!)

# 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: 

Dan inilah tampilannya:

# 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

Sekarang kita memilikinya. Cipher yang sama, offset [jika berbeda Anda harus menentukannya bersama dengan luksFormat], hash baru dan jumlah iterasi yang tepat.

Tetapi apakah isinya masih ada?

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

Ini dia.

frostschutz
sumber
6
cryptsetup-reencrypt --keep-key --hash sha512melakukan hal yang sama.
frostschutz