Выбор режима шифра

Если вашей основной заботой являются скорость и простота, то ECB является самым простым и самым быстрым способом использовать блочный шифр. Помимо уязвимости к вскрытию повтором, алгоритм в режиме ECB проще всего криптоанализировать. Я не советую использовать ECB для шифрования сообщений.

ECB хорошо использовать для шифрования случайных данных, например, других ключей. Так как данные невелики по размеру и случайны, недостатки ECB не существенны для такого применения.

Для обычного открытого текста используйте CBC, CFB или OFB. Конкретный режим зависит от ваших требований. В Табл. -1 приведены безопасность и эффективность различных режимов.

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

Табл. -1.
Краткий обзор режимов работы блочных шифров

ECB:

Безопасность:

- Структура открытого текста не маскируется.

- Вход блочного шифра не рандомизируется и является точно таким же, как и открытый текст.

+ Одним и тем же ключом может быть зашифровано несколько сообщений.

- Открытым текстом легко манипулировать, блоки могут быть удалены, повторены или обменены местами .

Эффективность:

+ Скорость равна скорости блочного шифра.

- Шифротекст чуть длиннее (до одного блока), чем открытый текст, из-за набивки.

- Предобработка невозможна.

+ Обработка распараллеливается.

Устойчивость к сбоям:

- Ошибка шифротекста влияет на один полный блок открытого текста.

- Система не восстанавливается после сбоя синхронизации.

CBC:

Безопасность:

+ Структура открытого текста маскируется за счет XOR с предыдущим блоком шифротекста.

+ Вход блочного шифра рандомизируется за счет XOR с предыдущим блоком шифротекста..

+ Одним и тем же ключом может быть зашифровано несколько сообщений.

+/- Манипулирование открытым текстом до некоторой степени усложнено, блоки могут быть удалены из начала и конца сообщения, биты первого блока могут быть изменены, повтор позволяет некоторые контролируемые изменения.

Эффективность:

+ Скорость равны скорости блочного шифра.

- Шифротекст чуть длиннее (до одного блока), чем открытый текст, не считая IV.

- Предобработка невозможна.

+/- Шифрование не распараллеливается, дешифрирование распараллеливается и допускает случайный доступ к данным.

Устойчивость к сбоям:

- Ошибка шифротекста влияет на один полный блок открытого текста и соответствующий бит следующего блока.

- Система не восстанавливается после сбоя синхронизации.

CBF:

Безопасность:

+ Структура открытого текста маскируется.

+ Вход блочного шифра рандомизируется.

+ Одним и тем же ключом может быть зашифровано несколько сообщений при условии, что используется различные IV.

+/- Манипулирование открытым текстом до некоторой степени усложнено, блоки могут быть удалены из начала и конца сообщения, биты первого блока могут быть изменены, повтор позволяет некоторые контролируемые изменения.

Эффективность:

+ Скорость равна скорости блочного шифра.

- Шифротекст того же размера, что и открытый текст, не считая IV.

- Возможна некоторая предобработка прежде, чем появится блок, предыдущий блок шифротекста может быть зашифрованным.

+/- Шифрование не распараллеливается, дешифрирование распараллеливается и допускает случайный доступ к данным.

Устойчивость к сбоям:

- Ошибка шифротекста влияет на соответствующий бит открытого текста и на следующий полный блок открытого текста.

+ Сбои синхронизации размером в целый блок исправимы. 1-битовый CBF восстанавливается после добавления или потери бита.

OFB/Счетчик:

Безопасность:

- Структура открытого текста маскируется.

- Вход блочного шифра рандомизируется.

+ Одним и тем же ключом может быть зашифровано несколько сообщений при условии, что используется различные IV.

- Открытым текстом очень легко манипулировать, любое изменение шифротекста непосредственно влияет на открытый текст.

Эффективность:

+ Скорость равна скорости блочного шифра.

- Шифротекст того же размера, что и открытый текст, не считая IV.

- Возможна предобработка до появления сообщения.

+/- Обработка OFB не распараллеливается, в режиме счетчика распараллеливается.

Устойчивость к сбоям:

+ Ошибка шифротекста влияет только на соответствующий бит открытого текста.

- Система не восстанавливается после сбоя синхронизации.

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

OFB является хорошим выбором для систем с ошибками, так как в нем отсутствует распространение ошибки.

Берегитесь заумных режимов. Один из четырех основных - ECB, CBC, OFB и CFB - подойдет почти для любого приложения. Эти режимы не слишком сложны и, возможно, не уменьшат безопасности системы. Хотя возможно, что сложный режим повысит безопасность системы, более вероятно, что он только повысит ее сложность. Ни у одного из этих хитрых режимов не лучше в отношении распространения ошибки или устранения ее последствий.