4.5. Современные блочные шифры
85
4.5.8
Каким должен быть размер ключа
Все три шифра, рекомендуемые нами для использования в современных
системах (AES, Serpent и Twofish), поддерживают ключи размером 128, 192
и 256 бит. Практически всем приложениям достаточно уровня безопасности
128 бит. Несмотря на это, нам очень не нравятся 128-битовые ключи.
Эти ключи хороши всем, за исключением одного: возможность осуществ-
ления атак на основе коллизий. Нам то и дело попадаются системы, чув-
ствительные к атакам, в основе которых лежит парадокс задачи о днях рож-
дения, или к двусторонним атакам. Одни разработчики просто игнорируют
такие атаки, другие думают, что защищены от них, однако ни те, ни другие
не застрахованы от появления новых, более изощренных
способов нападения.
Большинство режимов работы блочных шифров в той или иной форме допус-
кают двусторонние атаки. Мы уже достаточно натерпелись от них, а потому
предлагаем еще одно правило проектирования.
Правило проектирования 3.
Если уровень безопасности системы равен
n
бит, каждое криптографическое значение должно иметь длину, как ми-
нимум,
2
n
бит.
Это правило сводит на нет все усилия по обнаружению коллизий, а рас-
ходы на его реализацию не так уж велики. В реальной жизни, однако, сле-
довать ему довольно сложно. Например, для обеспечения 128-битового уров-
ня безопасности необходимо использовать блочный шифр с размером блока
256 бит, однако все распространенные блочные шифры работают с блоками
по 128 бит. Данная
проблема намного серьезнее, чем кажется. Существует
довольно большое количество атак на основе коллизий, направленных на ре-
жимы работы блочных шифров.
Несмотря на это, мы, как минимум, можем использовать ключи большего
размера, которые поддерживают все рекомендуемые нами шифры. Отсюда
урок: используйте 256-битовые ключи!
К сожалению, шифр AES (Rijndael) — единственный из всех финалистов
AES, который работает с 256-битовыми ключами медленнее, чем со 128-би-
товыми
7
. Как следствие этого, во избежание потери производительности вас
могут вынудить использовать ключи меньшего размера. Мы вовсе не утвер-
ждаем, что 128-битовые ключи небезопасны как таковые. Вполне возможно
создать систему со 128-битовым уровнем безопасности, используя 128-бито-
вые ключи, однако это будет крайне сложно. Например, вы не сможете просто
воспользоваться одним из стандартных режимов работы блочных шифров.
7
Serpent работает с одной и той же скоростью независимо от размера ключа. Twofish
работает медленнее при выполнении предварительных вычислений над ключами большего
размера, однако в программной реализации скорость шифрования не зависит от размера
ключа.