Comment changer la spécification de hachage et le temps iter d'un périphérique LUKS dm-crypt existant?

11

Comment puis-je modifier les spécifications de hachage et le temps d' itération d'un périphérique LUKS dm-crypt existant ?

De toute évidence, je peux passer les options si je crée un nouvel appareil, par exemple quelque chose comme ceci:

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

Mais si l'appareil existe déjà, comment puis - je changer par exemple sha256pour sha1ou modifier le temps d'itération sans « détruire » le dispositif. (De toute évidence, vous devrez retaper votre mot de passe car un nouveau hachage sera généré.)

étudiant
la source
Qu'est-ce que tu ne comprends pas dans ma question?
étudiant
C'est peut-être juste moi, mais je considère qu'il est impoli de demander un Q de 1 phrase sans référencer au moins une page de manuel ou un tutoriel ou quelque chose que vous essayez de suivre avec des détails tels que ce qui hash-specest ou les iter-timeparamètres sont plus spécifiquement.
slm
Je suppose que nous avons déjà travaillé ensemble sur Q's (et vous y mettez habituellement d'excellents détails) et cela m'a pris au dépourvu que cette fois vous ne l'avez pas fait.
slm
Je n'ai pas plus d'informations dans ce cas et je n'ai pas trouvé ce que je veux dans la page de manuel ...
étudiant
2
De plus il y a mention d'un autre outil , cryptsetup-reencrypt. La liste à puces ressemble à ce que vous essayez de me faire: "modifier les paramètres de chiffrement arbitraires".
slm

Réponses:

6

Chaque emplacement de clé a son propre temps d'itération. Si vous souhaitez modifier le nombre d'itérations, créez un nouvel emplacement avec la même phrase secrète et un nouveau nombre d'itérations, puis supprimez l'ancien emplacement.

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

Je pense que l'algorithme de hachage ne peut pas être configuré par emplacement, c'est toujours PBKDF2 avec une fonction de hachage choisie au niveau mondial.

Les versions récentes de cryptsetup incluent un outil cryptsetup-reencrypt, qui peut modifier la clé de cryptage principale et tous les paramètres, mais il est considéré comme expérimental (et il rechiffre l'ensemble du périphérique même si cela ne serait pas nécessaire pour simplement changer la fonction de dérivation de clé basée sur un mot de passe) .

Gilles 'SO- arrête d'être méchant'
la source
9

Si tout ce que vous voulez changer est le hachage, il n'est pas nécessaire de rechiffrer. Cependant, vous devez toujours créer un nouvel en-tête LUKS. Même chiffre, même clé principale, même décalage, hachage différent.

Vous pouvez l'essayer par vous-même. Nous avons d'abord configuré un appareil LUKS avec des paramètres standard et un nombre d'itérations nulles:

# 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

À ce stade, nous avons un appareil LUKS avec les données chiffrées "Hello World I am LUKS". En particulier, cela ressemble à ceci:

# 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

Comme vous pouvez le voir, l'itération moche compte, les hachages sha1 standard.

Afin de passer à un nombre d'itérations élevé et à un hachage sha512, sans rechiffrement, nous avons besoin d'un nouvel en-tête LUKS utilisant la même clé principale, le même chiffrement et le même décalage de charge utile.

Obtention de la clé principale: (Attention: cet exemple divulgue votre clé principale dans un fichier lisible par le monde, dans la liste des processus, ainsi que dans l'historique de votre shell. Pour être sûr, faites-le en RAM / sur un Live CD / autre)

# 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

Créez le nouvel en-tête LUKS à l'aide de cette clé: (l'échec est possible - faites d'abord une sauvegarde de votre ancien en-tête 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: 

Et voici à quoi ça ressemble:

# 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

Maintenant, nous l'avons. Même chiffre, décalage [s'ils diffèrent, vous devez les spécifier avec le luksFormat], le nouveau hachage et le nombre approprié d'itérations.

Mais le contenu est-il toujours là?

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

Voilà.

frostschutz
la source
6
cryptsetup-reencrypt --keep-key --hash sha512fait la même chose.
frostschutz