Comment changer le hash-spec et le iter-time d'un device LUKS dm-crypt existant?

Comment puis-je changer le hash-spec et le iter-time d'un device 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 le périphérique existe déjà, comment puis-je changer par exemple sha256 en sha1 ou changer le time d'itération sans "détruire" le périphérique. (Il est clair que vous devrez retaper votre mot de passe car un nouveau hachage sera généré.)

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

    Vous pouvez essayer cela par vous-même. Tout d'abord, nous mettons en place un dispositif LUKS avec des parameters standard et des nombres d'iter moche:

     # 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 # ssortingngs /dev/mapper/foobar Hello World I am LUKS # cryptsetup luksClose foobar 

    À ce stade, nous avons un dispositif LUKS avec datatables cryptées "Hello World, je suis LUKS". En particulier, il 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 ssortingpes: 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, les counts d'itération moche, hachage standard sha1.

    Pour passer à ce nombre élevé d'itération et hachage SHA512, sans re-encryption, nous avons besoin d'un nouvel en-tête LUKS en utilisant la même key maître, le même chiffre, et le même décalage charge utile.

    Obtenir la key maître: (Attention: cet exemple fuites votre key principale dans un file text lisible, à la list des process, ainsi que pour être en security, faites-le dans la RAM / sur un Live CD / quel que soit l'histoire de votre coquille.)

     # 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 |..WB........{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 key: (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 ssortingpes: 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. Le même chiffre, offset [si elles 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: # ssortingngs /dev/mapper/foobar Hello World I am LUKS 

    Voilà.

    Chaque location de key a son propre time d'itération. Si vous souhaitez modifier le nombre d'itérations, créez un nouvel location avec le même mot de passe et un nouveau nombre d'itérations, puis supprimez l'ancien location.

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

    Je pense que l'algorithm de hachage ne peut pas être configuré par slot, c'est toujours PBKDF2 avec une fonction de hachage globalement choisie.

    Les versions récentes de cryptsetup incluent un outil cryptsetup-reencrypt , qui peut changer la key de chiffrement principale et tous les parameters, mais il est considéré comme expérimental (et il rechiffre tout le dispositif même s'il ne serait pas nécessaire de changer la key basée sur un mot de passe fonction de dérivation).