dm-crypt în Linux utilizează blocuri de 512 de octeți (sectoare de disc) care au subblocuri de text simplu criptat pentru moduri de criptare bloc care nu sunt paralelizabile:
„Cu modurile obișnuite din cryptsetup (CBC, ESSIV, XTS), puteți obține un bloc de 512 octeți complet schimbat pentru o eroare de biți. Un bloc corupt provoacă mult mai multe ravagii decât un singur bit răsturnat ocazional și poate duce la diverse erori obscure. ."
/\ Sursă: https://gitlab.com/cryptsetup/cryptsetup/-/wikis/FrequentlyAskedQuestions
Suportă CBC, PCBC, OFB și CFB care nu sunt paralelizabile.
L-am testat aici în sistemul meu Linux:
dd if=/dev/zero of=./img count=5242880 bs=1
dd if=/dev/random of=./key count=32 bs=1
sudo cryptsetup open --type plain --cipher aes-cbc-essiv:sha3-256 --key-file ./key --key-size 256 ./img blah
sudo cat /dev/zero > /dev/mapper/blah
sudo cryptsetup close /dev/mapper/blah
/\ Am deschis fișierul imagine de disc într-un editor hexazecimal și am putut vedea că toate blocurile de 512 octeți sunt diferite între ele, chiar dacă textele clare din imaginea întregului disc sunt uniforme (zerouri).
Intrebarea mea este:
Cum dm-crypt face ca toate blocurile de 512 de octeți să fie diferite între ele, chiar dacă textele sale clare sunt aceleași?
Dacă criptez ceva cu CBC și împart în blocuri de 512 octeți pentru a face căutarea, cheia și IV ar fi aceleași pentru fiecare bloc de 512 octeți, așa că dacă criptez același text simplu, blocurile ar fi egale.