http://habrahabr.ru/post/239287/
В 1998 году известный американский криптограф Брюс Шнайер написал:
Любой, начиная с самого бестолкового любителя и заканчивая лучшим криптографом, может создать алгоритм, который он сам не в состоянии взломать.
Переформулировка этой цитаты, предложенная журналистом Кори Доктороу в 2004 году, стала известна как Закон Шнайера:
Каждый человек может изобрести систему безопасности, которую он был бы не в силах взломать.
Очень хорошей иллюстрацией к закону Шнайера, на мой взгляд, являются попытки усилить алгоритм шифрования DES.
Двойное шифрование
DES был принят в качестве стандарта в 1977 году. Длина ключа нового стандарта составляла 56 бит, довольно большое число по тем временам. Однако закон Мура неумолим, и некоторые криптографы уже тогда начали бить тревогу.
Одними из первых, кто подверг критике длину ключа нового стандарта были небезызвестные отцы-основатели криптографии с открытым ключом: Уитфилд Диффи и Мартин Хеллман. В одной из своих статей они утверждали, что 56-битный ключ слишком мал и оставляет возможность для атаки полного перебора.
В свете вышеуказанного замечания вполне логичным выглядят попытки увеличить стойкость алгоритма DES, используя технику многократного шифрования. Этот способ позволяет искусственно увеличить длину ключа, применяя несколько раз операцию шифрования с разными ключами.
На первый взгляд может показаться, что для решения проблемы DES достаточно увеличить длину ключа вдвое, т.е. использовать следующую схему в качестве шифрования и расшифровки:
C=EK2 (EK1 (P)),
P=DK1 (DK2 (С)),
где C — шифртекст; P — открытый текст; а E
K (P) и D
K (С) — процедуры шифрования и расшифровки соответственно.
Приведенная схема увеличивает пространство ключа до 2
112 и делает атаку грубой силой бессмысленной затеей.
Казалось бы решение найдено. Но в этот самый момент настало время вспомнить о Законе Шнайера. Если вы создали схему шифрования и не можете найти в ней недостатки, это не означает что их нет.
В 1981 году Ральф Меркл и Мартин Хеллман подробно разбирают безопасность двойного шифрования и описывают способ, позволяющий восстановить ключ шифрования не за 2
112 операций шифрования, а за относительно пустяковые 2
57.
Метод, предложенный Мерклем и Хеллманом относится к классу атак на основе открытых текстов, и применим в случае если злоумышленнику известна пара открытый-закрытый текст.
Суть атаки заключается в следующем. Атакующему известен открытый текст P и соответствующий ему шифртекст С=E
K2 (E
K1(P)).
Для вскрытия ключа, атакующий осуществляет перебор всех возможных 2
56 вариантов ключа K1 и записывает в таблицу T1 значения {E
K1(P), K1}.
Затем используя значение С, атакующий перебирает 2
56 вариантов ключа K2 и записывает в таблицу T2 значения {D
K2(С), K2}.
Отсортировав таблицы T1 и T2 атакующий в качестве вероятных ключей принимает такие K1 и K2, для которых E
K1(P) = D
K2(С).
Описанная атака называется «встреча по середине», т.к. с одной стороны выполняется шифрование, а с другой расшифровка. Получившиеся «в середине» результаты сравниваются.
Тройное шифрование
В 1978 году Вальтер Тачман предложил использовать тройное шифрование для увеличения стойкости алгоритма DES. В схеме Тачмана также используется два ключа K1 и K2, но процесс шифрования и расшифровки выглядит следующим образом:
C=E
K1 (D
K2 (E
K1(P)))
P=D
K1 (E
K2 (D
K1(С))).
Этот способ защищен против атаки «встреча по середине». Даже если атакующий сформирует таблицу {D
K1(С), K1}, для проведения атаки ему необходимо будет получить все возможные значения {D
K2((E
K1(P)), K1||K2}, что составляет 2
112 записей и разумеется не представляется реальным.
Но и метод Тачмана не долго считался надежным.
Меркл и Хеллман описали вариант атаки с выбранным открытым текстом на схему тройного шифрования.
В предложенной Меклем и Хеллманом атаке злоумышленнику доступен т.н. расшифровывающий оракул. Это означает, что злоумышленник может отправить на вход шифрующей функции любое сообщение и получить его зашифрованный аналог.
Атака Меркла-Хеллмана на тройное шифрование сводится к следующим действиям:
- атакующий осуществляет перебор всех возможных 256 вариантов ключа K2, производит расшифровку блока, состоящего из нулевых байт и записывает в таблицу T1 значения {DK2(0), K2}
- атакующий для каждого из 256 вариантов ключа K1, производит расшифровку блока, состоящего из нулевых байт: DK1(0). Значение DK1(0) атакующий отправляет на вход шифрующему оракулу и расшифровывает полученный от оракула ответ с помощью подбираемого ключа K1: DK1(Enc(DK1(0))). Получившееся значение и вариант ключа K1 {DK1(Enc(DK1(0))), K1} записывается в таблицу T2
- Отсортировав таблицы T1 и T2 атакующий в качестве вероятных ключей принимает такие K1 и K2, для которых
DK1(Enc(DK1(0))) = DK2(0).
Суть метода не совсем очевидна. Для разъяснений распишем что представляет собой функция Enc(). Это сжатая запись тройного шифрования, т.е. Enc(x) = E
K1 (D
K2 (E
K1(x))).
В атаке Меркла-Хеллмана атакующий вычисляет D
K1(Enc(D
K1(0))). Таким образом если K1 угадан верно в результате получается выражение D
K1(E
K1 (D
K2 (E
K1(D
K1(0))))) = D
K2(0).
Если получившееся значение имеется в таблице T1, то ключи K1 и K2 выбираются в качестве вероятных кандидатов.
Для реализации атаки требуется 2
57 операций шифрования, что значительно отличается от ожидаемой стойкости тройного шифрования 2
112.
Разумеется атаки описанные Мерклем и Хеллманом носят больше теоретический характер и их практическая реализация весьма маловероятно, но они очень хорошо показывают как легко можно допустить ошибку при проектировании криптосистем.
Закон Шнайера
Закон Шнайера предостерегает от использования непроверенных систем безопасности и в особенности систем, спроектированные самостоятельно. Оба приведенных выше варианта решения проблемы длины ключа DES были предложены профессиональными криптографами и тем не менее содержали очень серьезные недостатки, которые были упущены при проектировании. Наивно полагать, что любитель сможет создать стойкую систему.
Фил Циммерманн, создатель PGP, написал по этому поводу следующее:
Когда я учился в колледже в 70-х я придумал, как мне тогда казалось, идеальную схему шифрования. Простой генератор псевдослучайных чисел генерировал гамму, которая суммировалась с открытым текстом. Схема была стойкой против частотного анализа шифртекста и была совершенно не взламываема для спецслужб, обладающим огромными вычислительными мощностями.
Годы спустя я нашел похожую схему в некоторых учебниках по криптографии. Классно. Другие криптографы думают в похожем направлении. К сожалению, схема была описана в качестве простого домашнего задания: взломайте схему, используя базовые методы криптоанализа.
Если вы считаете, что создали идеально стойкую систему, не спешите использовать ее в своем проекте. Вспомните о законе Шнайера и лучше воспользуйтесь широко известным методом.
Ссылки
Комментарии Брюса Шнайера о его законе.Merkle, Hellman — On the security of multiple encryptionPhil Zimmermann on PGP