23 ноября 1976 года DES или Data Encryption Standart был утверждён правительством США как официальный стандарт шифрования и оставался им до 1980 года. DES является алгоритмом симметричного шифрования, в основе которого лежит сеть Фейстеля. Останавливаться на подробном описании работы DES мы не будем, так как она нас не особо интересует в рамках данной статьи, но почитать подробнее можно, например, тут [1].
Любая криптосистема C характеризуется пятью параметрами: - множество ключей,
- множество открытых текстов,
- множество шифртекстов, E - преобразование зашифрования, D - преобразование расшифрования. Пространством сообщений в данном случае является
, а множеством ключей
, где каждый ключ
отвечает какому-либо обратимому преобразованию
. Важно, чтобы DES не был замкнутой криптосистемой. Напомню, что криптосистема называется замкнутой, если для любых трёх ключей
существуют ключи
, такие что
,
для любого сообщения
. Замкнутость в свою очередь влечёт за собой групповую структуру, в этом случае нет смысла проводить операцию зашифрования больше одного раза, так как это будет эквивалентно какому-то единичному зашифрованию. Такая особенность значительно понижает криптостойкость системы. Также, такая она влечёт уязвимость к атаке с известным открытым текстом, которая в среднем будет требовать
шагов.
Является ли DES группой?
В статье [2] было показано, что DES не является группой. Остановимся более подробно на вероятностном тесте MCT(meet-in-the-middle closure test), предложенном в [2] и основанном на атаке meet in the middle, и вычислим вероятность нахождения совпадения.
Теорема: если криптосистема C замкнута, то MCT найдёт совпадения с вероятностью не меньше , где 2r - количество ключей, выбранных для проведения теста. Если же C произвольная криптосистема, то вероятность совпадения не более
.
В чём же суть MCT?
Тест работает следующим образом. На вход поступает эндоморфная () криптосистема C, выбирается случайным образом ключ
и ищется пара ключей, такая, что
. Если C замкнута, то такая пара с высокой вероятностью будет найдена, в противном случае её найти практически невозможно.
input: ; l, r - параметры контроля.
begin
Выбираем
и
. Для
вычисляем
. Пусть
=
и
.
Для
выбираем
и вычисляем
и
.
Сортируем по первой компоненте тройки (
,
, "A") и (
,
, "B") для
.
Для каждого "совпадения"
с
, если
, то return("Совпадение найдено"). Для проверки, что
достаточно проверить, что
для всех
.
return("Совпадений не найдено").
end
Доказательство теоремы
Гораздо проще сначала доказать вторую часть утверждения. Предположим, что C замкнута, тогда для любого преобразования существует единственное преобразование
, такое, что
. Тогда всего возможных пар такого вида не более чем
, и каждая пара даёт преобразование совпадающее с
с вероятностью
. Значит осталось посчитать вероятность наступления хотя бы одного из событий
Все события независимы, значит вероятность успеха - их сумма их вероятностей. Т.е.
.
Перейдём к групповому шифру. Для подсчёта соответствующей вероятности будем пользоваться идеей парадокса дня рождений [3]. P("найти совпадения") это тоже самое, что 1 - P("не найти совпадений"), а вероятность не найти совпадений посчитать гораздо проще.
Пусть X = {}, Y = {
},
. Тогда
Попробуем вычислить эту вероятность приближённо.
Помним, что
Используем разложение в ряд Тейлора:
Тогда
Т.е. .
К сожалению, ещё не всё.
P("не найти совпадений") =
P("X без коллизий")
P("Y без коллизий").
P("X без коллизий") = P("Y без коллизий")
- вот опять пригодился парадокс дней рождений.
Отсюда P("не найти совпадений")
.
Тогда вероятность, что MCU найдёт совпадения. Теорема доказана.