Я пытаюсь выбрать режим работы для шифрования, который имеет самую низкую пластичность.
Что ж, режимы работы Format Preserving Encryption обеспечивают идеальную устойчивость к гибкости (для режимов, которые никогда не выдают вывод «ошибка аутентификации»); любое произвольное изменение в зашифрованном тексте (будь то изменение одного бита последнего бита в зашифрованном тексте, переупорядочение блоков или что-то более радикальное) всегда будет приводить к совершенно непредсказуемому (искаженному) открытому тексту при дешифровании [1]. Если вы хотите пойти по этому пути, я предлагаю вам посмотреть на Режим FF1 из этого документа.
Кстати: есть ли конкретная причина, по которой вы не хотите выполнять аутентификацию сообщений? Любой приличный режим работы AEAD дает еще лучшие гарантии. Единственная веская причина, которую я могу придумать, это «зашифрованный текст должен быть точно такой же длины, как и открытый текст»…
[1]: Очевидным исключением является случай, когда злоумышленник заменяет зашифрованный текст ранее сгенерированным действительным зашифрованным текстом. Это можно решить, включив настройку, которая зависит от сообщения (например, это порядковый номер, который всегда увеличивается получателем); результат расшифровки зависит от настройки и, следовательно, сохраняет это свойство «полной неуязвимости».