Какой режим выбрать?

Как известно, при шифровании с помощью блочной криптосистемы F открытый текст разбивается на блоки X1, X2,..... К каждому из блоков применяется преобразование зашифрования FK, действие которого определяется секретным ключом K. Из блоков Y1 = FK(X1), Y2 = FK(X2),... составляется шифртекст. Такой способ использования F в русскоязычной литературе называется режимом простой замены. В англоязычной литературе принято говорить о режиме ECB (Electronic Codebook).

Если открытый текст является низкоэнтропийным, то режим простой замены использовать небезопасно. Действительно, совпадение блоков открытого текста приводит к совпадению блоков шифртекста, что может быть использовано для определения формата передаваемых данных или даже частичного определения самих данных.

В США при введении DES был выпущен стандарт FIPS PUB 81, в котором определялись дополнительные режимы CBC (Cipher Block Chaining), CFB (Cipher Feedback) и OFB (Output Feedback), лишенные недостатков ECB. Со временем наибольшее распространение из этих режимов получил CBC. В частности, шифрование CBC по умолчанию используется в протоколах SSL/TLS, которые широко применяются для защиты каналов Интернет.

Популярность CBC до конца непонятна. Возможно, она объясняется тем, что в FIPS PUB 81 режимы CFB и OFB были представлены как поточные методы шифрования, а CBC оставлен блочным. При разработке криптонаборов на основе блочной криптосистемы F отдавать предпочтение поточным методам кажется нелогичным. Кроме этого, в FIPS PUB 81 режимы CFB и OFB перегружены и представляют собой целые параметрические семейства. Необходимость учитывать в криптонаборах дополнительные параметры этих семейств могла являться дополнительным аргументом в пользу CBC.

В СССP при введении ГОСТ 28147-89 были определены три режима шифрования: простой замены, гаммирования с обратной связью и гаммирования. Наибольшее распространение получил режим гаммирования с обратной связью – аналог CFB. В ГОСТ 28147-89, в отличие от FIPS PUB 81, параметризация CFB отсутствует, режим всегда является полноблоковым.

Правила зашифрования в режимах СBC и полноблоковом CFB имеют соответственно вид:
Yt = FK(XtYt - 1),    Yt = XtFK(Yt - 1),    t = 1, 2,....
Здесь Y0 – синхропосылка – несекретный блок, который передавается вместе с шифртекстом.

Отличия между режимами выглядят несущественными. Но это только на первый взгляд. Изменение правил зашифрования приводит к изменению трех важных показателей:

Показатель
 
CBC
 
CFB
 
Для расшифрования требуется композиционно обратное к Fпреобразование? да
 
нет
Можно обрабатывать открытые тексты с последним неполным блоком? нет
 
да
 
Синхропосылка должна быть непредсказуемой?
 
да
 
нет

По всем этим показателям CFB предпочтительнее CBC.

Во-первых, и для расшифрования и для расшифрования по CFB требуется всего лишь зашифровывать блоки данных с помощью FK, расшифровывать их не надо. Это упрощает реализацию CFB на микроустройствах.

Во-вторых, в режиме CFB можно обрабатывать открытые тексты любой длины. Напротив, в CBC длина открытого текста должна быть кратна длине блока. Казалось бы, этот недостаток легко преодолевается выравниванием данных на границу блока перед зашифрованием и снятием выравнивания после расшифрования. При этом если полученный после расшифрования текст не удовлетворяет формату выравнивания, то логично его отбросить, а отправителю  выслать сообщение об ошибке. Такая схема обработки открытых текстов произвольной длины была применена в старых версиях SSL/TLS и оказалась уязвимой! Оказалось, что противник может расшифровать любой шифртекст, используя другие специально подобранные шифртексты и анализируя сообщения о нарушениях формата их выравнивания после расшифрования. В последних версиях TLS выравнивание сохранено, но сообщение о нарушении формата выравнивания не отсылается.

В-третьих, в режиме CFB достаточно обеспечить уникальность синхропосылки, обеспечивать ее непредсказуемость не требуется. В CBC ситуация другая. В старых версиях SSL/TLS синхропосылка при CBC-зашифровании очередного пакета данных синхропосылка определялась как последний блок шифртекста из предыдущего пакета и, таким образом, была известна противнику. Оказалось, что противник может использовать знание синхропосылки для проверки того, что перехваченному блоку шифртекста соответствует открытый текст с определенным значением. Правда для этого противник должен иметь возможность навязывать открытый текст, который будет передан в очередном пакете. Тем не менее, в последних версиях TLS синхропосылка выбирается как случайное и, следовательно, непредсказуемое слово.

Слабости CBC были использованы и в недавней атаке Риццо и Дуонга на SSL/TLS. Об этой атаке мы поговорим немного позже.

Выбираем CFB?

Новости
07.03.2024
План семинара весна 2024
12.02.2024
Единый день голосования
24.10.2023
II Международная научная конференция
26.05.2023
XХVIII научно-практическая конференция
28.04.2023
TIBO 2023
02.01.2023
Программный комплекс ЭАДП
27.12.2022
С Новым годом!
21.11.2022
Программный инструментарий
13.09.2022
XIII Международная научная конференция