dm-crypt в Linux использует 512-байтовые блоки (дисковые секторы), имеющие подблоки зашифрованного открытого текста для режимов блочного шифрования, которые не распараллеливаются:
«С обычными режимами в cryptsetup (CBC, ESSIV, XTS) вы можете получить полностью измененный 512-байтовый блок для битовой ошибки. Поврежденный блок вызывает гораздо больше хаоса, чем случайно перевернутый одиночный бит, и может привести к различным непонятным ошибкам. ."
/\ Источник: https://gitlab.com/cryptsetup/cryptsetup/-/wikis/Часто задаваемые вопросы
Он поддерживает CBC, PCBC, OFB и CFB, которые не распараллеливаются.
Я протестировал его здесь, в своей системе Linux:
дд, если=/dev/ноль из=./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 закрыть /dev/mapper/blah
/\ Я открыл файл образа диска в шестнадцатеричном редакторе и увидел, что все 512-байтовые блоки отличаются друг от друга, даже если открытые тексты во всем образе диска однородны (нули).
Мой вопрос:
Как dm-crypt заставляет все 512-байтовые блоки отличаться друг от друга, даже если их открытые тексты одинаковы?
Если я зашифрую что-то с помощью CBC и разобью на 512-байтовые блоки для обеспечения возможности поиска, ключ и IV будут одинаковыми для каждого 512-байтового блока, поэтому, если я зашифрую один и тот же открытый текст, блоки будут равны.