Рейтинг:0

Как dm-crypt в Linux делает так, чтобы в режимах непараллелизуемого шифрования все 512-байтовые блоки отличались друг от друга?

флаг pf

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-байтового блока, поэтому, если я зашифрую один и тот же открытый текст, блоки будут равны.

kelalaka avatar
флаг in
новый IV на блок....
phantomcraft avatar
флаг pf
@kelalaka Я знаю, что опция ESSIV в cryptsetup хэширует ключ, который будет использоваться в качестве IV, но добавляется ли счетчик для хеширования каждого 512-байтового блока?
Рейтинг:4
флаг cn

Они просто используют номер сектора или какую-то его функцию в качестве настройки/IV. Номер сектора известен во время шифрования и дешифрования, поэтому его не нужно хранить вместе с зашифрованным текстом, что хорошо, поскольку для него нет места.

Все эти режимы на самом деле хорошо распараллеливаются: дисковый ввод-вывод обычно происходит кратно как минимум 4 КБ, и это уже можно распараллелить 8 способами. Отсутствие возможности распараллеливания подсекторов является конструктивной особенностью. Драйвер не может аутентифицировать расшифрованные сектора, потому что нет места для хранения аутентификатора, поэтому он должен полагаться на более высокие уровни, чтобы заметить, что открытый текст неверен, и это тем более вероятно, чем более он неверен.

fgrieu avatar
флаг ng
В последнем предложении ответа содержится печальная и важная истина: шифрование диска на уровне секторов не обеспечивает аутентификацию.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.