Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практическая криптография алгоритмы и их программирование

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
Глава 4. Как устроены современные шифры 71
вало значительные изменения выхода шифра, то есть шифротекста. Такой шифр совершенно очевидно даст криптоаналитику гораздо меньше возможности иссле­довать взаимосвязи между участками открытого и зашифрованного текстов, чем не обладающий таким свойством. Само же свойство обычно называют свойством лавинного эффекта (avalanche) или просто лавинным эффектом.
Создать хороший алгоритм с лавинным эффектом не так-то просто, как мо­жет показаться. И главным образом из-за того, что существует необходимость в детерминированности всех операций шифра, ведь иначе невозможно будет по­строить обратное отображение и, следовательно, расшифровать текст даже упол­номоченному на то получателю.
Строго говоря, чтобы добиться хорошего лавинного эффекта, используют методы рассеивания (diffusion) информации. Шеннон, например, под рассеива­ниемпонимал некоторое абстрактное преобразование, при котором изменение одного бита значения аргумента влекло бы за собой изменение почти всех би­тов значения результата преобразования, то есть при изменении одного бита значения аргумента должно повлечь за собой изменение каждого из битов ре-
зультата с вероятностью, близкой к или равной
1
для каждого из битов выхо-
2 да. Это дает математическое обоснование стойкости шифра к анализу: не имея преимуществ при расстановке вероятностей изменения какого-то конкретного бита перед всеми остальными битами, криптоаналитик также не сможет изв­лечь никакой полезной информации и из статистического анализа выхода шиф­ра (напомним читателю, что примитивный подсчет частот или использование марковской модели текста — это простые разновидности анализа статистиче­ских свойств шифра).
Шеннон, видимо, сознательно отошел от проблемы конкретной реализации, предоставив описание свойства на суд криптографической общественности и его реализацию наиболее изобретательным из них. Наиболее удачливым криптогра­фом, первым предложившим элегантный и практичный способ организации свой­ства рассеивания, оказался Хорст Файстель, работавший с Шенноном на протя­жении длительного времени.
Вторая задача построения стойких шифров заключается в необходимости со­здания полной зависимости каждого бита результата криптографического преоб­разования, иными словами, все того же выхода шифра, от всех битов исходного открытого текста. Видимо, поэтому такое свойство для шифра назвали свойст- вом полноты. Вкупе со свойством рассеивания полнота дает шифру тотальную зависимость от ключа и открытого текста. Полнота шифра зависит от его переме­шивающих свойств, наследуемых с полным правом от свойства перемешивания (confusion), осуществляющего зависимость преобразования данных от ключевой информации.
Собственно говоря, в строгой трактовке полнота шифра описывается следую­щим условием, в котором для каждого бита i выхода шифра и произвольного бита j открытого текста существуют два различных открытых текста, отличающихся только в этом произвольном бите i, но имеющих один и тот же выход, за исключе­нием бита j.
72 Глава 4. Как устроены современные шифры
Надо заметить, что в ряде случаев от криптографической функции требуется полнота только для открытого текста, как, например, в отечественном стандарте шифрования, где ключ гаммируется с открытым текстом перед шифрованием. Не­которые же криптографические примитивы строятся как зависимые от ключевой последовательности преобразования. В таком случае они должны иметь свойство полноты для всех или почти всех возможных значений ключа.
Конечно, полноты и рассеивания просто не может быть в листингах 4.1 и
4.2, поскольку функции шифрования там зависят не только от ключа, но и от от­крытого текста. Но в реализации настоящих шифровальных алгоритмов эти фун­кции присутствуют. Что именно дает присутствие обоих этих свойств у шифра? Обе задачи схожи между собой. Они лишь представляют разные подходы к од­ной общей большой задаче. Отсюда и зеркальность свойств рассеивания и полно­ты. Кроме того что рассеивание очень сильно затрудняет поиск зависимостей между битами исходного и шифротекста, идеальное рассеивание также играет роль функции, распределяющей ключи равномерно по всему ключевому про­странству. Это значительно затрудняет поиск ключей-близнецов или, как их еще называют, эквивалентных ключей, то есть ключей, для которых зашифрование одного и того же открытого текста даст тот же самый шифротекст.
14
А это усложняет некоторые универсальные криптоатаки (о них мы поговорим несколь­ко позже в разделе, посвященном криптоанализу) на блочные шифры. Полнота защищает от возможности криптоаналитику получить дополнительную информа­цию о связях внутри шифра и его зависимости от ключа. Таким образом, мы от­резаем ему все пути атаки.
Считается, что, поскольку обе указанные проблемы криптографии (то есть проблемы построения и обоснования верности построения функций, реализую­щих рассеивание и являющихся полными) симметричных шифров были описаны впервые самим Шенноном, он также достиг и наилучших теоретических резуль­татов на некоторое время после этого. А вот что касается практической реализа­ции, то ее эффективная версия появилась далеко не сразу — только в середине 60-х годов была впервые опубликована надежная схема, реализующая оба этих основных свойства.
Тем не менее сам Шеннон, по-видимому занявшись изучением влияния раз­личных преобразований текстов на их энтропию, выделил из общей массы раз­личных линейных и нелинейных способов модификации текстов два класса. Именно с их помощью он хотел добиться преобразования рассеивания и преобра­зования перемешивания. Да и c теоретической точки зрения криптографические полные функции рассеивания исследованы еще не полностью. Многие результа­ты зачастую дает практика, для которой теоретическое обоснование находится весьма тяжело. Впрочем, существует очень много технических способов реализа­ции вполне приемлемых криптографических примитивов.
14
Один и тот же шифротекст из-за однозначности расшифрования всегда даст один и тот же открытый текст. Но в случае, когда существуют эквивалентные ключи, дешифровать шиф ровку во многих случаях будет проще. Ведь вместо того чтобы найти какой-то один-единствен ный ключ, криптоаналитик сможет найти любой из двух, трех и т. д. эквивалентных ключей.
-
-
Глава 4. Как устроены современные шифры 73
Единственным ощутимым минусом шенноновского принципа композицион­ных сложных шифров является необходимость того, чтобы все простейшие функ­ции шифрования в большом «бутерброде» из их множества были обратимы. Ина­че, зашифровав текст, мы не сможем найти способ его не то что дешифровать, но и расшифровать. Для программирования шифров это также представляет некото­рые неудобства — ведь теперь, кроме функции зашифрования, требуется реали­зовать адекватную функцию расшифрования.
Снова обращаясь к листингам 4.1 и 4.2, можно заметить, что функция F() яв­ляется тождественной к своей обратной, то есть зашифровывать и расшифровы­вать можно, используя только функцию F(), и ничего более. Что весьма удобно, не правда ли?
А вот для функции S() такого не наблюдается. Следовательно, придется на­писать дополнительную функцию расшифрования S_back(), а это означает, что точно так же надо будет написать еще и функции расшифрования sum_of_F_S(), other_sum_of_F_S(), mul_of_F_S() и все функции, которые используют S(). Учи­тывая необходимость проверки корректности реализации алгоритма и всевозмож­ные длительные тесты, которые придется делать для увеличившегося в два и бо­лее раз исходного текста программы, необходимость наличия обратного преобра­зования может показаться чрезвычайно неудобной. Хотя в каком-то конкретном случае это может быть и не так.
Например, современный блочный шифр 3-WAY создан именно на основе при­менения обратимых преобразований. В качестве размера блока в нем выбрано значение, равное 96 битам. Зашифрование каждого блока происходит за 11 раун­дов, в течение которых данные подвергаются множеству прямых преобразований с помощью простых функций.
В качестве таких функций было выбрано пять преобразований, включающих в себя:
простую перестановку бит в обратном порядке;
перестановку, зависящую от ключа;
функцию замены для 3-битовых векторов;
два типа вспомогательных перестановок, зависящих от ключа;
специальную линейную функцию, использующую арифметику поля Галуа характеристики 2.
Но самым простым в работе шифра представляется алгоритм выработки ите­рационных подключей. В силу устройства архитектуры шифра размер ключа ра­вен размеру блока — 96 битов, а подключи имеют тот же размер, что и главный ключ. Они вычисляются путем прибавления некоторой константы — двоичного вектора, содержащего относительно небольшое количество единиц.
Расшифрование шифротекста происходит аналогично, за исключением того, что все преобразования берутся обратными и их порядок применения ставится обратным к порядку зашифрования.
Кстати, автор этого алгоритма Йоан Дэмен (Joan Daemen) фигурирует в ан­налах криптографии так же, как соавтор блочного шифра SQUARE, который стал прототипом для AES — нового стандарта шифрования США.
74 Глава 4. Как устроены современные шифры
Сеть Файстеля
В начале 1970-х годов, сознавая необходимость защиты уже электронной ин­формации при передаче данных в сетях ЭВМ (особенно бизнес-транзакций, при осуществлении денежных переводов и передаче конфиденциальных финансовых данных), компания International Business Machines (она же известная во всем мире как IBM) приступила к выполнению собственной программы научных иссле­дований, посвященных защите информации в электронных сетях, в том числе и криптографии. Так развитие одной передовой технологии повлекло за собой на­стоящую революцию в другой.
Поскольку в ряде университетов Соединенных Штатов (таких, как Станфорд­ский университет и Массачусетский технологический институт) всегда существо­вал интерес к данной области исследования, IBM постаралась привлечь универ­ситетских специалистов к разработке методов защиты электронной информации. Это было отчасти вызвано и тем, что многие из специалистов этих университов активно сотрудничали с военными кругами и соответственно специалистами во­енной разведки — основными потребителями криптографических методов сокры­тия и защиты информации. Поэтому университетские криптографы обладали не­сколько большими объемами информации о защите информации, нежели другие профессиональные математики и аналитики. Ведь военные специалисты в то вре­мя были единственными источниками достойной научной информации, посвящен­ной криптографии, хорошо знавшими криптографию не только с теоретической, но и практической стороны.
Команду разработчиков фирмы IBM, приступившую к исследованию систем шифрования с симметричной схемой использования ключей, возглавил доктор Хорст Файстель, в то время уже ставший довольно известным криптографом.
Файстель до того момента уже успел тесно поработать с Клодом Шенноном в компании Bell Laboratories. Идеи Шеннона вдохновляли многих исследователей на оригинальные изобретения. Свидетельством тому является довольно большое количество патентов, зарегистрированных и принятых в середине 60-х годов На­циональным патентным бюро США (United States Patent and Trademark Office). Файстель активно сотрудничал с Шенноном и не мог не заразиться его идеями. На его счету как минимум два патента и несколько революционных статей в обла­сти криптографии и криптоанализа.
Воплотить большую часть из своих идей в жизнь он смог с помощью возмож­ностей, предоставленных ему компанией IBM, не жалевшей денег и специалистов на разработку новых методов защиты электронной информации. Передовая тех­нология требовала инвестиций и отнюдь не гарантировала быстрой отдачи, требо­валось время на разработку действительно эффективных средств защиты элект­ронного документооборота — эффективной и стойкой к взлому шифросистемы и методов ее использования. Представители руководства IBM понимали это и в до­статочной степени предоставили свободу разработчикам, поставив перед ними в общем-то нелегкую и нетривиальную задачу.
Надо признать, что результат оправдал ожидания. Им стала проведенная в исследовательской лаборатории IBM Watson Research Lab разработка новой ори
-
Глава 4. Как устроены современные шифры 75
гинальной архитектуры построения симметричных шифров на базе необратимых преобразований. Архитектура нового способа шифрования впоследствии была на­звана в классической литературе архитектурой Файстеля (на данный момент в русской и зарубежной криптографии существует более устоявшийся термин: сеть Файстеля или Feistel's network). Позднее, в соответствии с разработанными Хор­стом принципами, был сконструирован шифр Люцифер (Lucifer) — первый серь­езный блочный шифр, описание которого появилось в открытой литературе и вы­звало новую волну интереса специалистов к криптографии в целом.
Построение сложных криптографически стойких, но обратимых преобразова­ний представляет собой довольно трудоемкую задачу. Кроме того, практическая реализация обратимых преобразований обычно содержит неэффективные алго­ритмы, что приличным образом сказывается на скорости шифрования. По этой причине Файстель решил не искать решение проблемы обратимого преобразова­ния данных, а попытаться найти схему шифрования, в которой такие преобразо­вания не участвовали бы вовсе.
Идея использования операции «исключающее ИЛИ» возникла из классиче­ских примеров систем шифрования, а именно из идеи использовать самый про­стой с технической точки зрения способ шифрования — гаммирование. Стой­кость такого способа, как известно, зависит от свойств вырабатываемой гаммы. Следовательно, процесс выработки гаммы — двоичной последовательности, кото­рую затем суммируют с открытым текстом, — является самым узким местом во всем способе.
Файстель разрешил проблему следующим образом. Изначально выбирается размер блока данных, который будет зашифрован за одну итерацию алгоритма шифрования. Обычно размер блока фиксирован и не изменяется во время работы алгоритма над открытым текстом. Выбрав достаточно большого размера блок дан­ных, его делят, например, пополам и затем работают с каждой из половинок. Если размер левой половинки равен размеру правой, такую архитектуру называют классической или сбалансированной сетью Файстеля. Если же деление блока данных происходит не на равные части, то такой алгоритм называют разбаланси­рованной сетью Файстеля.
Предложенная им схема шифрования легко может быть продемонстрирована с помощью схемы шифрования (рис. 4.1).
На изображенной схеме буквами L
è Riобозначены левая и правая половин-
i
ки исходных данных на i-м шаге последовательного преобразования. Каждый та­кой целый шаг называют раундом шифрования. Функция гаммирования обозначе­на через F
, поскольку на каждом раунде может быть использована своя собствен-
i
ная функция. Ключ также имеет индекс i, но уже в силу того, что исходный ключ k может быть преобразован некоторым образом (говорят, развернут) в последова-
тельность итерационных ключей либо подключей, то есть ключей, которые испо­льзуются непосредственно функцией гаммирования.
Как видно из схемы, сначала с помощью функции гаммирования вырабатыва­ют гамма-последовательность, которая зависит от итерационного ключа k
è ïðà-
i
вой половины данных. После этого левая половинка просто суммируется с полу­ченной гаммой по модулю, например, 2. Затем левая и правая половинки меняют
-
76 Глава 4. Как устроены современные шифры
Ðèñ. 4.1. Архитектура сети Файстеля
ся местами. На этом один цикл шифрования заканчивается. Поскольку за один раз обрабатывается только одна половина данных, желательно, чтобы число раун­дов было кратно двум. В таком случае есть уверенность, что каждая из половинок будет обработана одинаковое число раз. На схеме рис. 4.2 отображена сеть Фай­стеля с четным числом раундов.
Исходя из данного описания, преобразование данных одного раунда можно представить с помощью двух формул, выражающих новые значения левой и пра­вой половинок блока шифруемых данных:
LR
=
ii
+
RLFRk
ii ii
+
,
1
=⊕
1
(, ).
Архитектура разбалансированной сети Файстеля выглядит весьма похоже на архитектуру обычной сети и определяется таким же способом. Единственное, но весьма существенное отличие состоит в том, что, поскольку используется разбие­ние не на равные половинки блока, а на участки различной длины, функция гам­мирования, обозначенная буквой «F», может зависеть не от всех битов исходного блока данных или иметь разные зависимости в разных раундах.
Собственно говоря, разбалансированную сеть Файстеля можно рассматри­вать как обобщение понятия сети Файстеля. Стойкость криптосистемы, построен­ной на основе сети Файстеля, зависит целиком от результата исполнения нели­нейной функции гаммирования в нескольких итерациях. Поэтому для обеспече­ния достаточной надежности данные должны быть преобразованы с достаточно большим числом раундов, что позволяет достичь требуемых свойств рассеивания и полноты и соответственно стойкости шифра к дифференциальному и линейному криптоанализу (см. раздел «Современные методы криптоанализа»).
В большинстве шифров с архитектурой сети Файстеля используемая функ­ция F в течение каждого раунда зависит только от одного из подключей, выраба­тываемых из основного ключа шифра. Это свойство на самом деле не является основополагающим или положительно влияющим на стойкость шифра — в шиф
-
Глава 4. Как устроены современные шифры 77
Ðèñ. 4.2. Сеть Файстеля с несколькими раундами
ре Khufru, например, параметры функции F изменяются после зашифрования каждого следующего символа. Сеть с такого рода зависимостью функции гамми­рования называют гетерогенной и гомогенной в противном случае. Применение гетерогенных сетей может значительно улучшить характеристики шифра, поско­льку неравномерное изменение внутренних свойств сети в пределах допустимых границ делает изучение свойств шифра достаточно затруднительным занятием. Меняя размеры половинок и их влияние на выход шифра, можно добиться впе­чатляющих статистических результатов, поскольку существует очевидная зави­симость не только между сложностью функции гаммирования, но и структурой используемой сети Файстеля.
78 Глава 4. Как устроены современные шифры
Ðèñ. 4.3. Архитектура разбалансированной сети Файстеля
Целью построения блочных шифров является не только создание стойкого алгоритма защиты информации, но и такого, чтобы его реализация была достаточ­но дешевой, а время работы как можно более меньшим. Именно поэтому, легко реализуемые шифры на базе гомогенных сбалансированных сетей Файстеля при­меняются гораздо чаще и считаются своего рода «панацеей». Однако это вовсе не означает, что они являются более криптостойкими и надежными.
Естественным путем увеличения сложности анализа сетей Файстеля являет­ся следующий метод (кстати, использованный и в алгоритме в соответствии с ГОСТ 28147—89 — отечественным стандартом криптографического преобразова­ния данных). Для того чтобы распространить влияние функции F в одном раунде на выход и функцию следующего раунда, к выходному значению F прибавляют по некоторому модулю значение итерационного подключа для текущего раунда и за­тем полученное значение подают на вход функции F следующего раунда шифро­вания. Такой способ организации сети ставит выходы последующих раундов шиф­ров в прямую зависимость от предыдущих, что способствует организации лавин­ного эффекта и полноты.
Примером практической реализации сбалансированной гомогенной сети Файстеля может служить следующий исходный текст (cм. листинг 4.3):
Листинг 4.3
uint16_t F_Gamma(uint16_t data_half, uin8_t key) {
// используем какие-либо сложные преобразования // но желательно такие, чтобы их выполнение было как можно более быстрым return (data_half ^ ((uint16_t) key * 0xABCD1234);
}
uint32_t Feistel_Network(uint32_t data, uint8_t key, int rounds) { uint16_t left, right, swap;
left = data & 0xFFFF; // делим данные (размер 32 бита) right = (data >> 16) & 0xFFFF; // на половинки по 16 битов
Глава 4. Как устроены современные шифры 79
for(inti=0;i<rounds; i++) {
swap = left ^ F_Gamma(right, key); // готовим левую половинку left = right; // и меняем местами левую и правую
right = swap; // половинки } return (left | ((uint32_t) right << 16)); }
Функция Feistel_Network() представляет собой реализацию сети Файстеля с произвольным числом раундов rounds. Ключ key представляет собой 8-битное значение, которое используется только как аргумент для передачи его функции гаммирования F_Gamma(). Обратите на это особое внимание, поскольку, очевид­но, здесь таится первый способ оптимизации алгоритма.
Чтобы ускорить исполнение функции Feistel_Network(), мы можем внести тело функции F_Gamma() внутрь Feistel_Network(), устранив тем самым наклад­ные расходы на передачу параметров и вызов подфункции. Другой очевидный спо­соб ускорить процесс состоит в том, чтобы сделать число раундов постоянным (например, равным восьми или шестнадцати), а затем избавиться от цикла, распи­сав все итерации шифра последовательно, одну за другой. Выбор количества ра­ундов объясняется нахождением некоторого своего рода компромисса между ма­лой скоростью шифрования у шифра с большим количеством раундов и простотой вскрытия шифра с малым их числом. Этот показатель у шифра, построенного на сети Файстеля, колеблется от 8 до 32 раундов. Впрочем, никто не возбраняет при­менять и 64, и 128 раундов. Все упирается лишь в вычислительные мощности компьютерных систем. Единственное ограничение состоит в том, что количество раундов должно быть четным. В таком случае обе половинки — и левая, и пра­вая — будут обработаны одинаковое число раз и, следовательно, не возникнет си­туации, когда одна половина данных (например, четная), зашифровываемых 16-раундовым алгоритмом, в действительности обработана восемью, а другая все­го лишь семью итерациями алгоритма.
Все проделанные модификации для алгоритма с четырьмя раундами показаны в листинге 4.4. Подобная оптимизация обычно дает прирост производительности в 5—10 %, а ведь это еще оптимизация не алгоритма, как такового, а примитив­ная оптимизация его реализации.
Листинг 4.4
uint32_t Feistel_Network_Optimal(uint32_t data, uint8_t key, int rounds) {
uint16_t left, right, swap;
left = data & 0xFFFF; // делим данные на половинки right = (data >> 16) & 0xFFFF;
swap = left ^ right ^ ((uint16_t) key * 0xABCD1234); // 1-й раунд left = right; right = swap;
swap = left ^ right ^ ((uint16_t) key * 0xABCD1234); // 2-й раунд left = right; right = swap;
80 Глава 4. Как устроены современные шифры
swap = left ^ right ^ ((uint16_t) key * 0xABCD1234); // 3-й раунд left = right; right = swap;
swap = left ^ right ^ ((uint16_t) key * 0xABCD1234); // 4-й раунд left = right; right = swap;
return (left | ((uint32_t) right << 16));
}
На сегодняшний день практически отсутствуют системы шифрования, по­строенные с помощью разбалансированных сетей Файстеля, а все популярные ал­горитмы являются с этой точки зрения классическими. Их вид и функции шифро­вания можно успешно представить себе, исходя из предоставленных в листингах раздела примеров.
SP-сеть и шифры Файстеля
Способ, которым следует сочетать принципы перемешива­ния и рассеивания для получения криптографической стой­кости, можно описать следующим образом. Мы увидели, что перестановки общего вида не могут быть реализованы для больших значений n, мы должны ограничиваться схемами подстановки, имеющи­ми подходящий размер... мы выбрали n = 4 в системе, раз­работанной в IBM и названной Lucifer. Хотя это может по­казаться слишком маленьким числом, такая подстановка может оказаться вполне эффективной, если ключ подста­новки... выбран верно.
15
скажем для n = 128, и поэтому
Х. Файстель. Криптография
и компьютерная безопасность
Как уже было отмечено, в отличие от шенноновской модели построения шиф­ров, использование сети Файстеля в качестве архитектурной основы шифра по­зволяет избежать необходимости того, чтобы используемые преобразования были обратимы. Более того, их необратимость — требование, причем весьма разумное требование, которым следует пользоваться при выборе соответствующих крип­тографических примитивов. Тем не менее сам шифр, естественно, должен иметь обратное преобразование. Можно сказать, что сеть Файстеля — это не что иное, как способ построения обратимого шифра с блоком размера 2N из необратимых преобразований, оперирующих с блоками размера N.
В основном в качестве необратимого преобразования для шифра выбирают некоторую функцию, которая не имеет линейной зависимости значений результа­та от значений аргумента (подробнее о конкретных реализациях см. далее и в раз­деле «Свойства S-блоков и их анализ. P-блоки»). Это означает, что функцию не-
15
То есть количества переставляемых значений.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]