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

Как известно, при шифровании с помощью блочной криптосистемы 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?

Новости
23.05.2017
XХII научно-практическая конференция «Комплексная защита информации»
31.03.2017
ITSecurity-2017
22.02.2017
Ввод в действие новой редакции СТБ 34.101.47
21.02.2017
План семинара весна 2017
20.01.2017
Итоги NSUCRYPTO-2016
24.10.2016
План семинара осень 2016
29.08.2016
Ввод в действие СТБ 34.101.77
15.06.2016
CTCrypt-2016
19.04.2016
Криптографические стандарты: планы на 2016 год
acheter cialis au canada sans prescription