Come modificare le specifiche hash e il tempo di iter di un dispositivo LUKS dm-crypt esistente?


11

Come posso modificare le specifiche hash e il tempo di iter di un dispositivo LUKS dm-crypt esistente ?

Chiaramente posso passare le opzioni se creo un nuovo dispositivo, ad esempio qualcosa del genere:

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

Ma se il dispositivo è già presente, come posso cambiare ad esempio sha256a sha1o modificare il tempo di iterazione senza "distruggere" il dispositivo. (Chiaramente dovresti digitare nuovamente la password poiché verrà generato un nuovo hash.)


Cosa non capisci nella mia domanda?
studente

Potrei essere solo io, ma ritengo scortese chiedere una frase di 1 frase senza almeno fare riferimento a una pagina man o a un tutorial o qualcosa che si sta tentando di seguire con specifiche quali ciò che hash-specè o le iter-timeimpostazioni sono più specifiche.
slm

Immagino che abbiamo già lavorato insieme su Q (e di solito ci metti dettagli eccellenti) e mi ha colto di sorpresa che questa volta non l'hai fatto.
slm

Non ho più informazioni in questo caso e non ho trovato quello che voglio nella pagina man ...
studente

2
Inoltre v'è menzione di un altro strumento , cryptsetup-reencrypt. L'elenco dei proiettili sembra quello che stai tentando di farmi: "modifica parametri di crittografia arbitrari".
slm

Risposte:


6

Ogni slot chiave ha il suo tempo di iterazione. Se si desidera modificare il numero di iterazioni, creare un nuovo slot con la stessa passphrase e un nuovo numero di iterazioni, quindi rimuovere il vecchio slot.

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

Penso che l'algoritmo hash non possa essere configurato per slot, è sempre PBKDF2 con una funzione hash scelta a livello globale.

Le versioni recenti di cryptsetup includono uno strumento cryptsetup-reencrypt, che può modificare la chiave di crittografia principale e tutti i parametri, ma è considerato sperimentale (e ricodifica l'intero dispositivo anche se ciò non sarebbe necessario per modificare semplicemente la funzione di derivazione della chiave basata su password) .


9

Se tutto ciò che vuoi cambiare è l'hash, non è necessario ri-crittografare. Devi comunque creare una nuova intestazione LUKS. Stesso codice, stessa chiave master, stesso offset, hash diverso.

Puoi provarlo tu stesso. Per prima cosa configuriamo un dispositivo LUKS con impostazioni standard e conteggi scadenti:

# 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

A questo punto abbiamo un dispositivo LUKS con i dati crittografati "Hello World I am LUKS". In particolare si presenta così:

# 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

Come puoi vedere, l'iterazione pessima conta, hash sha1 standard.

Per passare a conteggi di iterazione elevati e hash sha512, senza ricodifica, è necessaria una nuova intestazione LUKS che utilizza la stessa chiave master, la stessa cifra e lo stesso offset del payload.

Ottenere la chiave master: (Attenzione: questo esempio perde la chiave master in un file leggibile in tutto il mondo, nell'elenco dei processi e nella cronologia della shell. Per sicurezza, fallo in RAM / su un Live CD / qualunque cosa)

# 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

Crea la nuova intestazione LUKS usando questa chiave: (l'errore è possibile - prima fai un backup della tua vecchia intestazione 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: 

Ed ecco come appare:

# 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

Adesso ce l'abbiamo. Stesso codice, offset [se differiscono, è necessario specificarli insieme a luksFormat], nuovo hash e numero corretto di iterazioni.

Ma il contenuto è ancora lì?

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

Ecco qua.


6
cryptsetup-reencrypt --keep-key --hash sha512fa la stessa cosa.
frostschutz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.