Сценарий
Использование AES 256 с режимом CBC. (Аутентификация выполняется отдельно. Здесь игнорируется.)
Цель (объясняется позже)
Чтобы избежать отправки незашифрованного IV.
Но поскольку это делается с помощью .NET, функция которого заставляет нас использовать IV, мы не можем просто добавить 16 случайных байтов, а затем отбросить первые 16 байтов после расшифровки.
План
Добавить 16 случайных байтов ("IV1"), и, кроме того, использовать 16 байтов со значением 0 в качестве IV ("IV0"). Затем отправьте зашифрованный текст без его первых 16 байтов.
Расшифровка будет выполняться получателем, который сначала определит, какой первый блок зашифрованный текст будет (для этого ключа AES, для любого сообщения), зашифровав что-то вышеупомянутым способом (что нужно будет сделать только один раз для каждого ключа) и взяв первые 16 байтов полученного зашифрованного текста.
Затем они добавляют эти байты к полученному обрезанному зашифрованному тексту, чтобы получить исходный необрезанный зашифрованный текст, а затем расшифровывают его с помощью IV ("IV0") из 16 байтов нулевого значения (т. е. они используют функцию расшифровки .NET, передавая ей требуемый IV, который представляет собой эти 16 нулей).
Затем они отбрасывают первые 16 байтов результата (который получен от .NET после того, как .NET отбрасывает первые 16 байтов, которые являются IV), потому что это 16 случайных байтов, добавленных в начало ("IV1").
Но почему?
Передача IV открытым текстом дает злоумышленнику преимущество — он может расшифровать только один блок (16 байт) и сравнить его с IV, чтобы проверить правильность ключа. (Возможно, есть и другие возможные каналы атаки, о которых я не знаю.)
Итак, мой вопрос
Этот план кажется хорошим, или в нем есть какая-то ловушка?