Вместо предисловия
ВВЕДЕНИЕ. Автоматизированные системы обработки данных как объекты защиты информации
ОБОЗНАЧЕНИЯ
ГЛАВА 1. Основы криптологии
1.2. Оценка надежности криптоалгоритмов
1.3. История криптологии
1.4. Классификация методов шифрования информации
1.5. Шифры замены
1.6. Шифры перестановки
1.7. Блочные составные шифры
1.8. Абсолютно стойкий шифр. Гаммирование
1.9. Поточные шифры
ГЛАВА 2. Принципы построения и свойства генераторов псевдослучайных кодов
2.2. Генераторы двоичных последовательностей произвольной длины
2.3. Основы теории конечных полей
2.4. Недвоичные ГПК
2.5. Свойства генераторов М-последовательностей
2.б. ГПК в задачах паточного и комбинированного шифрования
2.7. Использование R-блоков для построения ГПК
2.8.1. Графические тесты
2.8.2. Оценочные тесты
ГЛАВА 3. Криптосистемы с секретным ключом
3.2. Классификация угроз противника. Основные свойства криптосистемы
3.3. Классификация атак на криптосистему с секретным ключом
3 4. Режимы использования блочных шифров
3.5. Отечественный стандарт криптографической защиты
ГЛАВА 4. Криптосистемы с открытым ключом
4.2. Модель криптосистемы с открытым ключом
4.3. Открытое распределение ключей
4.4. Электронная подпись
4.5. Криптосистема, основанная на задаче об укладке рюкзака
4.6. Криптосистема RSA
4.7. Гибридные криптосистемы
ГЛАВА 5. Криптографические протоколы
5.2. Доказательства с нулевым разглашением
5.3. Протоколы подбрасывания монеты [7, 10]
5.4. Протоколы битовых обязательств [7, 10]
5.5. Протоколы разделения секрета [7, 10]
ГЛАВА 6. Контроль целостности информации
6.2. Имитозащита информации. Контроль целостности потока сообщений
6.3. CRC - код
6.4. Криптографические методы контроля целостности
6.5. Код аутентификации сообщений
6.6. Код обнаружения манипуляций с данными
ГЛАВА 7. Методы аутентификации информации
7.2. Аутентификация субъекта
7.3. Симметричные методы аутентификации субъекта
7.4. Схема Kerberos
7.5. Несимметричные методы аутентификации субъекта
7.5.2. Протокол Шнорра
7.5.3. Протокол Фиата - Шамира
7.6. Аутентификация объекта
ГЛАВА 8. Электронная подпись
8.2. Хеш-функции
8.2.2. Хеш-функции на основе симметричных блочных криптоалгоритмов
8.3. Протоколы электронной подписи
8.3.2. Схема электронной подписи Шнорра
8.4. Классификация атак на схемы электронной подписи
8.5. Процедура разрешения споров
8.6. Особые схемы электронной подписи
ГЛАВА 9. Управление ключами
9.2. Генерация ключей
9.3. Неоднородное ключевое пространство
9.4. Хранение ключей
9.5. Распределение ключей
9.6. Время жизни ключей
9.7. Протокол управления ключами SKIP
ГЛАВА 10. Поточные шифры
10.1.2. RС4
10.1.3. ORYX
10.1.4. CHAMELEON
10.1.5. SOLITAIRE
10.2. Самосинхронизирующиеся поточные шифры
11.1. История конкурса на новый стандарт криптозащиты
11.2. Блочный криптоалгоритм RIJNDAEL
11.2.2. Структура шифра
ГЛАВА 12. Проблемы и перспективы развития криптографических методов защиты
12.1.2. Группа точек эллиптической кривой
12.1.4. Алгоритм электронной подписи на основе эллиптических кривых ECDSA
12.2. Неотслеживаемость. Электронные деньги
12.3. Использование односторонних функций с секретом для построения генераторов псевдослучайных кодов
12.4. Вероятностное шифрование
12.5. Стохастические методы передачи данных
12.5.2. Теория кодирования и криптография
12.5.5. Крипто- и имитозащита при стохастическом кодировании
12.6. Контроль хода программ
ВМЕСТО ЗАКЛЮЧЕНИЯ. Причины ненадежности криптосистем, или Почему криптография сложнее, чем кажется
ПРИЛОЖЕНИЕ 1
ПРИЛОЖЕНИЕ 2
Примитивные многочлены вида X^N+ x^i+ 1, где N- число Мерсенна
Примитивные многочлены вида X^N+ x^i+ 1, где i = 8, 16, 32, 64, 128
ПРИЛОЖЕНИЕ 3
ПРИЛОЖЕНИЕ 4
ПРИЛОЖЕНИЕ 5
ПРИЛОЖЕНИЕ 6
ПРИЛОЖЕНИЕ 7
ПРИЛОЖЕНИЕ 8
ПРИЛОЖЕНИЕ 9
ЛИТЕРАТУРА
Текст
                    ° ° ° ° e
° ° ° ~
° °


ТО~РДфИЧВСКИЕ M TOÀ д[~ ИНФО~~ДЦИИ ЮТЕРНЫХ СИСТЕМАХ И СЕТЯ "КУДИ Ц-ОБРАЗ" Москва ° 2001 
ББК 32.973-018 УДК 004.432 Иванов М. А. Криптографические методы защиты информации в компьютерных системах и сетях. М.:КУДИЦ-ОБРАЗ, 2001 — 368 с. ISBN 5-93378-021-9 Михаил Александрович Иванов Криптографические методы защиты информации в компьютерных системах и сетях. Учебно-справочное издание Корректор Т. Елизаветина Макет С. Кулапин Обложка 000 "деСтиль" Лицензия ЛР № 071806 от 02.03.99. НОУ "ОЦ КУДИЦ-ОБРАЗ" 119034, Москва, Гагаринский пер., д. 21, стр. 1. Тел. 333-82-11; oklkudits.ru Подписано в печать 24.05.2001. Формат 70х100/16. Бум. офсетная. Печать офс. Усл. печ. л. 29,7. Тираж 3000. Заказ Отпечатано с готовых диапозитивов в типографии "Профиздат" 109044, Москва, ул. Крутицкий вал, д. 18 М. А. Иванов, 2001 Макет НОУ "ОЦ КУДИЦ-ОБРАЗ", 2001 © © ISBN 5-93378-021-9 В учебном пособии излагаются основы классической криптографии, рассматривают- ся современные криптографические методы защиты информации: криптосистемы с от- крытым ключом, гибридные криптосистемы, системы вероятностного шифрования, про- токолы аутентификации и электронной подписи. Рассматриваются современные синхронные и самосинхронизирующиеся поточные шифры, дается описание стандарта AES — криптографической защиты XXI в. Для студентов и аспирантов вузов компьютерных специальностей. Может быть по- лезна разработчикам и пользователям компьютерных систем и сетей. 
Вместо предисловия В данном учебном пособии, посвященном вопросам криптографической за- щиты информации, нашли отражение наиболее интересные отечественные и за- рубежные публикации, а также некоторые результаты, полученные его автором, Ивановым М. А. Рассматриваются: ° основы классической криптографии; ° принципы построения современных криптосистем с секретным и открытым ключом; ° методы контроля целостности и аутентичности информации, в том числе протоколы аутентификации и электронной подписи; ° проблемы и перспективы развития криптографических методов защиты. Наиболее подробно рассмотрены методы проектирования и оценки качества генераторов псевдослучайных чисел (ГПСЧ) и методы контроля целостности информации с использованием CRC-кодов. Представлены наиболее яркие и пер- спективные идеи современной криптографии: ° схемы вероятностных одноключевых и двухключевых криптосистем; ° алгоритм стохастического кодирования информации; ° методы проектирования криптографически сильных ГПСЧ на основе двухпа- раметрических функций стохастического преобразования информации; ° организация электронных платежных систем 0 использованием протокола слепой подписи; ° криптоалгоритм RIJNDAEL, принятый в качестве стандарта криптографиче- ской защиты XXI века — AES и др. Для сотрудников Лаборатории Касперского автором был прочитан лекцион- ный курс «Современные криптографические методы защиты информации». В комлексе с данным учебным пособием и справочными материалами курс представляет собой законченную, хорошо продуманную и профессионально преподнесенную информацию о прошлом, настоящем и будущем криптографи- ческих методов. Освоившие данный курс в состоянии самостоятельно решать задачи защиты информации различной сложности. Считаю, что данное учебное пособие будет полезно и интересно не только специалистам в рассматриваемой области, но и программистам, а также обыч- ным пользователям средств компьютерной техники. Наталья Касперская, Генеральный директор, ЗА О «Лаборатория Касперского» 
Посвящается моим родителям. 
введение Автоматизированные системы обработки данных как объекты защиты информации Жизнь современного общества немыслима без повсеместного использования автоматизированных систем обработки данных (АСОД), связанных с вводом, хранением, обработкой и выводом информации. Всеобщая компьютеризация помимо очевидных выгод несет с собой и многочисленные проблемы, наиболее сложной из которых является проблема информационной безопасности. Высо- чайшая степень автоматизации, к которой стремится человечество, широкое внедрение дешевых компьютерных систем массового применения и спроса де- лают АСОД чрезвычайно уязвимыми по отношению к деструктивным воздейст- виям, ставят современное общество в зависимость от степени безопасности ис- пользуемых информационных технологий. Появление персональных компьюте- ров расширило возмо>кно ти не тол ко пользовател й, н и нарушите ей (з умышленников). Важнейшей характеристикой любой компьютерной системы независимо от ее сложности и назначения становится безо>гаснос гь цирку ругогцей в ней информации. Безопасность компьютерных систем давно стала са- мостоятельным направлением научных исследований и разработок, по этой те- матике написано значительное количество монографий. Однако, несмотря на это, нерешенных проблем не становится меньше. В первую очередь это объясня- ется все ускоряющимися темпами научно-технического прогресса, результатом которого являются все более совершенные компьютерные технологии. Их появ- ление не только ставит новые проблемы обеспечения безопасности, но и пред- ставляет, казалось бы, уже решенные вопросы в совершенно новом ракурсе [2]. Как отмечается в [3, 4, 31, 33], трудоемкости решения задачи защиты информа- ции также способствуют: ° увеличение объемов информации, накапливаемой, хранимой и обрабатывае- мой с помощью компьютерной техники; ° сосредоточение в единых базах данных информации различного назначения и принадлежности; ° расширение круга пользователей, имеющих доступ к ресурсам компьютерной системы и находящимся в ней массивам данных; усложнение режимов функционирования технических средств компьютерной системы; ° увеличение количества технических средств и связей в АСОД; ° повсеместное использование зарубежной элементной базы и программного обеспечения (ПО); 
Криптографические методы защиты информдции в компьютерных системах и сетйх ® повсеместное распространение сетевых технологий, объединение локальных сетей в глобальные; появление новых транспортных средств передачи данных; появление общедоступной, не находящейся ни в чьем владении сети Интернет, практически во всех сегментах которой отсутствуют какие-либо контролирующие или защитные механизмы; бурное развитие ПО, в большинстве своем не отвечающего минимальным требованиям безопасности; ° все большее отстранение пользователя от процессов обработки информации и передача его полномочий ПО, обладающему некоторой свободой в своих действиях и поэтому вовсе не обязательно работающему так, как предполага- ет пользователь; ° наличие различных стилей программирования, появление новых технологий программирования, затрудняющих оценку качества используемых программ- ных продуктов; ° невозможность в современных условиях при осуществлении кредитно- финансовой деятельности (сферы, чрезвычайно привлекательной для зло- умышленников) обойтись без активного взаимного информационного обмена среди субъектов этой деятельности. Предмет защиты. Ценность информации является критерием при принятии любого решения о ее защите. Известно следующее разделение информации по уровню важности [27]: жизненно важная незаменимая информация, наличие которой необходимо для функционирования компьютерной системы, организации и т. п.; важная информация — информация, которая может быть заменена или восста- новлена, но процесс восстановления которой очень труден или связан с боль- шими затратами; полезная информация — информация, которую трудно восстановить, однако компьютерная система или организация может эффективно функционировать и без нее; ° несущественная информация. Ценность информации обычно изменяется со временем и зависит от степени отношения к ней различных групп лиц, участвующих в процессе обработки ин- формации [27]: источников, или поспгавщиков, информации; держателей, или обладателей, собственников, информации; владельцев систем передачи, сбора и обработки информации; законных пользователей, или потребителей, информации; 
ВВЕДЕНИЕ нарушителей стремящихся получить информацию, к которой в нормальных условиях не имеют доступа. Отношение этих групп лиц к значимости одной и той же информации может быть различным: для одной — важная, для другой — нет. Например [10, 26]: ° важная оперативная информация, такая, например, как список заказов на данную неделю или график производства, может иметь высокую ценность для держателя, тогда как для источника (например, заказчика) или нарушите- ля — низкую; ° персональная информация, например медицинская, имеет значительно боль- шую ценность для источника (лица, к которому относится информация), чем для держателя или нарушителя; ° информация, используемая руководством для выработки решений, например о перспективах рынка, может быть значительно более ценной для нарушите- ля, чем для источника или ее держателя, который уже завершил анализ этих данных. Существует деление информации по уровню секретности, конфиденциально- сти. Признаками секретной информации является наличие, во-первых, законных пользователей которые имеют право владеть этой информацией, во-вторых, неза- конных пользовапгелей (нарушителей, противников), которые стремятся овладеть этой информацией с тем, чтобы обратить ее себе во благо, а законным пользова- телям во вред. Для наиболее типичных, часто встречающихся ситуаций такого типа введены даже специальные понятия: государственная тайна, военная тайна, коммерческая тайна, юридическая тайна, врачебная тайна и т. п. [10]. Угрозы безопасности и методы защиты информации в АСОД. Цель создания сис- тем безопасности — предупре>кде ие последст ий умышлен ых (преднамеренн и случайных деструктивных воздействий, следствием которых могут быть раз- рушение, модификация или утечка информации, а также дезинформация. В том случае, если объект атаки противника — какой-то из компонентов системы (аппа- ратные средства или ПО), можно говорить о прерывании, когда компонент систе- мы становится недоступен, теряет работоспособность или попросту утрачивается в результате обычной кражи; перехвате и/или модификации, когда противник по- лучает доступ к компоненту и/или возмо>кно ть манипулиров ть м; поддел когда противнику удается добавить в систему некий компонент или процесс (раз- рушающее программное воздействие), файлы или записи в них [39]. Эффективная система безопасности должна обеспечивать [2, 4, 10]: ° секретность всей информации или наиболее важной ее части; ® достоверность (полноту, точность, адекватность, целостность, аутентичность) информации, работоспособность компонентов системы в любой момент вре- мени; ° своевременный доступ пользователей к необходимой им информации и ре- сурсам системы; 
Криптографические методы 3Ащиты информАции в KoMnbloTEpllblx cNcTEMAx и сетвх защиту авторских прав, прав собственников информации, возможность раз- решения конфликтов; ° разграничение ответственности за нарушение установленных правил инфор- МИЦИОННЫХ ОТНОШЕНИЙ; ° оперативный контроль за процессами управления, обработки и обмена ин- формацией, так называемые средства контроля безопасности (сторожевые процессоры (Watchdog processors), системы сканирования, мониторинга, средства обнаружения и регистрации аномальных действий пользователей или поведения компонентов АСОД). Следует отметить при этом два важных факта. Во-первых, в зависимости от объекта защиты возможна различная расстановка приоритетов среди перечис- ленных свойств системы безопасности. В случае защиты государственных сек- ретов наивысший приоритет имеет секретность информации. При защите же, например, банковской платежной системы наиболее важными свойствами сле- дует признать обеспечение своевременного доступа пользователей к необходи- мым им ресурсам системы и достоверность информации. Во-вторых, имеет ме- сто трудноразрешимое противоречие между эффективным выполнением систе- мой своих основных функций и степенью обеспечения в ней необходимого уровня безопасности. Чем более высокие требования предъявляются к безопас- ности системы, тем большее количество ее ресурсов оказывается задействован- ным для обеспечения этих требований, соответственно тем неудобнее пользова- телям, работающим в этой системе. И наоборот, чем больше ресурсов выделяет- ся для эффективной работы пользователей, тем меньше их остается для решения задачи обеспечения безопасности. Причинами случайных деструктивных воздействий, которым подвергается информация в процессе ввода, хранения, обработки, вывода и передачи, могут быть [37]: ° отказы и сбои аппаратуры; ° помехи на линиях связи от воздействий внешней среды; ° ошибки человека как звена системы; ошибки разработчиков аппаратного и/или ПО; ° аварийные ситуации. К методам защиты от случайных воздействий можно отнести: ° помехоустойчивое кодирование; ® контролепригодное и отказоустойчивое проектирование; ° процедуры контроля исправности, работоспособности и правильности функ- ционирования аппаратуры; ° самоконтроль или самотестирование; е контроль хода программ и микропрограмм. 
Преднамеренные угрозы связаны с действиями нарушителя, который при этом может воспользоваться как штатными (законными), так и другими канала- ми доступа к информации в АСОД (рис. В-1). При этом согласно [2, 4, 31, 39, 42] в результате действий нарушителя, которым может являться как незаконный, так и законный пользователь, информация подвергается таким угрозам, как: ° кража носителей информации и оборудования; ° приведение компонентов системы в неработоспособное состояние или со- стояние неправильного функционирования; ® приведение системы в состояние, требующее незапланированных затрат ре- сурсов (например, на обслуживание поступающих сообщений и запросов, на ведение оперативного контроля, на восстановление работоспособности, на устранение попыток нарушения безопасности и т. п.); ° несанкционированное копирование программ и данных; ® несанкционированный доступ к секретной информации (хранимой или пере- даваемой по каналам связи); ° уничтожение или несанкционированная модификация информации или ПО; ° фальсификация сообщений (например, выдача себя за другого пользователя; санкционирование ложных обменов информацией; навязывание ранее пере- данного сообщения; приписывание авторства сообщения, сформированного самим нарушителем, другому лицу и т. п.); ° отказ от факта получения или передачи сообщения; ° отказ от факта получения или передачи сообщения в определенный момент времени; нарушение протокола обмена информацией с целью его дискредитации; имитация работы системы, анализ поведения интересующего компонента или анализ трафика с целью получения информации об идентификаторе пользо- вателя, поиска каналов утечки информации, каналов скрытого влияния на объект, о правилах вступления в связь и т. п.; ° вход в систему под видом законного пользователя (например, используя пау- зы в действиях последнего, ставшие известными идентификаторы и т. п.); ® разрыв связи и дальнейшая работа с системой под видом законного пользо- вателя; е создание помех процедуре обмена сообщениями между пользователями сис- темы. Для каждого типа угроз обычно можно предложить одну или несколько мер противодействия, целью применения которых является уменьшение риска либо за счет уменьшения вероятности осуществления угрозы, либо за счет уменьше- ния последствий реализации угрозы. В совокупности указанные меры образуют политику безопасности. Основными характеристиками каждой меры противо- действия являются эффективность и стоимость, именно они являются основой 
10 Криптогрятричкские методы защиты информхции в компьютерных системдх и сьтвх для проведения рациональной с экономической точки зрения политики безопас- ности. При оценке угроз со стороны противника следует учитывать также стои- мость их реализации. "Нормальный" противник не будет расходовать на реали- зацию угрозы больше средств, чем он может получить от последствий ее испол- нения. Поэтому одной из целей мер противодействия может являться увеличе- ния цены нарушения безопасности системы до уровня, превышающего оценку достигаемого противником выигрыша. Эффективной мерой защиты может яв- ляться всего лишь оперативное обнаружение факта реализации угрозы, учиты- вая различные экономические и социальные санкции, которые ждут нарушителя в случае обнаружения его действий. Возможные каналы несанкционированного доступа Все перечисленные штатные средства при их использовании законными пользователями не по назначению или за пределами своих полномочий Все перечисленные штатные средства при их использовании незаконными пользователями Технологический пульт управления и контрол ьно-исп ытател ьная а и паратура Внутренний монтаж аппаратуры Линии связи между устройствами системы Побочное электромагнитное излучение Побочные наводки ин ормации Отходы обработки ин ормации Рис. В-1. Каналы доступа к информации в АСОД Можно выделить следующие методы защиты информации от умышленных деструктивных воздействий, многие из которых появились довольно давно и не потеряли своего значения до настоящего времени [2, 37, 39]: ® методы обеспечения физической безопасности компонентов системы; ° ограничение доступа; ° разграничение доступа; ° разделение доступа (привилегий) — разрешение доступа только при одновре- менном предъявлении полномочий всех членов группы; 
Введение ° криптографическое преобразование информации и реализованные на его ос- нове криптографические протоколы; ° контроль и учет доступа; ° законодательные меры; ° принципы и правила работы в системе, уменьшающие риск нарушения безо- пасности, например регулярное создание резервных копий системы или наи- более важных ее компонентов, установление определенной процедуры копи- рования; ° формирование этических норм дпя пользователей, своего рода "кодекса по- ведения", согласно которому считаются неэтичными любые умышленные действия, которые могут нарушить нормальную работу системы. Анализ угроз безопасности в АСОД, тенденции развития информационных технологий дают все основания сделать вывод о постоянном возрастании роли криптографических методов при решении задач аутентификации в распределен- ных системах, обеспечения секретности данных при их передаче по открытым каналам связи, обеспечения юридической значимости результатов информаци- онного обмена. В публикациях по теме информационной безопасности крипто- графической защите уделяется особое внимание, так как специалисты считают ее наиболее надежной, а в некоторых ситуациях единственно возможным сред- ством защиты. Криптографические методы защиты информации являются предметом иссле- дования современной криптологии, включающей в себя два основных раздела, цели которых прямо противоположны: ° криптографию, разрабатывающую способы преобразования (шифрования) информации с целью ее защиты от злоумышленников, обеспечения ее сек- ретноспги, аутентичности и неотслеживаемости; е криптоанализ, связанный с оценкой надежности криптосистем, анализом стойкости шифров, разработкой способов их вскрытия. В основе предлагаемого учебного пособия лежат материалы лекций по курсу "Защита информации в компьютерных системах и сетях", читаемых на кафедре компьютерных систем и технологий Московского государственного инженерно- физического института (МИФИ). Указанные материалы базируются на откры- тых публикациях, список которых прилагается в конце книги. 
ОБОЗНАЧЕНИЯ с = с1с2...c;...c, i = 1, т, — шифротекст, зашифрованное сообщение или массив данных c; — ~-й блок шифротекста со — синхропосылка D — функция расшифрования D~ — функция расшифрования на секретном ключе k~~"'"""'~ абонента А или сек- ретная функция генерации подписи абонента А ~Ав — функция расшифрования на секретном ключе k» абонентов А и B 0~ — функция расшифрования на ключе k,~ Š— функция зашифрования или эллиптическая кривая E& t; Ђ” функ ия расшифрова ия на откры ом кл че kP"" "~ абоне т А ли отк тая функция проверки подписи абонента А E» — функция зашифрования на секретном ключе k„a абонентов А и B E(GF(p)) — множество точек (х, у) эллиптической кривой Е, удовлетворяющих условию х, у c GF(p), и бесконечно удаленная точка Е» — функция зашифрования на ключе k,. E(Z„) — множество точек (х, у) эллиптической кривой Е, удовлетворяющих усло- вию х, у с Z„, и бесконечно удаленная точка Р~(х) — односторонняя функция с секретом k G — матрица, определяющая логику работы блока пространственного сжатия информации GF(p) — поле Галуа из р элементов, р — простое GF(p') — поле Галуа из р" элементов, р — простое, п — натуральное Н вЂ” таблица стохастического преобразования, таблица замен ГОСТ 28147-89 или проверочная матрица линейного кода h(x) — хеш-функция k — ключ шифра kz — ключ расшифрования k, — ключ зашифрования kg~'"~"'~ — открытый ключ зашифрования абонента А 
Список принятых обозначений k~~"'""" — закрытый ключ расшифрования абонента А nrb — неповторяющийся блок данных р = р, р2... р, ... р, ~ = 1, т, — открытый текст, открытое сообщение или массив данных p, — t'-й блок открытого текста ро — синхропосылка Q;(t) — состояние ~-го регистра генератора псевдослучайных кодов в момент вре- мени t q;(t) — состояние ~-го триггера генератора псевдослучайных кодов в момент вре- мени t s — контрольный код или электронная подпись sign~ — электронная подпись абонента А T — сопровождающая матрица х~ — случайный запрос абонента А у~ — результат преобразования запроса хА У вЂ” множество целых чисел от О до р — 1 Z — множество целых чисел от 1 до р — 1 Ф(х) = а~~ P + ... + а; х' + ... + а1х + (xp, ~ —— 1, N, а; c GF(p"), — многочлен (поли- нам) с коэффициентами из поля GF(p") у = у1у» ... у; ... у„„~ = 1, т, — гаМмирующая последовательность (гамма шифра) (p (n) — функция Эйлера, и — натуральное (p (х) — характеристический многочлен генератора псевдослучайных кодов и — примитивный элемент поля Галуа 
Я расскажу Вач все, «ичсго «е скрывая. Арчи Гудвин ГЛАВА 1 Основы криптологии 1.1. Основные термины и определения Принято считать, что криптография — это наука о шифрах. Это далеко не так. Возможности криптографии значительно шире: ° шифрование передаваемых сообщений и хранимых данных для защиты их от утечки информации; ° контроль целостности передаваемых сообщений и хранимых данных с целью обнаружения случайных или преднамеренных искажений, т. е. защита от мо- дификации информации; ° аутентификация (проверка подлинности) передаваемых сообщений, т. е. за- щита от навязывания фальсифицированной информации и обеспечение юри- дической значимости электронных документов; аутентификация технических средств, пользователей и носителей информации; ° защита программ от несанкционированного копирования и распространения; ° организация парольных систем и др. Современная криптография включает в себя следующие основные разделы: е криптосистемы с секретным ключом (классическая криптография); ° криптосистемы с открытым ключом; ° криптографические протоколы; е управление ключами. Основной целью криптографической защиты или криптографического за- крытия информации является защита от утечки информации, которая обеспечи- вается путем обратимого однозначного преобразования сообщений или храня- щихся данных в форму, непонятную для посторонних, или иеавпгоризованных, лиц. Преобразование, обеспечивающее криптозащиту, называется шифроваии- ем. Защита от модификации информации и навязывания ложных данных, т. е. имитозащита, обеспечивается выработкой ичшпоприставки. Последняя пред- ставляет собой информационную последовательность, полученную по опреде- ленным правилам из открытых данных и ключа. В отличие от криптографии, которая считает, что сообщение в зашифрован- ном виде может быть доступно незаконному пользователю, спгегаиография скрывает сам факт передачи сообщения. Примеры стеганографических методов защиты приведены в [52]. Компьютерная стеганография, позволяющая прятать 
Гмвд 1. Основы крипюлогии секретные файлы внутри графических и звуковых файлов, основывается на свойстве этих файлов видоизменяться без потери функциональности и на неспо- собности человеческих органов чувств различать незначительные изменения в цвете изображения или качестве звука. Введем некоторые понятия, необходимые в дальнейшем [10]: ° алфавит — конечное множество используемых для шифрования информации знаков; ° текст — упорядоченный набор из элементов алфавита; ° шифр — совокупность обратимых преобразований множества открытых дан- ных на множество зашифрованных данных, заданных алгоритмом крипто- графического преобразования (криптоалгоритмом); ключ — сменный элемент шифра, применяемый для закрытия отдельного со- общения, т. е. конкретное секретное состояние параметров криптоалгоритма, обеспечивающее выбор одного варианта преобразования из совокупности возможных; именно ключом определяется в первую очередь безопасность защищаемой информации, и поэтому применяемые в хороших шифрах пре- образования сильно зависят от ключа; ° зашифрование — преобразование открытых данных в закрытые (зашифрован- ные) с помощью определенных правил, содержащихся в шифре; расшифро- вание — обратный процесс; шифрование — процесс зашифрования или расш ифрования; ° криптосистема — состоит из пространства ключей, пространства открытых текстов, пространства шифротекстов и алгоритмов зашифрования и расшиф- рован ия; ° Дешифрование — процесс преобразования закрытых данных в открытые при неизвестном ключе и/или неизвестном алгоритме (вскрытие, или взламыва- ние, шифра); ° синхропосылка — исходные параметры криптоалгоритма; ® раскрытие криптоалгоритма — результат работы криптоаналитика, приво- дящий к возможности эффективного определения любого зашифрованного с помощью данного алгоритма открытого текста; ° стойкость криптоалгоритма — способность шифра противостоять всевоз- можным попыткам его раскрытия, т. е. атакам на него. 1.2. Оценка надежности криптоалгоритмов Все современные шифры базируются на принципе Кирхгофа, согласно кото- рому секретность шифра обеспечивается секретностью ключа, а не секретно- стью алгоритма шифрования. В некоторых ситуациях (например, в военных, разведывательных и дипломатических ведомствах) нет никаких причин делать 
16 Криптогркфичкскик методы защиты информации в компьютерных систкмкх и сетях общедоступным описание сути криптосистемы. Сохраняя такую информацию в тайне, можно дополнительно повысить надежность шифра. Однако полагаться на секретность этой информации не следует, так как рано или поздно она будет скомпрометирована. Поэтому анализ надежности таких систем всегда должен проводиться исходя из того, что противник имеет всю информацию о применяе- мом криптоалгоритме, ему неизвестен пюлько реально использованный ключ [7]. В связи с вышеизложенным можно сформулировать общее правило: при созда- нии или при анализе стойкости криптосистем не следует недооценивать воз- можности противника. Их лучше переоценить, чем недооценить. Стойкость криптосистемы зависит от сложности алгоритмов преобразова- ния, длины ключа, а точнее, от объема ключевого пространства, метода реали- зации: при программной реализации необходимо дополнительно защищаться от разрушающих программных воздействий — закладок, вирусов и т. п. Хотя поня- тие стойкости шифра является центральным в криптографии, количественная оценка криптостойкости — проблема до сих пор нерешенная. Методы оценки качества криптоалгоритмов, используемые на практике [1О, 28]: 1) всевозможные попытки их вскрытия; 2) анализ сложности алгоритма дешифрования; 3) оценка статистической безопасности шифра. В первом случае многое зависит от квалификации, опыта, интуиции крип- пгоаналитика и от правильной оценки возможностей противника. Обычно счи- тается, что противник знает шифр, имеет возможность его изучения, знает неко- торые характеристики открытых защищаемых данных, например тематику со- общений, их стиль, стандарты, форматы и т. п. В [10] приводятся следующие примеры возможностей противника: ° противник может перехватывать все зашифрованные сообщения, но не имеет соответствующих им открытых текстов; противник может перехватывать все зашифрованные сообщения и добывать соответствующие им открытые тексты; противник имеет доступ к шифру (но не ключам!) и поэтому может зашиф- ровывать и расшифровывать любую информацию. Во втором случае оценку стойкости шифра заменяют оценкой минимальной сложности алгоритма его вскрытия. Однако полученить строго доказуемые оценки нижней границы сложности алгоритмов рассматриваемого типа не пред- ставляется возможным. Иными словами, всегда возможна ситуация, когда алго- ритм вскрытия шифра, сложность которого анализируется, оказывается вовсе не самым эффективным. Сложность вычислительных алгоритмов можно оценивать числом выполняе- мых элементарных операций, при этом, естественно, необходимо учитывать их стоимость и затраты на их выполнение. В общем случае это число должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных 
Гмвд 1. Основы криптологии 17 компьютерных систем. Качественный шифр невозможно раскрыпгь способом более эффекпгивным, чем полныгг перебор по всему клгочевому npocmpa~crnoy, при этом криптограф должен рассчитывапгь только на пго, что у противника не хватит времени и ресурсов, чигобы эпго сделать. Алгоритм полного перебора по всему ключевому пространству — это пример так называемого экспоненциального алгоритма. Если сложность алгоритма вы- ражается неким многочленом (полиномом) от п, где n — число элементарных I операций, такой алгоритм носит название полинолгиального. Пример полиноми- ального алгоритма — алгоритм умножения столбиком двух п-разрядных двоич- ных чисел, требующий выполнения n' элементарных, битовых, операций умно- жения [10]. В третьем случае считается, что надежная криптосистема с точки зрения про- тивника является "черным ящиком", входная и выходная информационные по- следовательности которого взаимно независимы, при этом выходная зашифро- ванная последовательность является псевдослучайной. Поэтому смысл испыта- ний заключается в проведении статистических тестов, устанавливающих зави- симость изменений в зашифрованном тексте от изменений символов или битов в исходном тексте или ключе, а также анализирующих, насколько выходная за- шифрованная последовательность по своим статистическим свойствам прибли- жается к истинно случайной последовательности. Случайность текста шифровки можно приближенно оценивать степенью ее сжатия при использовании алго- ритма Лемпела — Зива, применяемого в архиваторах IBM PC. Как отмечается в [28], если степень сжатия больше 10'/о, то криптосистема несостоятельна. Необходимые условия стойкости криптосистемы, проверяемые статистиче- скими методами: ® отсутствие статистической зависимости между входной и выходной последо- вательностями; ® выходная последовательность по своим статистическим свойствам должна быть похожа на истинно случайную последовательность; е при неизменной входной информационной последовательности незначитель- ное изменение ключа должно приводить к существенному изменению вы- ходной последовательности; ° при неизменном ключе незначительное изменение входной последовательно- сти должно приводить к существенному изменению выходной последова- тельности; отсутствие зависимости между ключами, последовательно используемыми в процессе шифрования. Существует много различных криптоалгоритмов, при этом нет ни одного, подходящего для всех случаев. В каждой конкретной ситуации выбор криптоал- горипгма определяется следующими факторами: ° особенностью защищаемой информации (документы, исходные тексты про- грамм, графические файлы и т. п.); 
Криптогрхфичсскис методы защиты информации в компьютерных системах и сетях особенностями среды хранения или передачи информации; ценностью информации, характером защищаемых секретов, временем обес- печения секретности; объемами информации, скоростью ее передачи, степенью оперативности ее предоставления пользователю; е возможностями собственников информации, владельцев средств сбора, обра- ботки, хранения и передачи информации по ее защите; ® характером угроз, возможностями противника. 1.3. История криптологии Криптография и криптоанализ имеют многовековую историю развития и при- менения [6, 10, 18, 19, 25, 28, 46, 48, 50]. Можно выделить 3 периода развития криптологии: эра донаучной криптологии (длилась с незапамятных времен до середины ХХ в.), когда последняя была занятием чудаков-одиночек, среди которых бы- ли полководцы, цари, ученые, дипломаты, священнослужители; эра классической криптографии (криптографии с секретным ключом) — ста- новление криптологии как научной дисциплины, связанной с разработкой шифров и оценкой их стойкости (1949 — 1976 гг.); начало этому периоду положила работа К. Шеннона "Теория связи в секретных системах" (см. кн.: Шеннон К. Э. Работы по теории информации и кибернетике. М.: ИЛ, 1963. С. 333~02) (в [10] имеется фрагмент этой работы); эра современной криптографии, эра бурного развития наряду с классической криптографией криптографии с открытым ключом, появление которой сти- мулировало рождение новых направлений в математике; начало этому пе- риоду положила работа У. Диффи и M. Хэллмана "Новые направления в криптографии" (см.: IEEE Trans. 1п1огпь Theory. 1976. V. IT-22. Р. 644-654). 1.4. Классификация методов шифрования информации На рис. 1.1 показаны основные объекты изучения классической криптогра- фии, где А и  — законные пользователи, W — противник или криптоаналитик. Учитывая, что схема на рис. 1.1, а фактически является частным случаем схемы на рис. 1.1, б при В = А, в дальнейшем будет рассматриваться только она. 
19 Гмвд 1. Основы криптологии Ключ k, Рис. 1.1. Криптозагцита: а — при хранении; 6- при передаче информации по каналу связи Процедуры зашифрования (encryption) и расшифрования (decryption) можно представить в следующем виде: с = Е„(р); р =Р„(с), где р и с — открытый (plaintext) и зашифрованный (ciphertext) тексты, k,. и Й,г — ключи зашифрования и расшифрования; Е~ и Рг,. — функции зашифрования с ключом Й„и расшифрования с ключом Йг соответственно, причем для любого открытого текста р справедливо Dj,~~ë =л На рис. 1.2 приведена классификация методов шифрования информации. Раз- личают два типа алгоритмов шифрования: симметричные (с секретным клю- чом) и асимметричные (c открыпгым ключом). В первом случае обычно ключ расшифрования совпадает с ключом зашифрования, т. е. k, =Й,г— - k, 
20 Криптографические методы зттщиты информации в компьютерных сискмкх и сынк либо знание ключа зашифрования позволяет легко вычислить ключ расшифро- вания. В асимметричных алгоритмах такая возможность отсутствует: для зашиф- рования и расшифрования используются разные ключи, причем знание одного из них не дает практической возможности определить другой. Поэтому, если полу- чатель B информации сохраняет в секрете ключ расшифрования k&l ;» Ђ” Ђ” k&gt ключ зашифрования Й„в — — Йвт""~""' может быть сделан общедоступным. Рис. 1.2. Классификация методов шифрования информации В процессе шифрования информация делится на порции величиной от одного до сотен бит. Как правило, поточные шифры оперируют с битами открытого и закрытого текстов, а блочные — с блоками фиксированной длины. Но главное отличие между этими двумя методами заключается в том, что в блочных шиф- рах для шифрования всех порций используется один и тот же ключ, а в поточ- ных — для каждой порции используется свой ключ той же размерности. Иначе говоря, в поточных шифрах имеет место зависимость результата шифрования порции информации от ее позиции в тексте, а в некоторых случаях и от резуль- татов шифрования предыдущих порций текста. Таким образом, при реализации поточной криптосистемы возникает необходимость в элементах памяти, изменяя состояние которых можно вырабатывать последовательность (поток) ключевой информации. Блочную же криптосистему можно рассматривать как зависящую от ключа подстановку на множестве значений блоков открытого текста [7, 9]. Достоинством поточных шифров является высокая скорость шифрования, ко- торая и определяет область их использования — шифрование данных, требую- щих оперативной доставки потребителю, например аудио- и видеоинформации. Учитывая, что при применении классических блочных шифров одинаковым блокам открытого текста соответствуют одинаковые блоки шифротекста, что 
21 Гмвд l . .Основы криптологии является серьезным недостатком, на практике получили наибольшее распро- странение комбинированные методы шифрования, использующие один из сле- дующих принципов: "сцепления" блоков; ° формирования потока ключей (гаммы шифра) с помощью так называемых генерапгоров псевдослучайных кодов (ГПК), в качестве функции обратной связи которых используется функция зашифрования блочного шифра. 1.5. Шифры замены ГРУЗИТЕ АПЕ3'ЬСИНЫ БОЧКАМИ ТЧК БРАТЬЯ КАРАМАЗОВЫ ТЧК с помощью ключа ВЕНТИЛЬ. Запишем строку исходного текста с располо>к ной под ней строкой с циклически повторяемым ключом: ГРУЗИТЕ АПЕЛЬСИНЫ БОЧКАМИ ТЧК БРАТЬЯ КАРАМАЗОВЫ ТЧК ВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕНТИЛЬВЕ В результате зашифрования, начальный этап которого показан на рис. 1.4, получим шифротекст ЕХ ЩРЭЯБЕЫЧУДККТИСЙЩРМЕЩЬЗЭРИДОБИЭУАДЧТШЛЕВИЪФГКЛЩП. Наиболее известными являются шифры замены, или подстановки, особенно- стью которых является замена символов (или слов, или других частей сообще- ния) открытого текста соответствующими символами, принадлежащими алфа- виту шифротекста. Различают одноалфавипгпуго и многоалфавитнуго замену. Вскрытие одноалфавитных шифров основано на учете частоты появления от- дельных букв или их сочетаний (биграмм, триграмм и т. п.) в данном языке. Классические примеры вскрытия таких шифров содержатся в рассказах Э. По "Золотой жук" и А. Конан Дойля "Пляшущие человечки". Примером многоалфавитного шифра замены является так называемая сг<сп ма Виженера. Шифрование осуществляется по таблице, представляющей собой квадратную матрицу размерностью и х и, где n — число символов используемого алфавита. На рис. 1.3 показана таблица Виженера для русского языка (алфавит Угг — 32 буквы и пробел). Первая строка содержит все символы алфавита. Каж- дая следующая строка получается из предыдущей циклическим сдвигом послед- ней на символ влево. Выбирается ключ или ключевая фраза. После чего процесс зашифрования осуществляется следующим образом. Под каждой буквой исходного сообщения последовательно записываются буквы ключа; если ключ оказался короче сооб- щения, его используют несколько раз. Каждая буква шифротекста находится на пересечении столбца таблицы, определяемого буквой открытого текста, и стро- ки, определяемой буквой ключа. Пусть, например, требуется зашифровать со- общение: 
22 Криптографические методы защиты информдции в компьютерных системдх и сетях К Л М Н 0 П P С Т У Ф Х Ч Ш Ь ЪЫ Э ЮЯ Л М Н 0 П P С Т У Ф Х Ц Ч ШЩЬ ЪЫ Э ЮЯ А МНОПРСТУФХЦЧШЩЬЪЫЭЮЯА 6 Н 0 П P С Т У Ф Х Ц Ч Ш Щ Ь Ъ Ы Э Ю Я А Б В ОПРСТУФХЦЧШЩЬЪЫЭЮЯА 6 ВГ П P С Т У Ф Х Ц Ч Ш Щ Ь Ъ Ы Э Ю Я А Б В Г P С Т У Ф Х Ц Ч Ш Щ Ь Ъ Ы Э Ю Я А Б Д СТУФХЦЧШЩЬЪЫЭЮЯАБВ Т У Ф Х Ц Ч Ш Щ Ь Ъ Ы Э Ю Я А Б В Г УФХЦЧШЩЬЪЫЭЮЯАБВГД ФХЦЧШЩЬЪЫЭЮЯАБД ХЦЧШЩЬЪЫЭЮЯАБВ ЦЧШЩЬЪЫЗЮЯАБВГ ЧШЩЬЪЫЗЮЯАБВГД ШЩЬЪЫЭЮЯД ЬЪЫЭЮЯА Ь ЪЫ Э ЮЯ А Б ЪЫ Э ЮЯ А Б В Ы Э Ю Я А Б В Г Э Ю Я А Б В Г Д Ю Я A Б В Д Я А Б В Г А Б В Г Д Д Б В В Г Г А Б В Г ЕЖЗ И И 6 ВГДЕЖЗИЙК ВГДЕЖЗИЙКЛ Д Ж 3 И Й К Л М 3 И И К Л М Н И И К Л М Н 0 И К Л М Н 0 П К Л М Н 0 П P Л М Н 0 П P С М Н 0 П P С Т Н 0 П P С Т У 0 П P С Т У Ф П P С Т У Ф Х P С Т У Ф Х Ц С Т У Ф Х Ц Ч Т У Ф Х Ц Ч Ш Щ У Ф Х Ц Ч Ш Щ Ц Щ ч Х Ч Ц Ш Щ Ц Ч Ш Щ Г Е Д Е Ж ЕЖЗ Ж 3 И 3 И И И И К И К Л К Л М Л М Н М Н 0 Н 0 П 0 П P П P С В Г Е Д Е Ж Д ЕЖЗ ЕЖЗ И Ж 3 И И 3 И И К И И К Л И К Л М К Л М Н Л М Н 0 Ч Ш Ь ШЩЬЪ Ь Ъ Ы Ь Ъ Ы Э Ъ Ы Э Ю Ы Э Ю Я Э Ю Я Ю Я А Я А Б А Б В П P С Т У Ф Х Ч P С Т У Ф Х Ц Ч Ш С Т У Ф Х Ц Ч Ш Т У Ф Ц Щ У Ф Х Ц Ф Х Ц Х Ц Ч Ч Ш Щ Ч Ш А Б В Г Е Б В Г Д Е Ж ВГДЕЖЗ ГДЕЖЗИ ЕЖЗИ И ЕЖЗИ И К Х Ч Ш Ь ЧШЩЬЪ ЧШЩЬЪЫ ШЩЬЪЫЭ Ь Ъ Ы 3 Ю Ь ЪЫ Э ЮЯ Рис. 1.3. Таблица Виженера для алфавита Z» Расшифрование осуществляется следующим образом. Под буквами шифро- текста последовательно записываются буквы ключа; в строке таблицы, соответ- ствующей очередной букве ключа, происходит поиск соответствующей буквы шифротекста. Находящаяся над ней в первой строке таблицы буква является со- ответствующей буквой исходного текста. Для увеличения надежности шифра можно рекомендовать его использование после предварительной псевдослучайной перестановки букв в каждой строке таблицы. Возможны и другие модификации метода. Г Е Д Е Ж ЕЖЗ Ж 3 И 3 И И И И К И К Л К Л М Л М Н М Н 0 Н 0 П 0 П P П P С P С Т С Т У Т У Ф У Ф Х Ф Х Ц Х Ч Х Ч Ш Ь ЦЧШЩЬЪ Ч ШЩЬ ЪЫ ШЩЬЪЫЗ ЬЪЫЭЮ Ь ЪЫ 3 ЮЯ ЪЫ Э ЮЯ Ы Э Ю Я А Э Ю Я А Б Ю Я А Б В Я А А Б Б В В Г Д Г А Б В Г Е Б В Г Д Е Ж В Г Д ЕЖЗ ГДЕЖЗИ ДЕЖЗИЙ ЕЖЗ И И К ЖЗИИКЛ 3 И И К Л М И И К Л М Н И К Л М Н 0 К Л М Н 0 Л M Н 0 П М Н 0 П P Н 0 П P С 0 П P С Т П P С Т У P С Т У Ф С Т У Ф Х Ц Т У Ф Х В Г Е Г Д Е Ж Д ЕЖ 3 ЕЖЗ И Ж 3 И И 3 И И К И И К Л И К Л М К Л М Н Л М Н 0 M Н 0 П Н 0 П P 0 П P С П P С Т В Г Е Г Д Е Ж ДЕЖЗ ЕЖЗ И Ж 3 И И 3 И И К И И К Л И К Л М К Л М Н Л М Н 0 М Н 0 П Н 0 П P 0 П P С П P С Т P С Т У С Т У Ф Т У Ф Х У Ф Х Ц 
25 Гмвд l Основы крипюлогии Г P У 3 И Т Е А П Е Л Ь С И Н Ы Б 0 Ч К А М И ... А Б В ВГД Н 0 П П P С ЦЧШ Ь Ъ Ы Э Ю Я Я А щ Л М ШЩЬ Ы Э Ю ЕЖЗ Т У Ф 0 П Ъ Ы Э х ц Б В Г щ Н 0 П ц ч ЬЪЫ Ж 3 Э Ю В Г Д К Л ц ч Т У Ф Ъ Ы Б В 3 И Л М 0 П P Д Е Ж Я А Д Ж С Т Ш Щ Ю Я хцч Ъ Ы Б В Ф Х Л М Н шщь Ъ Ы 3 И Ю Я А Б В Д Е И К Ь Ъ Ы В Г У Ф Ю Я Ж 3 И ЦЧШ М Н П P С щ Рис. 1.4. Принцип шифрования по таблице Виженера 1.6. Шифры перестановки Шифры перестановки, или траиспозиггии, изменяют только порядок следо- вания символов или других элементов исходного текста. Классическим приме- ром такого шифра является система, использующая карточку с отверстиями— решетку Кардано, которая при наложении на лист бумаги оставляет открытыми лишь некоторые его части. При зашифровке буквы сообщения вписываются в эти отверстия. При расшифровке сообщение вписывается в диаграмму нужных размеров, затем накладывается решетка, после чего на виду оказываются только буквы открытого текста. Решетки можно использовать двумя различными способами. В первом случае зашифрованный текст состоит только из букв исходного сообщения. Решетка изготавливается таким образом, чтобы при ее последовательном использовании в различных положениях каждая клетка лежащего под ней листа бумаги оказа- лась занятой. Примером такой решетки является гговоротная решетка, показан- ная на рис. 1.5. Если такую решетку последовательно поворачивать на 90' после заполнения всех открытых при данном положении клеток, то при возврате ре- шетки в исходное поло>ке ие се кле ки окажу ся заполненны и. Чис а, ст щие в клетках, облегчают изготовление решетки. В каждом из концентрических окаймлений должна быть вырезана только одна клетка из тех, которые имеют одинаковый номер. Второй, стеганографический метод использования решетки позволяет скрыть факт передачи секретного сообщения. В этом случае заполня- ется только часть листа бумаги, лежащего под решеткой, после чего буквы или слова исходного текста окружаются ложным текстом. 
24 Криптогрдфичсские методы здтциты информации в компьютерных системах и сктвх Рис. 1.5. Пример поворотной решетки КОМАНДОВАТЬ ПАРАДОМ БУДУ Я получим: ОЬБНАОДКДМУМВ АУ ОТР ААПДЯ. Рис. 1.6. Пример шифрования методом усложненной перестановки по таблице Рассмотрим усложненную перестиновку по таблице [19]. Пример таблицы для реализации этого метода шифрования показан на рис. 1.6. Таблица пред- ставляет собой матрицу размерностью 6 х 6, в которую построчно вписывается искомое сообщение. При считывании информации по столбцам в соответствии с последовательностью чисел ключа получается шифротекст. Усложнение за- ключается в том, что некоторые ячейки таблицы не используются. При зашиф- ровании сообщения 
Гмвд 1. Основы криптологии При расшифровании буквы шифротекста записываются по столбцам в соот- ветствии с последовательностью чисел ключа, после чего исходный текст счи- тывается по строкам. Для удобства запоминания ключа применяют перестановку столбцов таблицы по ключевому слову или фразе, всем символам которых ста- вятся в соответствие номера, определяемые порядком соответствующих букв в алфавите. Например, при выборе в качестве ключа слова ИНГОДА последова- тельность использования столбцов будет иметь вид 4 6 2 5 3 1. 1.7. Блочные составные шифры В общем случае детерминированный шифр G определяется следующим об- разом: G = (P,C,Õ,F), где Р— множество входных значений; C — множество выходных значений; К- пространство ключей; F — функция зашифрования F: РхК~С. Пусть составной шифр определяется семейством преобразований G;, имею- щими общие пространства входных и выходных значений, т. е. P, = C, = М, функции F;, определяемые ключевыми элементами k, e K;. На основе этого се- мейства с помощью операции композиции можно построить шифр, задаваемый отображением F:Мх(К, х K x ...х К) — ~М, причем F=F»... F F,, а ключом является вектор (k,,kã,...,k)е K,xK~x...xK„. Преобразование F; называется i-м раундом шифрования, i =1,г, ключ k; — ра- ундовым ключом. В некоторых случаях раундовые ключи получаются из ключа всей системы с помощью алгоритма выработки раундовых ключей (при этом размер ключа системы существенно меньше суммарного размера всех раундо- вых ключей). Если ключевые пространства К; и преобразования F, для всех ра- ундов совпадают, такой составной шифр называется ипьераиионным, представ- ляющим собой композицию одной и той же криптографической функции, ис- пользуемой с разными ключами [9]. Идея, лежащая в основе составных, или композиционных, блочных шифров, состоит в построении криптостойкой системы путем многократного применения относительно простых криптографических преобразований, в качестве которых К. Шеннон предложил использовать преобразования подстановки (substitution) 
2б Криптографические методы защиты информдцин в компьютерных системах и сетях и перестановки (permutation); схемы, реализующие эти преобразования, называ- ются SP-сетами. В [50] отмечается, что действие таких шифров аналогично "ал- горитму", к которому прибегают, когда месят тесто: РАСКАТАТЬ СЛОЖИТЬ РАСКАТАТЬ СЛОЖИТЬ РАСКАТАТЬ СЛОЖИТЬ ° ° ° ° ° ° ° ° Многократное использование этих преобразований (рис. 1.7) позволяет обес- печить два свойства, которые должны быть присущи стойким шифрам: рассеи- вание (diffusion) и перемешивание (confusion) [7]. Рассеивание предполагает рас- пространение влияния одного знака открытого текста, а также одного знака ключа на значительное количество знаков шифротекста. Наличие у шифра этого свойства: ° позволяет скрыть статистическую зависимость между знаками открытого текста, иначе говоря, перераспределить избыточность исходного языка по- средством распространения ее на весь текст; е не позволяет восстанавливать неизвестный ключ по частям. Например, обычная перестановка символов позволяет скрыть частоты появ- ления биграмм, триграмм и т. д. Цель перемешивания — сделать как можно более сложной зависимость между ключом и шифротекстом. Криптоаналитик на основе статистического анализа перемешанного текста не должен получить сколь-нибудь значительного количе- ства информации об использованном ключе. Обычно перемешивание осуществ- ляется при помощи подстановок. Как будет видно ниже, применение к каждому элементу открытого текста своей собственной подстановки приводит к появле- нию абсолютно стойкого шифра. Применение рассеивания и перемешивания порознь не обеспечивает необходимую стойкость (за исключением вышеупомя- нутого предельного случая), стойкая криптосистема получается только в резуль- тате их совместного использования. В современных блочных криптосистемах раундовые шифры строятся в ос- новном с использованием операций замены двоичных кодов небольшой разряд- ности (схемы, реализующие эту нелинейную операцию, называются S-блоками; как правило, именно от их свойств в первую очередь зависит стойкость всей системы), перестановки элементов двоичных кодов, арифметических и логиче- ских операций над двоичными кодами. Каждый раундовый шифр может являть- ся преобразованием, слабым с криптографической точки зрения. Единственное ограничение при построении составного шифра заключается в запрете на ис- пользование в двух соседних раундах шифрования преобразований, имеющих общую прозрачность. Пусть F х — ~ у, х, у C M, и на множестве М определены преобразования g u h. Если F(g(x)) = h(y), F прозрачно для g, à g прозрачно для Е 
27 Гмвд l . .Основы криптологии Примерами прозрачных операций могут являться операции циклического сдвига, замены и т. п. Любое количество подряд выполняющихся операций цик- лического сдвига или замены всегда можно заменить одной эквивалентной опе- рацией соответственно циклического сдвига или замены. Если два преобразова- ния, выбранные в качестве соседних раундов, имеют общую прозрачность g и при этом существует простое преобразование, непрозрачное для g, это преоб- Рис. 1.7. Схема простейшего итерационного шифра 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F„ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ~г 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F, 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
28 Криптогряфичкскик методы защиты информации в компьютерных систкмдх и сетях разование следует поместить между двумя раундами шифрования, и полученная композиция уже не будет прозрачной для g. Такие преобразования, чаще всего не зависящие от ключа, называются буферами. Помимо внутренних иногда при- меняют и внешние буфера, выполняющие преобразования, зависящие или не зависящие от ключа [9]. Важным достоинством многих составных шифров является их симметричность относительно операций зашифрования и расшифрования, которые по этой причине могут быть реализованы на одном устройстве. Переход от одного режима к другому обеспечивается заменой последовательности раундовых ключей на обратную. Составные шифры, использующие в качестве раундовых криптографически слабые преобразования, становятся нестойкими, если становятся известными какие-либо промежуточные результаты преобразований. По этой причине ис- пользование этой информации при криптоанализе составных шифров является некорректным [9]. Представим шифруемый блок данных (открытого р, или закрытого с; текста) длиной n ( р, = с; = и) в виде пары полублоков в 2 раза меньшего размера р; =с; = 1. R, IA=IRI =n/2. Выполним зашифрование старшего полублока L (Left) блока р, с помощью младшего R (Right), используя некоторую функциюД зависящую от раундового ключа k;, и обратимую бинарную операцию ° над n/2-битовыми блоками данных. Для подготовки к следующему аналогичному раунду выполним перестановку частей блока р,.: Lof,(R) R. Таким образом, раундовая функция зашифрования будет иметь вид F, p, =F, L, R = R, Lof,(R))(p«. 1.8), для которой легко по- строить обратное, или расшифровывающее, преобразование F, (c): F; (c;) = Р, '(L, R) = (R, L В f;(R)), где ° — операция, обратная о. Композиционный шифр, использующий раундо- вые функции такого вида, называется шифром Фейстеля. В подавляющем большинстве шифров рассматриваемой структуры используется разрядность блока, равная 64 битам, а в качестве операций о и ° — поразрядное сложение по модулю 2 (XOR). Первыми широко известными практическими реализациями итерационного блочного шифра были разработанные Х. Фейстелем, Д. Копперсмитом и другими сотрудниками фирмы IBM криптоалгоритмы Lucifer и созданный на его основе в 1974 г. в качестве стандарта шифрования данных в государственных и частных организациях DES (Data Encryption Standard). DES работает с блоками данных раз- рядностью 64 бита с применением 56-разрядного ключа, из которого по специаль- ному фиксированному алгоритму, использующему перестановки и сдвиги, выраба- тываются раундовые ключи). Применяемые преобразования — поразрядное сложе- ние по модулю 2, подстановки и перестановки; число раундов равно 16; перед нача- лом первого раунда выполняется начальная фиксированная перестановка 1Р, после 16-го раунда выполняется обратная перестановка IP . Следуя рекомендациям 1 Шеннона, в каждом раунде выполняется один шаг перемешивания (c использовани- 
29 Гмвд 1. Основы криптологии ем соответствующего раундового ключа и S-блоков), после которого следует щаг рассеивания, не зависящий от ключа. Более подробные сведения об алгоритме DES содержатся в работах [30, 46, 48, 65]. История его создания описана в [69]. Рис. 1.8. Схема петли Фейстеля: а — зашифрование; 6 — расшифрование 
30 Криптографические методы тхтциты информации в компьютерных системах и сетях 1.8. Абсолютно стойкий шифр. Гаммирование Простейшей и в то же время наиболее наде>к ой зо в ех с ем шифрова является так называемая схема однокритного использования (рис. 1.10), изобре- тение которой чаще всего связывают с именем Г. С. Вернама [25, 50]. Формиру- ется m-разрядная случайная двоичная последовательность — ключ шифра, из- вестный отправителю и получателю сообщения. Отправитель производит поби- товое сложение по модулю 2 ключа и m-разрядной двоичной последовательно- сти, соответствующей пересылаемому сообщению: с, = р,0+k,,i=1,m, где р,, k,, с; — очередной т'-й бит соответственно исходного сообщения, ключа и зашифрованного сообщения, т — число битов открытого текста. Процесс рас- шифрования сводится к повторной генерации ключевой последовательности и наложения ее на зашифрованные данные. Уравнение расшифрования имеет вид р, =c,0+k,,i =l,m. Интересно отметить, что в первоначальной схеме, предло>кен ой I M, шестнадцать 48-разрядных раундовых ключей выбирались независимо, т. е. раз- мер ключа был равен 768 битам. Однако по требованию Агентства националь- ной безопасности США (АНБ), во-первых, размер ключа был уменьшен до 64 бит, из которых только 56 являются секретными, во-вторых, в алгоритме опре- делены перестановки лишь специального вида, не зависящие от ключа, что на- водило критиков этого алгоритма на мысль, что АНБ могла использовать из- вестные ей слабости алгоритма для его взлома [9]. На протяжении последних десятилетий DES подвергался интенсивному и всестороннему исследованию и по современным понятиям уже не считается надежным. Существует несколько предложений, направленных на усовершенствование DES. Наиболее известное из них заключается в трехкратном применении алго- ритма (Triple DES) по схемам, показанным на рис. 1.9. Наиболее известные блочные шифры — IDEA, BLOWFISH, SKIPJACK [9, 30, 46, 65]. Другие блочные шифры будут рассмотрены в гл. 2 и 11. IDEA (International Data Encryption Algorithm) разработан в 1991 г., работает с блоками данных длиной 64 бита, используя ключ длиной 128 бит, число раундов 1б равно восьми. Используемые преобразования — умножение по модулю 2 + 1, сложение по модулю 2, сложение по модулю 2". Авторы — К. Лэй, Д. Мэссей. BLOWFISH — разработан в 1994 г. Б. Шнайером; работает с блоками данных разрядностью 64 бита, используя ключ переменной длины (максимальная раз- рядность равна 448 битам), число раундов равно 16. Используемые преобразова- 32 ния — подстановка, сложение по модулю 2, сложение по мод~ лю 2 SKIPJACK — разработан в 1990 г. NSA в качестве криптоалгоритма для мик- росхем Clipper u Capstone. Первоначально алгоритм был объявлен секретным, однако впоследствии его описание "просочилось" в Интернет. Шифр работает с блоками данных разрядностью 64 бита с использованием 80-разрядного ключа. Число раундов равно 32. 
Гмм 1. Основы криптологии Зашифрован не Расшифрование Рис. 1.9. Схемы трехкратного использования алгоритма DES: а — с двумя ключами; б — с тремя ключами К. Шенноном доказано, что, если ключ является фрагментом истинно слу- чайной двоичной последовательности с равномерным законом распределения, причем длина ключа равна длине исходного сообщения и используется этот ключ только 1 раз, после чего уничто>кает я, та ой ш фр являе ся абсолго стойким, его невозможно раскрыть, даже если криптоаналитик располагает не- ограниченным запасом времени и неограниченным набором вычислительных ресурсов. Действительно, противнику известно только зашифрованное сообще- ние с, при этом все различные ключевые последовательности k возмо> н и р новероятны, а значит, возможны и любые сообщения р, т. е. криптоалгоритм не даелг никакой информации об открытом тексгпе. ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
Криптографические методы м щиты ииформдции в xollllll loTEpHI lx cllcTEITIAx и снях Отправитель Ключ ... 10011101001 еееееее е Рис. 1.10. Схема однократного использования Целью противника может являться раскрытие криптосистемы, нахо>кде ключа, в крайнем случае дешифрование какого-либо закрытого сообщения. Од- нако он может быть удовлетворен, получив даже некоторую вероятностную ин- формацию об исходном тексте сообщения. Например, известный криптоанали- тику факт написания текста некоторого сообщения на английском языке, пре- доставляет ему некоторую априорнуго информацию об этом сообщении даже до анализа шифровки. В этом случае он заранее знает, что слово HELLO является более верояпиым началом сообщения, чем набор букв FGHKM. Поэтому одной из целей криптоанализа может являться увеличение информации, относящейся к ка>кд му возмо&gt кному сооб ению, таким об азом, чтобы прав льный тек более вероятен. Предположим, противник перехватил шифровку ABCCD и знает (или предполагает), что использованный шифр — это шифр простой замены. Анализ шифровки позволяет сделать вывод, что исходное сообщение состоит из пяти букв, причем на третьей и четвертой позициях стоит одна и та же буква, а остальные отличны от нее и различны между собой. Противник не может счи- тать, что это сообщение HELLO, потому что имеются и другие возмо>к ые общения, например TEDDY. Однако апостериориые вероятности таких откры- тых текстов возрастают относительно их априорных вероятностей. В то &gt ке в мя апоспгерггориая вероятность таких открытых текстов, как PEACE или GATES, снижается до нуля вне завимости от их априорпогг вероятности. По К. Шеннону, в совершенно секретных криптосистемах после анализа закрытых текстов апостериорные вероятности возможных открытых текстов остаются такими > е, как ми б ли их апрггор ые вероятно ти [ 
Гмв~ 1. Основы криптологии 55 ° Э ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Необходимые и доспгаточные условия абсотопгногг стойкости urzrcjya: ® полиая случса~оосиь ключа; ° равенсгггво длин ключа и огпкрыгпого пгекспга; ° однокрапгное использовангге клгоча. Абсолютная стойкость рассмотренной схемы оплачивается слишком большой ценой: она чрезвычайно дорогая и непрактичная. Основной ее недостаток — это равенство объема ключевой информации и суммарного объема передаваемых со- общений. Применение схемы оправданно лишь в нечасто используемых каналах связи для шифрования исключительно важных сообщений. Существует большое число модификаций представленной схемы, наиболее известная из которых осно- вана на использовании одноразовых шифровальных блокнотов (рис. 1.11). Отправитель Ключ 12 02 19 32 32 03 08 19 32 32 26 05 19 07 07 32 22 09 19 07 Исходная последовательность 17 05 10 16 05 18 13 00 31 32 08 13 20 14 16 12 00 22 08 31 "СЕКРЕТНАЯ ИНФОРМА ИЯ" mod 33: БС Leeee Ненадежный канал связи Получатель Ключ 12 02 19 32 32 03 08 19 32 32 26 05 19 07 07 32 22 09 19 07 1 Зашифрованная последовательность 29 07 29 15 04 21 21 19 30 31 01 28 06 21 23 01 22 31 27 05 "ЭЗЭП ХУЮЯ БЪЖХЧ Б Я Ы Е" mod 33; БВ Расши рованная последовательность 17 05 10 16 05 18 13 00 31 32 08 13 20 14 16 12 00 22 08 31 "СЕКРЕТНАЯ ИНФОРМА ИЯ" ° ееееееееее ° Рис. 1.11. система однократного использования на основе шифровального блокнота, BC — блок сложения, Б — блок вычитания 
Криптографические мноды защиты информации в компьютерных системах и сетях Таким образом, построить эффективный криптоалгоритм можно, лишь отка- завшись от абсолютной стойкости. Возникает задача разработки такого теорети- чески нестойкого шифра, для вскрытия которого противнику потребовалось бы выполнить такое число операций, которое неосуществимо на современных и ожидаемых в ближайшей перспективе вычислительных средствах за разумное время. В первую очередь представляет интерес схема, использующая ключ не- большой разрядности, который в дальнейшем выполняет функцию "зародыша", порождающего значительно более длинную ключевую последовательность. Данный результат может быть достигнут при использовании гаммирования, схема которого показана на рис. 1.12. Гаммированием называют процедуру на- ложения на входную информационную последовательность гаммы шифра, т. е. последовательности с выходов zei<epam pa псевдослучай ых код в. Последо тельность называется псевдослучайной', если по своим статистическим свойствам она неотличима от истинно случаи~~ои последовательности, но в отличие от по- следней является детерминированной, т. е. знание алгоритма ее формирования дает возможность ее повторения необходимое число раз. Если символы входной информационной последовательности и гаммы представлены в двоичном виде, наложение чаще всего реализуется с помощью операции поразрядного сложения по модулю 2. Надежность шифрования методом гаммирования определяется качеством генератора гаммы. Эеевеееееееееееееееееееееееееевеееее O O Ф Ключ ° е е е е е е е е в е е е е е е е в е е в е в е е е е е е е е е е е е е е е е е е е е е е е е е е е в е е е е е е е е е е ~ ~е е е е е е е е е е в е е е е е е е е е е ° ееееееееееее Рис. 1.12. Шифрование информации методом гаммирования Различают гаммирование с конечной и бесконечной гаммами. В первом слу- чае источником гаммы является аппаратный или программный ГПК. Примером 
Гмвл l. Основы криптологии бесконечной гаммы может служить последовательность цифр в десятичной за- писи числа z = 3,1415926... В том случае, если множеством используемых для шифрования знаков явля- ется алфавит, отличный от бинарного (Z. = 10,11), например алфавит Z» — рус- ские буквы и пробел, его символы и символы гаммы заменяются цифровыми эквивалентами, которые затем суммируются по модулю N: с, = (p; + y;) mod N, i = 1, т, где с;, р;, у; — очередной г-й знак соответственно исходного сообщения, гаммы и шифротекста; N — число символов в алфавите; т — число знаков открытого текста. Возможно использование при гаммировании и других логических операций. 1.9. Поточные шифры Шифр Вернама можно считать исторически первым поточным шифром. Так как поточные шифры, в отличие от блочных, осуществляют поэлементное шиф- рование потока данных без задержки в криптосистеме, их важнейшим достоин- ством является высокая скорость преобразования, соизмеримая со скоростью поступления входной информации. Таким образом обеспечивается шифрование практически в реальном масштабе времени вне зависимости от объема и разряд- ности потока преобразуемых данных. Простейшие устройства синхронного и самосинхронизирующегося шифро- вания с использованием ГПК, реализованного на основе N-разрядного регистра сдвига с лг~иейной ооратной связью — LFSR (Linear Feedback Shift Register), на- зываются скремблерами, а сам процесс преобразования — скремблированием (рис. 1.13 и 1.16) В синхронных поточных шифрах гамма формируется независимо от входной последовательности, каждый элемент (бит, символ, байт и т. п.) которой таким образом шифруется независимо от других элементов. В синхронных поточных шифрах отсутствует эффект размножения ошибок, т. е. число искаженных эле- ментов в расшифрованной последовательности равно числу искаженных эле- ментов зашифрованной последовательности, пришедшей из канала связи. Вставка или выпадение элемента зашифрованной последовательности недопус- тимы, так как из-за нарушения синхронизации это приведет к неправильному расшифрованию всех последующих элементов. На рис. 1.13 показан пример шифрования двоичной последовательности 11100101010110 с использованием гаммы формируемой 4-разрядным LFSR при начальном со- стоянии, равном 1001. Зашифрованная последовательность имеет вид 01001010010010. 
Криптографические методы защиты ииформдции в комиьютвриых системах и сетях Рис. 1.14. т".инхронное паточное шифрова- ние. Выпадение бита зашифрованной после- довательности при передаче по каналу связи Рис. 1.13. Синхронное поточное шифрование с использованием LFSR При отсутствии искажений в канале связи после расшифрования с использо- ванием той же гаммы получается исходная последовательность. На рис. 1.14 рассмотрена ситуация, когда при передаче зашифрованной по- следовательности был потерян четвертый бит и вместо правильной последова- тельности к получателю пришла последовательность 0101010010010. Видно, что после расшифрования всех битов, следующих после выпавшего, происходят искажения информации. В результате вместо битовой строки 0101010110 будет получена строка 1101110000. На рис. 1.15 рассмотрена ситуация, когда при передаче зашифрованной последо- вательности произошло искажение пятого (1 О) и восьмого (О 1) битов и вме- сто правильной последовательности к получателю пришла последовательность 01000011010010. Видно, что после расшифрования вместо правильной строки будет получена строка 11101100010110 с искаженными пятым (О ~ 1) и восьмым (1 — & t; О) бита 
Гмм 1. Основы криптологии В самосинхронизирующихся поточных шифрах элементы входной последователь- ности зашифровываются с учетом N предшествующих элементов (рис. 1.16), которые принимают участие в формировании ключевой последовательности. В самосинхро- низирующихся шифрах имеет место эффект размножения ошибок, в то же время, в отличие от синхронных, восстановление синхронизации происходит автоматиче- ски через N элементов зашифрованной последовательности. На рис. 1.16 показан пример шифрования двоичной последовательности 11100111010100 с использованием 4-разрядного LFSR при начальном состоянии, равном 1001. Зашифрованная последовательность имеет вид 01011001111100. При отсутствии искажений в канале связи после расшифрования получается исходная последовательность. Рис. 1.16. Саиосинхронизирующееся паточное шифрование с использованием LFSR Рис. 1.15. Синхронное поточное шифрование. Искажение 2 битов зашифрованной последовательности при передаче по каналу связи На рис. 1.17 рассмотрена ситуация, когда при передаче зашифрованной по- следовательности был потерян третий, равный нулю бит и вместо правильной последовательности к получателю пришла последовательность 0111001111100. 
38 Криптографические методы защиты информации в KGMllbloTEpHblx систенах и сетях Видно, что после расшифрования может произойти искажение не более 4 бит (в общем случае не более N), следующих после выпавшего. В рассмотренном примере вместо 4-битовой строки 0011 будет получена строка 0010. Все осталь- ные биты будут приняты без искажений. На рис. 1.1S рассмотрена ситуация, когда при передаче зашифрованной по- следовательности произошло искажение первого (Π— ~ 1) бита и вместо правиль- ной последовательности к получателю пришла последовательность 11011001111100. Видно, что после расшифрования помимо неправильно принятого бита, соот- ветствующего искаженному, могут исказиться еще не более четырех последую- щих. В рассмотренном примере будет неправильно принят первый бит и вместо последующей правильной 4-битовой строки 1100 будет получена строка 1111. В следующей главе будут рассмотрены более эффективные схемы ГПК. В гл. 10 будут рассмотрены наиболее известные современные поточные шифры. Рис. 1.18. Самосинхронизирующееся паточное шифрование. Искажение бита зашифрованной последовательности при передаче по каналу связи Рис. 1.17. Самосинхронизирующееся поточное шифрование. Выпадение бита зашифрованной последовательности при передаче по каналу связи 
ГЛАВА 2 Принципы построения и свойства генераторов псевдослучайных кодов Неотъемлемыми элементами любой системы защиты, в том числе и крипто- графической, являются генераторы псевдослучайных кодов. Они используются для решения следующих задач: ® генерации гаммирующих последовательностей; ° формирования контрольных кодов (CRC-кодов, имитоприставок и т. п.); © формирования случайных запросов в криптографических протоколах выра- ботки общего секретного ключа, разделения секрета, подбрасывания монеты, привязки к биту, аутентификации, электронной подписи и др. внесения неопределенности в работу защищаемых аппаратно-программных средств; внесения неопределенности в работу средств защиты; ° формирования ключевой информации. Степень защищенности компьютерной системы можно повысить даже за счет всего лишь простой замены N-разрядных счетчиков команд и адреса на генера- торы псевдослучайных последовательностей (ПСП) длиной 2~. 2.1. Генераторы двоичных М-последовательностей Важнейшим классом ПСП являются последовательности, формируемые ге- нераторами на основе регистров сдвта с линейными обратпыми связями— LFSR. Они широко используются, например, в качестве строительных блоков в схемах паточного шифрования. Основными достоинствами этих ГПК являются: ° простота аппаратной и программной реализации; максимальное быстродействие; ° близкие к идеальным статистические свойства формируемых последователь- ностей; ° возможность построения на их основе ГПК, обладающих свойствами, ценными при решении специфических задач защиты информации (формирование после- довательностей произвольной длины, формирование последовательностей с предпериодом, формирование ПСП с произвольным законом распределения, построение генераторов, обладающих свойством самоконтроля и т. п.); 
КРИПТОГРАфИЧЕСХИЕ МЕТОДЫ ЗАЩИТЫ ИНфОРМаЦИИ В KOMllb}OTEPklb}X СИСТЕМАХ И СЕТТ}Х ® высокая достоверность контроля при обнаружении случайных искажений в двоичных последовательностях. Общий вид генератора двоичных последовательностей, соответствующего уравнению Q(t+ 1) = ~ Q(t). где Q(t) и Q(t+1) — состояния регистра ГПК соответственно в моменты времени t и t+ 1 (до и после прихода синхроимпульса); Т вЂ” квадратная матрица порядка N вида 0 ... 0 0 а„ 1 ... 0 0 а„,, ~и-i ~u 1 0 0 0 0 0 0 1 или Т,= 0 ... 1 0 а 0 ... 0 1 а, 0 0 1 0 N — степень образующего многочлена N Ф(х) = g а,.х', аи = ио = 1, аi E }0, 1 }, / = 1,(JV — I}; i=0 k — натуральное, показан на рис. 2.1. При k = 1 генератор имеет вид, показанный на рис. 2.2 (Т = Т}) или рис. 2.3 (Т= Тз). БУ БУ БУ Рис. 2.1. Генератор двоичных последовательностей, соответствующий уравнению Q(t+1) = 3 Q(t) 
Гмм 2. Принципы построения и свойстм гкнцмторов псевдослучайных кодов БУ Рис. 2.2. Схема генератора при k = 1, Т = T& Рис. 2.3. Схема генератора при k = 1, Т = T2 Программная реализация N-разрядного генератора, схема которого изобра- жена на рис. 2.2, (¹ 16) имеет вид ; FEEDBACK — вектор .обратных связей, ; например, для Ф (х) = х + х + х + х + 1 FEEDBACK = 2ВН. ;MASK — код, содержащий 1 в первом значащем разряде, ;например для N - =8 MASK - =80H ;На входе в младших разрядах АХ находится "старое" состояние LFSR, ;на выходе в младших разрядах АХ вЂ” "новое" состояние LFSR. LFSR1 PROC: РУБН ВХ ~OV ВХ, АХ SHR AX, 1 ВХ, FEEDBACK JP EXIT OR AX,HASK EXIT: POP ВХ RET TEST Программная реализация генератора, изображенного на рис. 2.3, имеет вид ЮЕОВЯСК вЂ” вектор обратных связей, например 'для Ф(х) = х' + x + х + х + 1 FEEDBACK = OD4H. На входе в младших разрядах АХ находится "старое" состояние LFSR, 
Криптографические методы защиты ииформации в компьютериых системах и сетях ;на выходе в младших разрядах АХ вЂ” "новое" состояние LFSR. LFSR2 PROC: SHR AX, 1 JNC EXIT XOR AX,FEEDBACK EXIT- RET Величина, на которую происходит умножение в каждом блоке умножения, определяется соответствующим коэффициентом a„c (0,1) сопровождающей матрицы V=~" ( =0,N 1,~=0,N 1). Если а„= О, это эквивалентно отсутствию связи между выходом i-го разряда регистра ГПК и входом J-го сумматора по модулю 2. Если и;, = 1, это эквива- лентно наличию связи между вв|ходом |-го разряда регистра ГПК и входом |'-го сумматора по модулю 2. Так как нулевое состояние регистра ГПК является запрещенным, максималь- но возможное число состояний устройства, а значит, и максимально возможная длина формируемой двоичной последовательности, снимаемой с выхода любого из триггеров, равны 2 — 1. В этом случае диаграмма состояний генератора со- стоит из одного тривиального цикла и цикла максимальной длины 2" — 1. Многочлен Ф(х) степени N называется примитивным, если он не делит наце- ло ни один многочлен вида х — 1, где S & t 2 Ђ” 1. Примитив ые многочл ны S N ществуют для любого N. Показателем многочлена Ф(х) называется наименьшее натуральное число е, при котором х' — 1 делится на Ф(х) без остатка. Пусть Ф(х) — примитивный многочлен степени N, тогда справедливо сле- дующее утверждение: Свойство 2.1. Формируемая последовательность имеет максимальный период S = 2 — 1 тогда и только тогда, когда наибольший общий делитель чисел S u k равен 1 (т. е. S u k взаимно просты). Следствие. При k = 1 примитивность Ф(х) является необходимым и достаточным условием получения последовательности максимальной длины. Последовательность максимальной длины принято называть М-последо- вательностью, а формирующий ее генератор — геператором M-последова- тельности. Именно генераторы М-последовательностей обычно используются для формирования ПСП. Каждая матрица V имеет хараклгеристический многочлен в|(х), которым яв- ляется определитель матрицы V — хЕ, т. е. фх) = V — хЕ, где Š— единичная матрица. Многочлен Ф(х) определяет только структуру генератора, свойства же последнего зависят именно от тр(х). Свойство 2.2. Каждая квадратная матрица удовлетворяет своему характеристиче- скому уравнению, т. е. тр(У) = 0. Свойство 2.3. Характеристический и образующий многочлен генератора связаны следующим соотношением: фх) = Ф(х )х, т. е. являются взаимтто обраптыми. 
Гмвц 2. Принципы построения и саойоал генераторов псевдослучайных кодов Пример 2.1. Пусть N = 4, Ф(х) = х + х + 1, Т = Т~, k = 1. Эгой ситуации соответствует генератор, схема и диаграмма состояний кото- рого показаны на рис. 2.4. Если начальное состояние устройства равно 1000, на выходе первого триггера qp формируется периодическая последовательность 100110101111000..., удовлетворяющая рекуррентному соотношению qp(t+4) = qp(t+1) S qp(f) С выходов триггеров q~, q~ и дз снимаются сдвинутые копии той же последо- вательности. Уравнения работы генератора имеют вид: qp(t+1) =Oqp(t) 90q< t) 91q t) 91q~( ~у ~(й+1) = 1 qp(t) 0+ 0 q)(t) 9 0 qg(t) 0+ 0 q)(t); q~(t+1) = 0 qo(t) 9 1 q)(t) 9 0 qg(t) О+ 0 qg(t); qs(t+1) = 0 qo(t) 9 0 qi(t) 9 1 qz(t) О+ 0 qs(t), или в матричной форме: qo(l+ 1) q,(t+ 1) q2(t + 1) A(t+ 1) qo(t) q~(t) l2(t) q3(l) О О 1 1 1 О О О О 1 О О О О 1 О Примитивность фх) автоматически означает примитивность Ф(х), и наоборот. Децимацией последовательности (q;(t) } по индексу k называется формирова- ние новой последовательности (q*;(t)}, состоящей из k-x элементов (q;(t)}, т. е. q*;(t) = q;(kt). Если период последовательности, полученной в результате деци- мации M-последовательности, равен максимальному, децимация называется собственной или нормальной. Последовательность, снимаемая с выхода 1-го триггера генератора, изобра- женного на рис. 2.1, является децимацией по индексу Й последовательности, снимаемой с выхода 1-го триггера генераторов, изображенных на рис. 2.2 и 2.3. Если Q — начальное состояние ГПК, то последовательности состояний, в кото- рых будут находиться устройства в следующие моменты времени, имеют вид 0 0К0~,01' (для устройства, изображенного на рис. 2.1) и g, gT, gT", дт', ... (для устройств, изображенных на рис. 2.2, где Т= T„T = Т.). Учи- тывая, что V = 7", можно сделать вывод, что в ГПК, показанном на рис. 2.1, за один такт осуществляются преобразования, которые в генераторах, показанных на рис. 2.2 и 2.3, выполняются лишь за k тактов. Таким образом, устройство, по- казанное на рис. 2.1, в котором содержимое первых k триггеров (при k ( N) пол- ностью обновляется в каждом такте, может использоваться для генерации по- следовательности k-разрядных двоичных кодов, что нельзя сказать про устрой- ства, показанные на рис. 2.2 и 2.3, которые формируют лишь сдвинутые копии одной и тои же двоичнои последовательности. 
КриптотрАфические методы защиты информАции в компьютерных системАх и сетйх Пример 2.2. Пусть N = 4, Ф(х) = х + х + 1, Т = Т1, k = 2. Этой ситуации соответствует генератор, схема и последовательность пере- ключений которого показаны на рис. 2.5. Если начальное состояние устройства равно 1000, на выходах первого и второго триггеров формируется периодиче- ская последовательность 2-разрядных двоичных кодов 101111000100110... 001001101011110... или 103113202122330... Рис. 2.4. Генератор двоичной М-по- следовательности, соответствующий Ф(х) =x'+x'+1, Т= Т,, k=1,и его диаграмма состояний Рис. 2.5. Генератор двоичной _#_-последовательности, соответствующий Ф(х) =x'+õ'+1, Т= Т,, k = 2,и егодиаграмма состояний 
Гмвц 2. Прииципы построения и свойстм генердторов псевдослучайных кодов Уравнения работы генератора имеют вид: qp(t+1) = 0'qp(f) О+ 1'qj(t) О+ 1'ф(к) О+ 0'q](t) q>(t 1) =Оqp t) +0 qi t 1 qq t 1 qq( qz(t+1) = 1 qp(t) 9 0 qy(t) 9 0 q(t) О+ 0 ф(е); дз(~+1) = 0 qp(t) O+ 1 q> t) О 0 qz t) O 0 q~( или в матричной форме: Q(t+1) = V Q(t), где 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 0 Пример 2.3. Пусть N = 4, Ф(х) = х + х + 1, Т = Т,, k = 4. Этой ситуации соответствует генератор, схема и диаграмма состояний кото- рого показаны на рис. 2.6. Уравнения работы генератора имеют вид: суо(1+1) = 1 qp(t) O+ 0 qi(t) O+ 1 q~(t) O+ 1 q~(t); су,(к+1) = 1 qp(t) O+ 1 qi(t) O+ 0 ~~(1) O+ 0 q,(t); qq(t+1) = 0 qp(t) O+ 1 qg(t) O+ 1 qg(t) O+ 0 q)(t); чз(1+1) = 0'чО(е) О+ 0'ч1(е) О+ 1'д2(е) О+ 1'q)(t), или в матричной форме: Q(t+1) = V Q(t), 1 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 где V= 7,4 = пусть T = T2, k = 1, F(x) — примитивный многочлен. Генераторы, образую~ций многочлен которых имеет вид Пример 2.4. Пусть ф = 5, F(x) = х + х + 1, Т = Т, k = 1; Ф(х) = (х+ 1)(х'+х'+ 1) =х'+х +х+ 1. Этой ситуации соответствует генератор, схема и диаграмма состояний которого покыаны на рис. 2.7. Уравнение работы генератора имеет вид Q(t+1) = T Q(t), где 0 0 0 0 1 1 0 0 0 0 Т,=О 1 0 0 1 0 0 1 0 0 0 0 0 1 1 Ф(х) = (х+ 1)F(x), обладают свойством самоконтроля: при правильной работе устройства свертка по модулю 2 содержимого всех триггеров не меняет своего значения. 
4б Криптографические методы защиты информации в компьюткриых систсмхх и crmx Рис. 2.6. Генератор двоичной M-последовательности, соответствующий Ф(х) = x'+ х'+ 1, Т = T&g ; = 4 и го диагра ма состоя 
Гмвц 2. Принципы AocTpoEHHQ u cBQAcTBA ffHKpATopoB псевдослучдйных кодов ~èñ. 2.7. Генератор двоичной последовательности с самононтролем, соответствующий Ф(х) = x'+ х~ + x+ 1, Т = T2, и его диаграмма состояний Уравнение самоконтроля: qp(t) 0+ q~(t) 0+ q(t) 0+ q> t) 0+ q4 t = con 
48 криптографические методы злщиты информации в компьютерных системах и сйлх Пример 2.5. Пусть N = 65, Ф(х) = хб'+ х + 1, k = 8, Т= Ti. Данной ситуации соответствует устройство, показанное на рис. 2.3. Про- граммная реализация этого генератора на языке ассемблера IBM PC в предпо- ложении, что [qg)(t)...q> t) qp( ) = Е [qp3(t)" q„(t) q„(t)] = ЕМ' q~(t) = CF, потребует всего лишь трех команд на каждый такт работы устройства: RCR ЕАХ XCHG SAX, ЕВХ XOR ЕВХ, ЕАХ q„(t) q„(t) q„(t) Рис. 2.8. Генератор двоичной М-последовательности, соответствующий Ф(х) = x" + х" + 1, k=8,Т= Т1 Первая команда формирует в CF значение q64(t+ 1) = qq(t) и готовит второй опе- ранд для команды XOR (рис. 2.9, а). Вторая команда формирует в ЕАХ значения [багз(~+1)...q (t+1)] = [@1(t)...qp(t)] (рис. 2.9, б). Третья команда формирует в ЕВХ значения [q»(t+1).. qp(t+1)] = [qp4(t)O+q»(t)...q~z(t)O+qp(t)] (рис. 2.9, в). Рис. 2.9. Программная реализация генератора ПСП, соответствующего Ф(х) = x" + x" + 1, В=8,Т=Т, 
Гмм 2. Принципы построения и свойстм гвкрдторов пс~вдослучдйных кодов 2.2. Генераторы двоичных последовательностей произвольной длины Исключение запрещенного нулевого состояния всех триггеров генератора по- зволяет увеличить период формируемой последовательности и сделать его макси- мально возможным, равным 2~, повысить ее качество, так как вероятности появ- ления О и 1 становятся равными 1/2. Последовательности длиной 2 называются последовательностями дв Брвйпа (De Вгш1п). Уравнения работы генератора по- следовательности длиной 2 при k = 1 и Т= Т) могут, например, иметь вид: 9o(<+1)=rgo <) д,( ) . . qn, ~(0O+Яац, я(н а,(1+1) = а,,(~), J'=:1, N -1. Пример 2.6. Пусть Ф(х) = х + х + 1, Т = Т), k = 1. Схема генератора периодиче- ской последовательности длиной 16 и диаграмма его состояний приведены на рис. 2.10. Уравнения работы генератора имеют вид: q„(t+1) =qp(t) q,(t) q,(t) 0+ qz(t) О+ цЯ; q,(t+ 1) = q,,(t), ) =1,2, 3. Генератор последовательности произвольной длины 2~ ' ( S ( 2 — 1 строится следующим образом. Выбирается примитивный многочлен Ф(х) степени № Фиксируется произвольное ненулевое состояние Qp генератора. Моделируется t = 2 — S тактов работы ГПК и определяется состояние Q,. Выполняется пораз- рядная операция XOR над кодами Q) и Q,. Единичные биты результата опреде- ляют номера тех триггеров ГПК, сигналы на D-входах которых необходимо ин- вертировать, когда генератор находится в состоянии Qp. Управляемые инверто- ры реализуются на дополнительных элементах XOR, число которых и место в схеме генератора определяются результатом операции Q& t; О+ Пример 2.7. Пусть Ф(х) = х + х + 1, Т = T), k = 1, S = 10. Выберем Qp = 0001. Тогда Qi — — 1000, Qt = Qg = 0110 (см. рис. 2.4), Q) О+ Q = = 1110. Схема генератора периодической последовательности длиной 10 и пред- периодом длиной 6, а также диаграмма его состояний приведены на рис. 2.11. Пример 2.8. Пусть Ф(х) = х' + х + 1, Т= Т), k = 1. На рис. 2.12 показано универсальное устройство, которое может формиро- вать последовательность любой длины, меньшей или равной 16. Эта длина зави- сит от того, к каким входам управления режимом (УР) подключен выход изме- нения режима (ИР). Так, например, если все входы УР подключены к шине лог. О, формируемая последовательность имеет длину 16; если выход ИР подключен к первому входу УР, а оставшиеся входы управления режимом — к шине лог. О, формируемая последовательность имеет длину 15 и предпериод длиной 1; если выход ИР подключен ко второму входу УР, а оставшиеся входы управления ре- жимом — к шине лог. О, формируемая последовательность имеет длину 14 и предпериод длиной 2, и т. д. 
° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Рис. 2.10. Четырехразрядный генератор последовательности де Брейна 50 Криптографиvfсхиf методы защиты информации в компьютерных системах и сапх 
AAGA 2. Принципы построения и cBoAcTBA cfHfpATopoB псевдослучайных кодов Рис. 2.11. Схема генератора периодической последовательности длиной 10 и предпериодом длиной б и диаграмма его состояний 
52 КриптотрАфические методы зАщиты информАции в компьютерных системАх и сетйх Рис. 2.12. Схема четырехразрядного универсального генератора двоичных последовательностей: УР— входы управления режимом, ИР— выход изменения режима 2.3. Основы теории конечных полей Поле — это множество элементов, обладающее следующими свойствами: а = — P(mod р). ° в нем определены операции сложения, вычитания, умножения и деления; ° для любых элементов поля а, Р и у должны выполняться соотношения (свой- ства ассоциативности, дистрибутивности и коммутативности) n+ P = P+ а, ар = Pn, n+(P+у) =(n+P)+у, n(Py) =(а~3)у, n(P+у) = ар+ ау; ° в поле должны существовать такие элементы О, 1, — а и (для а а 0) а ', что О + а = а, а+ ( — а) = О, On = О, 1а = а, а(а ') = 1. Конечное поле содержит конечное число элементов. Поле из L элементов обозначается GF(L) и называется поле~ Гачуа в честь первооткрывателя Эвари- ста Галуа (1811 — 1832). Все ненулевые элементы конечного поля могут быть представлены в виде степени некоторого фиксированного элемента поля и, на- зываемого примитивным элементом. Простейшие поля получаются следующим образом. Пусть p — простое число. Тогда целые числа О, 1, 2, ..., (р — 1) образуют поле GF(p), при этом операции сложения, вычитания, умножения и деления выполняются по модулю р. Более строго, GF(p) — это поле классов вычетов по модулю р, т. е. GF(p) = (0, 1, 2, ..., (p 1)), где через О обозначаются все числа, кратные р, через 1 — все числа, дающие при делении на р остаток 1, и т. д. С учетом этого вместо (р — 1) можно писать — 1. Утверждение а = р в GF(p) означает, что а — р делится на р или что а сравнимо с P noмодулюр, т. е. 
Гмвц 2. Принципы построения и свойства гкнкрдторов псевдослучайных кодов Поле, содер>ка е L р" элемент в, д р Ђ” прос ое чис о п Ђ” натуральн не может быть образовано из совокупности целых чисел по модулю L. Напри- мер, в множестве классов вычетов по модулю 4 элемент 2 не имеет обратного, так как 22 = О mod 4. Таким образом, хотя это множество состоит из четырех элементов, оно совсем не похоже на поле GF(L). Чтобы подчеркнуть это разли- чие, обычно вместо GF(4) пишут GF(2 ). Элементами поля из р" элементов являются все многочлены степени не более (n — 1) с коэффициентами из поля GF(p). Сложение в GF(p") выполняется по обычным правилам сложения многочленов, при этом операции приведения по- добных членов осуществляются по модулю р. Многочлен с коэффициентами из GF(p) (т. е. многочлеп над полем GF(p)), не являющийся произведением двух многочленов меньшей степени, называется неприводимым. Примитивный мно- гочлен автоматически является неприводимым. Выберем фиксированный не- приводимый многочлен <р х) степ ни п. То да произведе ие д ух элемен ов п получается в результате их перемножения с последующим взятием остатка по- сле деления на <p( ). Та им образ м, п ле GF( ") мо но представ ть ак п классов эквивалентности многочленов над GF(p). Два таких многочлена объяв- ляются эквивалентными, если их разность делится на <р( Пример 2.9. Рассмотрим GF(5) = (О, 1, 2, 3, 4). Типичные операции сложения, вычитания, умножения и деления в этом поле выглядят так: 2 + 4 = 6(mod 5) = 1; 1 — 4 = — 3 = (5 — 3) = 2; 4 2 = 8(mod 5) = 3; 3: 2 = (5 + 3) 2 = 4. Все ненулевые элементы этого поля можно представить в виде степени 2 или 3, т. е. 2 и 3 — примитивные элементы GF(5): Пример 2.10. Пусть р = 2, n = 4, (p(x) = х + х + 1 — примитивный над GF(2). Тогда элементы поля GF(2 ) имеют вид 4 О, 1,х,х + 1, ...,х + х + х + 1. Если <p z) Ђ” примитивн й в качес ве 0> можно взять орень этого мног и соответствие между различными представлениями элементов поля можно по- лучить с помощью устройства, изобра>кенн го на р с. 2. 3, ля котор го &l является характеристическим многочленом, Т = Т. Состояния генератора эле- ментов поля определяют список элементов GF(24), которые в виде последова- тельных степеней и и в виде многочленов степени не более трех показаны на том же рисунке. Типичные операции сложения, умножения и деления выглядят следующим образом: (х +х + 1) + (х +х+ 1) =х'+х, 
54 Криптографические методы защиты информации в комль отерных системах и сеткх ИЛИ 1101 + Olll = 1010; (х + 1)(х' + х) = и' и = и' = х' + х + 1, ИЛИ (х+ 1)(х'+х) =x +х'+х +x(mod(p(x)) =х'+х + 1; (х +х+ 1):(х +х) =и': и =и =х+ 1. B вид коэффициента многочлен В виде степени а вее ° х' Х + Х Х + + Х х + х' Х + Х + Х + Х + + Х + leeeee е е е е е е е е ° е е е е е е в е е в е е ° е е le eeeeee оР=1 Рис. 2.13. Соответствие между различными формами представления элементов поля GF(2') Пример 2.11. Пусть р = 3, n = 3, тр(х) = 2хз + х + х + 1 — неприводимый над GF(3). Ф(х) = х' + х + х + 2, а значит, соответствующий троичный генератор имеет вид, показанный на рис. 2.14, а, элементы поля GF(3 ) имеют вид О, 1, 2, х, х + 1, х + 2, 2х, 2х + 1, 2х + 2, ..., 2х'+ 2х + 2. Характеристический многочлен <р х) не являе ся примитив ым ад GF( в результате диаграмма состояний устройства состоит из двух кодовых колец по 13 состояний в каждом и одного вырожденного тривиального цикла, соответст- вующего состоянию 000, переходящему само в себя. 1000; :, 0100; ; 0010; 0001; : 1100 : 0110: : 0011: : 1101 '. : 1010: ; 0101: , '1110: ', 0111 ,' , '1111 ,' : 1011,: ; 1001,' ° е е е е е в е е е~ 1000 ; 1 , :1 + :1 + '1 :1 + :1 + ', 1 ', 1 ХЗ,' ХЗ: ХЗ ХЗ ' Э Х3 ХЗ i ХЗ l ХЗ ' ;1 ;0) ;И~: ~(03 ° 0)4 05 1 е 0,16; :И :„в' ° От9 1О : И11: ; О,,1г'. (g13 е : 0)14' 
Гмм 2. Принципы построения и свойстм генераторов псевдослучайных кодов 55 Имеем: Ф(х + 2) = (х + 2)' + (х + 2) + (х + 2) + 2 = х' + л. + 2x + 1 = Ф(х). Ф(х) является примитивным над GF(3), а значит, в качестве генератора элемен- тов поля GF(3 ) можно взять устройство, такт работы которого эквивалентен умножению на х+ 2 по модулю y(x). Схема генератора элементов поля, соответ- ствующего уравнениям Qp(t+ 1) = 2Qp(t) + Qs(t)(mod 3); Qg(t + 1) = Qp(t) + 2Qg(t) + Qo(t)(mod 3); Q~(t+ 1) = Qi(t), показана на рис. 2.14, б. В матричной форме логика работы устройства мох&lt быть записана следующим образом: Q(t + 1) = T Q(t) + 2Q(t), т. е. операция умножения на и может быть описана матрицей 2 0 1 1 2 1 0 1 0 Состояния генератора элементов поля определяют список элементов GF(3 ), 3 которые в виде последовательных степеней и и в виде коэффициентов (при х, ) х, х ) троичных многочленов степени не более двух показаны на рис. 2.14, в. Типичные операции сложения, умножения и деления выглядят следующим образом: (х'+ х+ 2)+ (2х'+ х) = 2x+ 2, ИЛИ 112+210 = 022; (х +х+ 1)(2х) =и о)'=и'=х +х+2, ИЛИ (х + х+ 1)(2х) = 2x + 2x + 2x(mod(p(x)) = x + х+ 2; (х ): (2х + х) = и': и = и = х + 1. Конечные поля порядка р" существуют для всех простых р и всех натураль- ных и; более того, это единственные конечные поля. 
56 Криптографические методы защиты информации в компьютерных системах и сетях mod Рис. 2.14. Поле GF(3'): а — устройство, соответствующее Ф(х) = х'+ х'+ х+ 2; 6 — генератор элементов поля GF(3 ); в — диаграмма состояний генератора элементов поля GF(3') 
Гмвд 2. Принципы построения и свойства генераторов псевдослучайных кодов 57 2.4. Недвоичные ГПК Пусть L — степень простого числа, GF(L) — поле Галуа из L элементов. Общий вид генератора L-ричных последовательностей, соответствующего уравнению Q(t+1) = T' Q(t), где Q(t) и Q(t+1) — состояния ГПК соответственно в моменты времени t и t+ 1 (до и после прихода синхроимпульса); Т вЂ” квадратная матрица порядка N вида 0 0 0 Qp 0 0 Qp &l Ор Ор 0 0 1 0 0 1 ар Т= , ИЛИ Т2— 1 0 &l 0 1 Ор 0 0 1V N — степень образующего многочлена Ф(х) = ~~~ и, л', ао Ф О, a; c GF(L), i = О, N; i=0 k — натуральное, показан на рис. 2.15. БУ БУ БУ Рис. 2.15. Генератор недвоичных последовательностей, соответствующий уравнению <(~ ~ = ~'~ 
Криптографические методы защиты информации в компьютерных системах и снях При k =1 генератор имеет вид, показанный на рис. 2.16 (T = T~) или рис. 2.17 (Т= Т). ЬУ Рис. 2.16. Схема генератора при k = 1, Т = Т1 Рис. 2.17. Схема генератора при k = 1, Т = T& Величина, на которую происходит умножение в каждом блоке умножения (БУ), определяется соответствующим коэффициентом а;, c GF(L) сопровож- дающей матрицы V = 7" (i = О, N — 1, /= О,N — 1). Если а;, = О, это эквивалентно отсутствию связи между выходом т'-го регистра ГПК и входом ~-го блока сложе- ния (БС). Если а;, = 1, это эквивалентно наличию связи между выходом т'-го ре- гистра ГПК и входом j-го БС. При L = 2" блоки сложения и умножения в поле GF(2") реализуются на сумматорах по модулю 2. Максимально возможное число состояний устройства, а значит, и макси- мально возможная длина формируемой L-ричной последовательности, снимае- мой с выхода любого из регистров, равны L~ — 1. В этом случае диаграмма со- стояний генератора состоит из одного тривиального цикла и цикла максималь- ной длины L~ — 1. Многочлен Ф(х) степени N с коэффициентами из GF(L) называется неприво- димым, если он не делится ни на один другой многочлен степени, меньшей N u 
59 Гмм 2. Принципы построения и cBQAcTBA cf HEpATopoB псевдослучайных кодов большей О. Многочлен Ф(х) степени N с коэффициентами из GF(L) называется примитивным, если он не делит нацело ни один многочлен вида х — 1, где S S&l ;L Ђ” Число примитивных многочленов степени N равно (p L~-1 N где y(n) — функция Эйлера (число натуральных чисел, меньших и и взаимно простых с n). Пусть Ф(х) — многочлен степени N, примитивный над GF(L), тогда справед- ливо следующее утверждение: Свойство 2.4. Формируемая последовательность имеет максимальный период S = L~ — 1 тогда и только тогда, когда наибольший общий делитель чисел S и Й равен ! (т. е. S u k взаимно просты). Пример 2.12. Пусть L = 3, Т= Т~, Ф(х) = х + х+ 2 — многочлен, примитивный над GF(3). На рис. 2.18 приведены правила сложения и умножения по модулю 3, со- ответствие между элементами GF(3) и состояниями регистров ГПК, схемы гене- раторов и диаграммы состояний при k = ! и k = 3. Последовательность переклю- чения устройства при k = ! показана сплошной линией, при k = 3 — пунктирной. При приведенном соответствии между элементами GF(3) и состояниями регист- ров ГПК умножение на 2 по модулю 3 эквивалентно простой передаче сигналов с первого и второго входов БУ соответственно на второй и первый выходы бло- ка. При k = 1 сопровождающая матрица имеет вид 1 1 т= 1 0 а уравнения работы Qp(t+ 1) = Qp(t) + Qt(t)(mod 3); Qi(t+ 1) = Qp(t). При k = 3 сопровождающая матрица имеет вид 0 2 V= F~~j 2 1 а уравнения работы Qp(t + 1) = 2Я1 Я(той 3); Qi(t + 1) = 2Qp(t) + Qi(t)(mod 3). 
60 КриптогрАфические методы зАщиты информАции в компьютерных системАх и сетях БУ 2тод3 Рис. 2.18. Поле GF(3): а — правила сложения и умножения по модулю 3, соответствие между элементами GF(3) и состояниями регистров ГПК; 6 — схемы генераторов трои~ной М-последовательности при Т= Т,, Ф(х) =xт-+x+ 2, k = 1; в — k = 3; г — диаграммы состояний генераторов 
Гмвц 2. Принципы построения и свойств~ гснсрдторов пссвдослучдйных кодов Пример 2.13. Пусть L = 2', Т = Т~, Ф(х) = х + х + х+ и — многочлен, примитив- НЪ|Й НЗД GF(2 ) = 10, 1, и, и'}, и'+ и + 1 = О, и = 1. На рис. 2.19 приведены соответствие между элементами GF(2') и состояния- ми регистров ГПК, схема генератора М-последовательности. Сопровождающая матрица имеет вид т= 0 0 0 0 0 0 0 0 0 0 а уравнения работы с учетом равенства и 2 И QD(ii-!)= — (QD(i)+a.(i)+a,(i)(6Ê 2 g, (г+ 1) = g,, (t), / = 1,7 . Рис. 2.19. Поле бг(2'): а — правила сложения и умножения в поле GF(2 ) = (0, 1, и, m'}, и'+ и+ g = p, и' = y, соответствие между элементами GF(2 ) и состояниями регистров ГПК; 6 — схема генератора М-последовательности, соответствующего Т = Т,, Ф(х) = х + х +х+ (0 ° ° ее ее ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° БС ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° еееее ° е е и' О и' О О 1 О О О О О 1 О О О О О 1 О О О О О 1 О 0 0 0 0 1 О О и' О О О 0 0 0 О О О О О О 0 0 0 1 0 0 О 1 О 
62 Криптографические метОды ЭАщиты инфОрмации В ХОмпьютериых системАх и сетях Результаты рыд. 2.1 легко обобщить на случай L & t; 2. Рассмотр м, наприм формирование последовательности длиной L~ и обеспечение свойства самокон- троля. В общем случае свойством самоконтроля обладают генераторы, обра- зующий многочлен которых имеет вид Ф(х) = (х — l)F(x). Пример 2.14. Пусть L = 2, Т = T), Ф(х) = (ox + х + 1 — многочлен, примитив- ный над GF(2 ). На рис. 2.20 приведена схема генератора последовательности длиной 2 = 16 и диаграмма его переключений. Рис. 2.20. Недвоичкый генератор последовательности длиной 2" = 16: а — схема генератора; 6 — диаграмма его переключений Пример 2.15. Пусть L = 2", Т = Т, Ф(х) = (х+ l)F(x), Т= Ti, F(x) = сох + х + х + 1— многочлен, примитивный над GF(2 ). На рис. 2.21 приведена схема ГПК с само- контролем с учетом того, что Ф(х) = (ох + их'+х +х +х +х+ 1. 
Гмм 2. Принципы построения и свойства генердторов псевдослучайных кодок Рис. 2.21. Схема недвоичкого ГПК с самоконтролем Уравнения самоконтроля: 9 q,, t то 2 =const,~ =,1. 2.5. Свойства генераторов М-последовательностей Основные свойства и структурные особенности последовательностей макси- мальной длины [26, 27]: 1) каждому многочлену Ф(х) степени N, примитивному над GF(p), соответству- ет множество И(Ф(х)) из р — 1 сдвинутых копий М-последовательности; 2) сумма по модулю р двух М-последовательностей из И(Ф(х)) также является М-последовательностью из И(Ф(х)); 3) если Q = Qpg>gz . Q „ Ђ” то М-последовательно ть из Й(Ф(х ) а Ђ” не левой элемент поля GF(p), то ug также является М-последовательностью из Й(Ф(х)); 4) в М-последовательности О встречается р ' — 1 раз, а каждый ненулевой эле- мент поля GF(p) — р ' ры; 5) М-последовательность имеет следующую структуру: Q=b,иЬ,иЬ,...,ог b, где b — последовательность длины (р — 1)/(p — 1), а а — примитивный элемент поля GF(p), т. е. период М-последовательности всегда можно рыделить на (р — 1) частей, причем элементы каждой после- дующей части можно получить путем умножения соответствующих элемен- I тов предыдущей части на и; 
Ь4 Криптогрдфические методы защиты информхции в компьютерных системдх и сеи!х б) пусть а — ненулевой элемент поля GF(p), n(l) и np(l) — число серий длиной l из элемента а и из г нулей соответственно, тогда п (1) = по(1) =р (p — 1); n(2) = гго(2) = р" (p — 1), ..., n (N — 2) = n„(N — 2) = (p — 1), n (N — 1) =р — 2; np(lV — 1) = p — 1; n (lV) = 1, no(1V) = О; 7) в М-последовательности имеется равное число серий из элементов поля GF(p), это число равно 8) частота появления символа а за период М-последовательности равна IV — зi~ tv частота появления нуля равна (p~ ' — 1)/(p~ — 1); Автокорреляционная функг~ия (АКФ) М-последовательности может быть за- писана следующим обрыом: -2 R(t) = =о На практике удобнее пользоваться АКФ ценгггрированной М-последова- тельности ~ — ~о(21~2" Ор~ для получения которой следует произвести изоморфное отображение множества {О, 1, 2, ..., (р — 1) ) на множество ,...,— 2,— 1). & t О, 1, р — 1 р — 1 На рис. 2.22 показаны АКФ центрированных М-последовательностей для случаев: р = 2, Ф(х) = х +х + 1, замена О ~ — 1; р = 7, Ф(х) = Зх' + х + б, замена б w — 1, 5 w — 2, 4 w — 3. 
Гмвд 2. Принципы построения и свойстм генераторов псавдослучдйных кодов 1 31 2 4— 171 1 2— 171 О 1 ° 2— 171 1 4— 171 Рис. 2.22. АКФ цектрироваккых М-последовательностей: а — для случая р = 2, Ф(х) = x'+ х'+ 1; 6 — для случая р = 7, Ф(х) = 3x'+ x+ б 
66 Криптографические мноды Защиты информации 8 компьютерных системах и сетях 2.6. ГПК в задачах поточного и комбинированного шифрования Требования к ГПК, ориентированным на использование в системах защиты информации в качестве источников гаммы, следующие: ° большой период формируемой последовательности; ° статистическая безопасность; ° криптографическая стойкость. Первое требование объясняется условием m ( S, где т — длина шифруемой информационной последовательности, S — период гттчмы, т. е. необходимостью использования для шифрования каждого элемента входной последовательности своего элемента гаммы. Второе требование означает, что для всех, не знающих закона получения по- следовательности, последняя по своим статистическим свойствам не отличается от истинно случайной последовательности. Под криптостойкостью понимается ситуация, когда три следующие задачи для противника вычислительно'неразрешимы: ° определеюше (i + 1)-го элемента у;, 1 последовательности на основе известно- го фрагментагаммы у; g 1... у; г у; ~ó;конечной длины b; ° определение (г — 1)-го элемента у; i последовагпельносггги на основе ггзвесгпно- го фрагменпга гаммы у;, b 1 ... у; г у;,1 у; конечной д ггты гг; ° определение ключевой информации по ггзвестному фрагменту гаммы конеч- ной длины. Генераторы М-последовательностей, обладающие при больших значениях N практически идеальными статистическими характеристиками, к сожалению, не являются криптостойкими. Анализируя принцип формирования М-последова- тельностей (рис. 2.23), можно сделать вывод, что для того, чтобы определить характер обратных связей устройства разрядностью не более N, иначе говоря, найти коэффициенты а;, г =1,N, образующего многочлена Ф(х), противнику достаточно иметь фрагмент гаммы всего лишь длиной 2N. Пример 2.16. Пусть N ( 4. Известен фрагмент последовательности ..Щ'+1Д~+ zQ~+3Q~+4Д~+5Q'+6Дт+7" = ... 0 1 1 1 1 0 1 0 ..., полученный с выхода LFSR. Необходимо найти коэффициенты а;, i =1,4, обра- зующего многочлена Ф(х). На основе рис. 2.23 составим систему из четырех линейных уравнений Q' 4 — — а1Q',3 Î a, Q.,2 O+ a3Q' O+ a4Q,, Q,„=а,Q,, Юа,Д,„O+a,Q.. 0+a4Q,„), Qü6 М2н5 OazQи4 Oагт2+3 9а432+" Qi+4 а112i+6 O+ аг0!+5 O+ а3т2м4 O+ a4Q'+3 
Гмвд 2. Принципы построения и свойствА генсрдторов псевдослучАйных кодов подставляя в которую известные значения элементов последовательности, получим 1=а, Sa& t; S O=a, Юи Юп,Юа, 1=а, Юа,Юа,, О = а, 0+ а, 0+ а1. Сложив первые два уравнения системы, найдем а4 —— 1. Сложив второе и третье уравнения, найдем а1 = 1. Сложив второе и четвертое уравнения, найдем а~ = 1. Наконец, подставив в первое уравнение найденные значения а1 и а2, оп- ределим аз — — 0. Таким образом, заданный фрагмент последовательности получен с выхода LFSR, образующий многочлен которого имеет вид Ф(х) = х'+ х+ 1. а„, а, а,, а,, Рис. 2.23. Принцип формирования последовательности (Q;) 
Криптогрдфичкскик методы защиты информкции 8 компьютерных систгмдх и сетях Учитывая вышеизло>кенн е, ри проектирова ии генерато ов одноразряд (битовой) гаммы используют различные приемы, повышающие стойкость па- точного криптоалгоритма. Гамма может быть, например, результатом действия функции усложнения, входными переменными для которой являются элементы последовательностей, формируемых на выходах генераторов; в качестве последних могут использо- ваться регистры сдвига как с линейными (LFSR), так и с нелинейными обратны- ми связями (NLFSR). Простейшие примеры NLFSR были уже рассмотрены выше (см. рис. 2.10 — 2.12). Выходы некоторых генераторов в общем случае могут управлять схемой синхронизации, обеспечивающей формирование импульсов сдвига. Схема синхронизации может обеспечивать, например, работу генерато- ров по принципу stop-and-go, с разной частотой и т. и. Ключевой информацией являются параметры схемы синхронизации и функции усложнения, а также на- чальное заполнение генераторов. При оценке качества подобных схем используется понятие линейной сложно- сти выходной последовательности, под которой понимается минимальная раз- рядность LFSR, на выходе которого может быть сформирована точно такая же последовательность. Однако независимая от ключа линейная сложность являет- ся необходимым, но недостаточным условием получения качественной ПСП. Рассмотрим некоторые наиболее известные схемы генераторов на основе LFSR. Генератор Джггффи обеспечивает перемегииваиие двух последовательностей х1 и х2 с выходов LFSR 1 и 2 под управлением последовательности х& t с вых LFSR 3. Перемешивание осуществляется с помощью функции усложнения F (~,, х„, x& t ) Ђ” ~, ~ + ~, ~, Ђ” ~ Ю & t , gt; т которая может быть реализована с помощью мультиплексора 2 - 1, как показа- но на рис. 2.24. Если LFSR имеют разрядность N~, №, и N&g ;, то линей ая сл ность генератора равна 1.С = N~(N& t + 1 + № Рис. 2.24. Генератор Джиффи В том случае, когда периоды 5, последовательностей {хг(г)) попарно взаимно просты, период результирующей последовательности y(t) равен произведению >г&g ;.>з ункция F ыдает на выход и ф рмацию о с стоя и х LF R 1 
Гмвл 2. Принципы построения и свойствл генераторов пссвдослучдйных кодов Ь9 как вероятность совпадения элемента выходной последовательности со значени- ем х1 или хг равна 3/4, иначе говоря, P(F(xq, хг хз) = x&g ; = P(F( q, г. з = г = 3 Возможны другие варианты представленной схемы. Так, например, исполь- зование ~(х1з «г~ хз) = х1хз С+' хФг @ хг~з позволяет получать последовательности с более высокой линейной сложностью ~~1'1г + ~1% + NgNg. При паточном и-разрядном шифровании можно добиться более эффективно- го перемешивания двух п-разрядных ПСП за счет использования функции ус- ложнения на основе и 1-рырядных мультиплексоров 2 - 1. В схеме генератора Д Голлманна, в работе которого используется принцип stop-and-go (рис. 2.25), каждый генератор LFSR ~ управляет синхронизацией двух последующих LFSR (i + 1) и LFSR (1+ 2). Выход последнего LFSR является вы- ходом генератора. Если рырядность каждого LFSR равна N, линейная сложность системы из т 1.Р$Я равна N(2 — 1) Криптографы советуют применять т ) 15, а при равных значениях mN отда- вать предпочтение варианту с большим числом коротких 1.ЕИ, а не варианту с меньшим числом длинных LFSR. Рис. 2.25. Генератор Голлманка Рывитием описанной идеи является схема, предложенная У. Дж. Чамберсом, одна ступень которой покыана на рис. 2.26 (где CC — схема синхронизации). На вход ступени поступает последовательность M-разрядных двоичных чисел. Не- сколько этих битов (k на рис. 2.26) управляет сдвигом 1.FSR разрядности № На- пример, при k = 2 в [44] предлагается в зависимости от значения этих 2 битов сдвигать LFSR на 1, 2, 4 или 5 разрядов. В первой ступени движение LFSR рав- номерное. Значение N одинаковое для всех ступеней, многочлены обратной свя- 
70 Криптографические методы защиты инфорвщии в компьютерных систсмдх и cEmx зи могут различаться. Мвыходов LFSR суммируется поразрядно по модулю 2 со входным значением каскада и поступает на вход S-блока, выход которого и яв- ляется выходом ступени. Автором выбрано значение М = N. Для каскада из m ступеней период достигает величины (2 — 1)"'. ТИ Вход Выход Рис. 2.26. Схема одной ступени каскада с неравномерным движением Чамберса Сжимающий (shrinking) генератор использует другую форму управления синхронизацией. В схеме генератора, предложенного Д. Копперсмитом, Х. Кравчиком и Й. Мансуром — сотрудниками IBM, используются два LFSR. Тактовые импульсы поступают на оба LFSR. На выход генератора проходят толь- ко те биты с выхода LFSR 2, которым соответствует 1 на выходе LFSR 1. Пусть С = С()С)С~... суть последовательность с выхода LFSR 1, ~0~1~2". суть последовательность с выхода LFSR 2. Результирующая последовательность 2 - =202)22 ° ° включает в себя те биты Ь;, для которых соответствующие биты с; равны 1. Ос- тальные биты последовательности b игнорируются. Иными словами, для всех ~ =0, 1,2, ..., имеем 2) = где i, — позиция~-й 1 в последовательности с. Эта же идея может быть приме- нена к любой паре источников ПСП. Пусть периоды последовательностей с и b равны соответственно S„ H S&g а разрядность соответствующих LFSR — N,. и N0. Авторами идеи было доказано следующее утверждение, справедливое как для фиксированных, так и для пере- менных точек съема сигналов обратной связи. Если S, и Sg имеют максимальную длину и взаимно просты, т. е. (S„, Ят,) = 1, то сжатая последовательность z имеет период ю„фи„-~ и линейную сложность LC, удовлетворяющую условию N 2 ' (LC(N„.2 ' ' 
71 AABA 2. Принципы построения и свойстм генераторов псевдослучайных кодов Q~ (c+ I ) = ~а,Q,, (t)mod 2 Q,(t+1)=Q,,(t),j 1,N— - 1, где Д;(г) — состояние с-го регистра в момент времени г; а; — коэффициенты мно- гочлена Ф(х) степени N, примитивного над GF(2). Начальное заполнение выби- рается таким образом, чтобы хотя бы в одном из регистров младший бит содер- жал 1. В этом случае младшие биты регистров образуют генератор двоичной М-последовательности. Учитывая, что при большом числе ненулевых коэффи- циентов Ф(х) быстродействие схемы снижается, возможна модификация схемы генератора с распределением двухвходовых блоков сложения по модулю 2 ме- жду регистрами, как это имеет место в случае генераторов, функционирующих в недвоичных полях GF(L). Пусть, например, Ф(х) = х'+ х + 1. Тогда генератор формирует рекуррент- ную последовательность в соответствии с формулой Q; = (Q; g + Q; 3) mod 2 . Рис. 2.27. Схема MN-генератора, соответствующего Ф(х) = x + х'+ 1. На рис. 2.28 показан суммирующий (summation) генератор, в котором вы- ходная последовательность суть результат действия функции усложнения, реа- лизованной с использованием дополнительной памяти m и сумматора SM. Со- вокупность сигналов с выходов LFSR прибавляется как целое число к содер- жимому дополнительной памяти т для получения суммы Q. Бит четности Q mod 2 в качестве элемента гаммы поступает на вход устройства, а старшие Недостатками сжимающего генератора являются понижение скорости фор- мирования последовательности по сравнению со скоростью работы LFSR и не- постоянная скорость выдачи битов выходной последовательности. Для решения этой проблемы можно использовать буферизацию. Очень эффективна с точки зрения производительности схема, называемая ад- дитивньии или MN-генератором (рис. 2.27). Самостоятельного значения эти ге- нераторы в силу своей криптографической слабости не имеют, но могут исполь- зоваться в качестве строительных блоков при создании стойких генераторов ПСП. Генератор состоит из N регистров разрядностью M каждый и сумматора по модулю 2 . Начальным заполнением (ключом) генератора является массив М Q.(0)Q,(о)...Q, (о) М-битовых слов. Уравнения работы генератора имеют вид: hf 
72 Криптогрдфические методы зящиты ииформдции в компьютерных cNcTEMAx и сетях биты ~Ш2] записываются в память. Для анализа формируемых ПСП необхо- дим совершенно иной математический аппарат, а именно арифметика р-ади- ческих (р-adic) чисел [44, 63, 65]. Рис. 2.28. Суммирующий генератор Можно выделить два подхода при использовании в составе генераторов ПСП нелинейных функций: это использоваиие нелинейной функции непосредственно в цепи обратной связи (рис. 2.29) и двухступенчатая структура (рис. 2.30). Именно по такому принципу строятся генераторы ПСП комбинированного типа, в кото- рых роль нелинейной функции выполняет функция зашифрования Е~ блочного шифра. Использование криптостойких функций Е~ автоматически придает анало- гичное свойство и генератору ПСП. В случае использования схемы на рис. 2.30 задача первой ступени заключает- ся всего лишь в обеспечении максимально большого периода при данной раз- рядности N используемого регистра. Это означает, в частности, возможность применения для этой цели генератора М-последовательности, соответствующего уравнению Q(t+ ~)=~ й~) Например, при использовании функции зашифрования блочного шифра с раз- рядностью блока, равной 64, наибольший эффект со всех точек зрения (простота аппаратной и программной реализации, быстродействие, длина периода) может дать применение генератора, схема которого приведена на рис. 2.8. 
Гмвд 2. Принципы построения и свойствд гснсрдторов псавдослучдйных кодов Рис. 2.30. Генератор ПСП с нелинейной внешней логикой Рис. 2.29. Генератор ПСП с нелинейной внутренней логикой 2.7. Использование R-блоков для построения ГПК Эффективным средством защиты информации от случайных и умышленных деструктивных воздействий является cmoxacmuuec~oe преобризован~е информа- ции С. А. Осмоловского. Схема одного из возможных вариантов построения блока R стохастического преобразования [41J и его условное графическое обо- значение (УГО) показаны соответственно на рис. 2.31 и 2.32. Ключевая информация Я-блока — заполнение таблицы Н = (Н (и)~ т = О, (2" — 1) размерности n x 2", содержащей элементы GF( "), перемешанные случайным образом, т. е. Н(т) е GF(2"). Результат Лн(А, B) преобразования входного и-разрядного двоичного набора А зависит от заполнения таблицы H и параметра преобразования В, задающего смещение в таблице относительно ячейки, содер- жащей значение А, следующим образом: Лрр(А, В) = НЯпд + В) mod 2"), где m& t; Ђ” ад ес яче ки табл цы Н, содержа ей од А, т. е. H( & t; = А. Д словами, результат работы R-блока суть считывание содержимого ячейки табли- цы Н, циклически смещенной на В позиций в сторону старших адресов относи- тельно ячейки, содержащей код А. Для ускорения преобразования в состав R-блока вводится вспомогательный адресный массив ADDR = (ADDR(j') 1 размерности n x 2", причем b' / = О, (2" — 1) ADDR(j') = m, . 
74 Криптографические методы защиты информации в компьотерных системдх и cemx Вспомогательный массив (адресный} Адрес 0 Основной массив Адрес Н 0 А2 8 9 10 10 12 14 15 14 Рис. 2.31. Логика работы R-блока Рис. 2.32. Условное графическое обозначение R-блока Иными словами, ячейка с адресом j в массиве ADDR хранит адрес ячейки массива Н, содержащей код т'. Заслуживают внимания 3 фактора: ° при ADDR = (0, 1, 2, ..., (2" — I)), т. е. при записи в каждую ячейку массива ADDR ее собственного адреса, и и = 4 результат преобразования в точности совпадает с результатами работы двух тактов (сложение с 4 битами ключа и замена в соответствующем узле замены) одной секции раундовой функции шифрования ГОСТ 28142 — 89 (см. гл. 3); в частном случае при ADDR = (0, 1, 2, ..., (2" — 1)) и В = О получаем классиче- ский S-блок с таблицей замен Н; ° требуют дополнительного изучения свойства R-блока в составе которого вме- сто сумматора SM используется блок сложения в поле GF(L), L = 2" (рис. 2.33). 
Гмм 2. Принципы построения и свойстм генераторов псевдослучайных кодов 75 последовательность Рис. 2.33. R-блок, использующий операцию сложения в поле GF(2")-RGF:а — условное обозначение; 6- схема ГПК на основе S- u RGF-блоков; в — схема сжатия (хеширования) информации; г — шифрование в режиме CFB (самосинхронизирующееся паточное шифрование) 
7б Криптографические методы защиты информации в компьютерных системдх и снях Рис. 2.34. Схема генератора многоразрядной гаммы (первый вариант) Ключевая информация — начальное заполнение ГПК и содержимое таблиц H используемых R-блоков. Алгоритм замены ключевой информации, т. е. переме- шивания, или взбивания, таблиц Н, показан на рис. 2.36. Каждая очередная пара байтов ВУТЕ;, ВУТЕ,,1 инициализирующей последовательности меняет местами два соответствующих элемента массива Н, т. е. выполняется операция H(BYTE;) H(BYTE,,1), т' = О, 2, 4, ..., где H(j) — элемент массива Н, расположенный в ячейке с адресом j. Алгоритм формирования вспомогательного массива ADDR показан на рис. 2.37. Исследования показали, что на основе R-блоков возможно построение стати- стически безопасных и криптографически стойких генераторов гаммы поточных шифров. На рис. 2.34 и 2.35 представлены общие схемы двух вариантов по- строения и -разрядного генератора гаммы. БПС вЂ” блок линейного или нелиней- ного пространственного сжапгия информации, преобразующий входной «т «т и-разрядный двоичный код в и -разрядный, и & t; lt; . ГПК може быть реал на основе одного или нескольких регистров сдвига с линейными или нелиней- ными обратными связями LFSR u NLFSR. 
AABA 2. Принципы IlocTpoEHHfl u свойствА генерАтОрОВ псквдослучАиных кодов 77 Рис. 2.35. Схема генератора многоразрядной гаммы (второй вариант) Рассмотрим схему генератора на рис. 2.34 при гг = и. Пусть для получения гг-разрядной выходной последовательности 7l ~2~3 ° 71 ° ° ° используется k n-разрядных R-блоков, H; — таблица стохастического преобразо- вания г-го R-блока Н, =(H,(m)jm =0,(2" — 1), г =1,k, Н,(m)e GF(2"); тогда число выходов ГПК равно 2k, а уравнение работы генератора имеет вид у, = ~К„(д„z(t)Q...(!)" ) GF(2"), ИЛИ у, = ~ii~~н,. ~и ~~+Q,,(t) mod 2" F(2" ), где Q((t) — n-разрядный код на 1-м выходе ГПК в момент времени t, 0 & t « 2k Ђ” При ADDR = {О, 1, 2, ..., (2" — 1)), т. е. фактически при его отсутствии, урав- нение принимает вид у,=~Н, (t) + Q„, (t))mod 2" F(2") . 
Криптографические методы мщиты информации в компьютерных cNcTEMAx и cET$lx ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Ú ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° При ADDR = (0, 1, 2, ..., (2" — 1)) и В = О число используемых выходов ГПК становится равным k, а уравнение работы генератора принимает вид k Рассмотрим схему генератора на рис. 2.35 при и = и. Для получения и-разрядной выходной последовательности Рис. 2.36. Схема алгоритма перемешивания таб- лицы стохастического преобразования с исполь- зованием инициализирующей последовательно- сти BYTEO, BYTE~, BYTE~, ..., BYTE; BYTE, 1, ... Рис. 2.37. Схема алгоритма форми- рования адресного массива ADDR по известному массиву Н 
79 Гмм 2. Принципы построения и свойс1м генераторов псевдослучайных кодов используются 3 л-разрядных Х-блока, каждому из которых соответствует своя таблица H;, i = 1, 2, 3, причем Н, = (Н,.(m)} m =0,(2" — 1), Н,(m)c GF(2"); тогда число используемых выходов ГПК равно шести. Пусть R,(t)= (r,(„,)(t)..r, (t)r,,(t)r, (t)) суть п-разрядный двоичный набор на выходе i-го R-блока в момент времени t, r;,(t) с (О, 1), i = 1, 2, 3, j = 0,(n — 1). Тогда уравнения работы генератора имеют ВИД: у, = /2t r,,(t)r,, (Г)ч г,,(t)r,,(t), ИЛИ R,(t) =H, т~ (()+Д~,,(t) mod 2", i =1,2,3; л-1 у, = ~2' тт(г)т,,(t)÷ г„(t)r,,(t), где Q((t) — n-разрядный код на 1-м выходе ГПК в момент времени t, 0 & t & При ADDR = (О, 1, 2, ..., (2" — 1) ) уравнения принимают вид: R,(t) =Н, (Д2, (t)+Q„,(t))mod 2",~ =1,2,3; и-1 у, = ~1' т,,(t) rt (Г)ч г, (t)rt (t) . При ADDR = 10, 1, 2, ..., (2" — 1)) и В = 0 (рис. 2.38) число используемых вы- ходов ГПК становится равным трем, а уравнения работы генератора принимают ВИД R, (t) = Н,. (Q, (t))~ ~ = 1,2, 3; и-1 у, = g 1' г,, (г) г,, (г) ч г,. (г) г,, (г) . Рассмотренные на рис. 2.34 и 2.35 схемы пригодны для построения многораз- рядных генераторов. На рис. 2.39 приведена схема генератора битовой гаммы. Для получения битовой гаммы У= У)У"-Уз" У ' используются два Х-блока, каждому из которых соответствует своя таблица Н;, i = 1, 2, причем Н, = (H, (и)1, т =0,(2" — 1), Н, (т) с GF(2" ) ' k =)og n[, 
80 Криптогрвтричвскив методы защиты информации в компьютерных систкмдх и camx тогда число используемых выходов ГПК равно четырем. Пусть R,(t) = (r~„,)(t)...rz(t)r,, (t)ro(t) j суть и-разрядный двоичный набор на выходе i го R-блока в момент времени t, r,, (t) C (0,1), т' = 0,(п — 1) . Рис. 2.38. Схема генератора многоразрядной гаммы при ADDR = (О, 1, 2, ..., (2" — 1)) и В = О J Рис. 2.39. Схема генератора битовой гаммы 
8l Гмвц 2. Принципы построснил и свойствА гкнсрдторов пссвдослучдйных кодов Тогда уравнения работы генератора имеют вид: R, (t) = Н, т~ (,) + Q, (t) mod 2"; R,(t) = Н~ т~ (,>+Дз Е) ой «„(t) =0 «„,(~); у, = е, (е),если ~2'r,',(t) = j, где G — матрица, определяющая логику работы БПС, Qi(t) — код на 1-м выходе ГПК в момент времени t, О & t & Все рассмотренные в данном разделе генераторы, за исключением изобра- женного на рис. 2.33, б, имеют двухступенчатую структуру. Первая ступень (ГПК) обеспечивает формирование длинных, статистически безопасных ПСП (Qj(t)), необходимых для работы блоков стохастического преобразования. R-блоки второй ступени делают генератор криптостойким, при этом ключевая информация — характер заполнения таблиц Н стохастического преобразования объемом 2" п-разрядных двоичных наборов каждая; именно эти блоки обеспечи- вают выходное нелинейное преобразование информации. 2.8. Оценка качества ГПК (матеркап предоставлен И. В. Чугунковым) Для исследования ПСП применяются две группы тестов. Графические тесты. Пользователь получает определенные графические за- висимости и по их виду делает вывод о свойствах тестируемой последова- тельности. ° Оиеночные тесты. На основе оценочных критериев делается заключение о степени близости статистических свойств анализируемой и истинно случай- ной последовательности. 2.8.1. Графические тесты Гистограмма. Гистограмма позволяет определить равномерность распреде- ления символов в тестируемой последовательности, а также оценить частоту появления конкретного символа. Данный тест незаменим при проверке последо- вательности на "случайность", а также при исследовании генераторов с произ- вольным законом распределения символов. Для того чтобы последовательность удовлетворяла свойствам случайности, необходимо, чтобы в ней присутствовали все символы, при этом разброс частот появления символов стремился к нулю. Рассматриваемый тест может принести пользу также в тех случаях, когда оцени- вается качество последовательности с законом распределения, отличным от рав- номерного, либо последовательности, в которой некоторые символы вообще от- сутствуют, и т. д. 
82 Криптогркфичсскис методы зкщиты информкции в компьютерных системдх и сктвх Распределение на плоскости. Тест позволяет оценивать равномерность и не- зависимость распределения символов в исследуемой последовательности. Для построения графической зависимости на поле размером 256 х 256 наносятся точки с координатами (Q;; Q;+~), где Q; — i-й элемент последовательности, i = 1,(т — 1), т — длина последовательности. Далее анализируется полученная картина. В случае некачественной последовательности точки распределены не- равномерно, либо наблюдается некий узор. Для последовательностей большой длины (порядка 700 Кб и выше) положительным результатом считается график, представляющий собой абсолютно черный квадрат. Байтовая АКФ. Тест проверяет взаимонезависимость элементов изучаемой последовательности на основе анализа всплесков корреляции. Для расчета авто- корреляционной функции последовательность нормируется. Пусть [q7...qiqp]— двоичная запись элемента последовательности длиной m, q, c (О, 1), т'=1,7. Тогда нормированное значение этого элемента вычисляется как 7 i=0 После этого вычисляются всплески корреляции т QiQ(i+r)myel in , т=1,т. Нетрудно заметить, что при т = 1 и т = т значение Р(т) = 1. Во всех осталь- ных случаях для качественной ПСП значения К(т) должны стремиться к нулю. Битовая АКФ. Тест проверяет взаимонезависимость битов последовательно- сти. Сначала двоичное представление последовательности нормируется: 1 - 1, 0- — 1. Затем вычисляются всплески корреляции по формуле М М(г'+т)цви M где M — размер последовательности в битах, à b, — i-й бит нормированной по- следовательности. При т = 1 и т = т значениеЯт) = 1. Во всех остальных случаях для качественной ПСП значения Ят) должны стремиться к нулю. Проверка на монотонность. Тест проверяет равномерность распределения символов в изучаемой последовательности на основе анализа длин участков возрастания и убывания. В качественной ПСП разброс длин этих участков дол- жен стремиться к нулю. 
Гмм 2. Принципы построения и свойстм гкнердторов пссвдослучдйных кодов 83 Проверка О и 1. Teem проверяет равномерность распределения символов в изучаемой последовательности. Для этого подсчитывается число 0 и 1. В каче- ственной ПСП разброс между количеством 0 и 1 близок к нулю. Проверка серий. Тест проверяет равномерность распределения символов в изучаемой последовательности, анализируя частоту встречаемости биграмм (00, 01, 10, 11) и триграмм (000, 001, 010, 011, 100, 101, 110, 111). В качествен- ной ПСП разброс между частотами встречаемости биграмм (триграмм) должен стремиться к нулю. 2.8.2. Оценочные тесты Критерий у2. Пусть результаты испытаний таковы, что их можно разделить на k категорий. Проводится п независимых испытаний. Обозначим вероятность того, что результат испытания попадет в s-ю категорию, как ps, а число испыта- ний, которые реально попали в s-ю категорию, как Ys. Сформируем статистику: (У, — np,.) пр,. Для оценки полученного результата используются таблицы распределения ~ . 2 В строках боковика (левого столбца) этих таблиц указано число степеней свобо- ды, а в графах — вероятности, р. Смысл таблиц в следующем. Если в некоторой строке таблицы в столбце находится число х, то это означает, что значение V, оп- ределяемое по вышеприведенной формуле при данном v, будет больше х с веро- ятностью р. Таблица. 2.1. Распределение y' с 10 степенями свободы Например, для р = 5% и v = 10 табл. 2.1 дает значение х = 18.31; это означает, что V & t; 18 31 тол к в 5% в ех случа Для анализа полученного результата используются различные подходы. В [35] предлагается следующий. Если V меньше значения, соответствующего р = 99%, или больше значения, соответствующего р = 1%, то результаты бра- куются, как недостаточно случайные. Если р лежит между 99 и 95% или между 5 и 1 %, то результаты считаются "подозрительными", при значениях, заклю- ченных между 95 и 90 % или 10 и 5 %, результаты "слегка подозрительны"; в остальных случаях результаты считаются случайными. Однако при таком подходе будет забракована и по-настоящему случайная по- следовательность, для которой вероятность будет стремиться к 100%. Кроме то- го, нижняя граница прохождения тестов взята неоправданно малой. Поэтому логичнее оценивать результаты следующим образом. В зависимости от требова- ния к генератору выбирается нижняя граница Р,~. Результаты, для которых вы- полняется p & t; д, бракую ся ак неслучайн е в против ом слу ае т ст пройд 
84 Криптографические методы зкщиты информдттии в KQMnbloTEpHblx cllcTEMAx u cETTTx Тест собирателя купонов. Тест проверяет равномерность распределения символов в изучаемой последовательности. Рассматривается последователь- ность байтов ДОДтg2" ° и определяются длины r сегментов К/'+!а'+ 2" а'+ — ! необходимых для того, чтобы собрать полный набор целых чисел от 0 до d — 1. Используется одномерный массив count, такой, что count[r] = число сегментов длины г, при r C [О; t); count[t] = число сегментов длины, большей или равной t. Содержимое счетчиков count[d], count[d + 1], ..., count[t] обрабатывается с по- 2 мощью критерия К с k = t — d степенями свободы. Соответствующие вероятно- сти равны: где — числа Стирлинга. 7 Рассчитывается критерий Р.; t — 1 где т — число анализируемых байтов. Затем используется таблица для распреде- ления у с числом степеней свободы, равным t — d. Следует отметить, что "собиратель купонов" является специфическим тестом и рассчитан на определенный тип последовательностей. В нем, по существу, про- исходит анализ не всей последовательности целиком, а наборов по t байт. Проще всего проходят этот тест ПСП, для подпоследовательностей длиной d которой ве- роятность появления каждого символа из интервала [О; d — 1] близка к 1. Проверка частот. Тест проверяет равномерность появления символов в изу- чаемой последовательности. Подсчитывается, сколько раз встречается каждый символ — N, (s =0,255 ), после чего применяется критерий у с числом катего- рий, равным 256, и вероятностями 1/256 в каждой категории: 256 
nAsA 2. Принципы построкнил и свойствА ганардторов псевдослучдйных кодов 85 где т — число анализируемых байтов. Полученные результаты анализируются 1 при помощи таблицы распределения y c числом степеней свободы, равным 255. Имеет смысл провести и проверку частот появления полубайтов. Для этого подсчитывается, сколько раз встречается ках< ый полуб йт Ђ” , = О, 1 ), по чего применяется критерий у с числом категорий, равным 16, и вероятностями 1/16 в каждой категории: s=0 где т — число анализируемых байтов. Полученные результаты анализируются 2 при помощи таблицы распределения К с числом степеней свободы, равным 15. Проверка элементов. Тест проверяет равномерность появления элементов в изучаемой последовательности на основе анализа не совокупности элементов, а каждого элемента в отдельности. Для этого подсчитывается, сколько раз встре- чается ках< ый сим ол Ђ” N = О, 25 ), по ле ч го проверяе ся неравенс т — 2,58 m+ 2,58 (Я ( 255 где m — число анализируемых байтов. Для усиления теста мо> но уменьш значение интервала. Анализ перестановок. Тест проверяет равномерность распределения чисел в исходной последовательности. Разделим исходную последовательность на и групп по t элементов. В каждой группе возмох&lt но t! вариан ов относительн расположения чисел. Подсчитывается, сколько раз встречается каждое конкрет- 1 ное относительное расположение — М„после чего применяется критерий у с числом категорий, равным t!, и вероятностями 1/t! в каждой категории где т — число анализируемых байтов. Полученные результаты анализируются 2 при помощи таблицы распределения у с числом степеней свободы, равным t! 1. Проверка сегментов. Данный тест проверяет равномерность распределения символов в исходной последовательности. Конкретное значение байта [0..255] может принадлежать различным сегментам, [0..127] и [128..255] например. Ана- лизируются следующие друг за другом пары чисел, и определяется принадле&gt ность каждого числа к определенному сегменту. Пусть имеется два сегмента [0..127] и [128..255]. Каждая пара распределяется по категориям: Yp — оба байта в паре принадлежат первому сегменту; 
86 Криптогрхфичкскик методы зхщиты информхттии в компьютерных систкмхх и саттх Y( — один байт принадлежит первому сегменту, а другой — второму; Y& t; Ђ” о ин б йт принадле ит втор му сегмен у а дру ой Ђ” перво Yg — оба байта принадлежат второму сегменту. Вычисляем критерий «=0 где m — число анализируемых байтов. Затем используется таблица для распреде- 2 ления X c числом степеней свободы, равным единице. При числе сегментов, равном четырем, имеем уже 16 категорий. Рассчитыва- ем критерий затем используем таблицу для распределения у с числом степеней свободы, равным трем. При числе сегментов, равном восьми, имеем 64 категории. Рассчи- тываем критерий «=0 затем используем таблицу для распределения К с числом степеней свободы, равным семи. При числе сегментов, равном 16, имеем 256 категорий. Рассчиты- ваем критерий s=0 ИЪ 512 затем используем таблицу для распределения К с числом степеней свободы, равным 15. Для более тщательного исследования можно увеличить число сег- ментов и/или рассматривать тройки, четверки и т. д. чисел. Проверка интервалов. Тест проверяет равномерность распределения символов в изучаемой последовательности. Пусть а и P — два целых числа, таких, что О & t; ( P & t; 2 5. Подсчитываю ся дл ны интервал в в кото ых чи ла ле а в про жутке [o,, P]. После этого определяется число интервалов длины О, 1, 2, ..., t 1 и применяется критерий у с числом категорий, равным t+ 1: (Y, — пр,) l2P,. «=0 
87 Гмвл 2. Принципы построения и свойствл генераторов псевдослучайных кодов где и — число интервалов, а вероятности рассчитываются по формулам P — а 'p,=Ь(~-Ь)' =1t. Результаты анализируются при помощи таблицы распределения у с числом степеней свободы, равным t. В качестве интервалов выбираются, например: [128; 225] — отклонение вниз1 [0; 127] — отклонение вверх; [64; 192] — отклонение от центра; [0; 63] и [193; 255] — отклонение к центру. Для более тщательной проверки можно использовать другое разбиения на интервалы. Последовательная корреляция. Тест проверяет взаимонезависимость элемен- тов последовательности. Для этого вычисляется коэффициент последовательной корреляции: m(QОО~+" +О -г0 — +О - Qо) (Qо+" +QÄ1) щ Qq + ... + Q,„, — (Qq + О, ) где т — число анализируемых байтов; Q; — i-й элемент последовательности. При незначительной корреляции значение коэффициента должно лежать в ин- тервале [рт — 2(ут; pm + 2am], где hl ° +el = т — 1 m — 1 Для усиления теста можно уменьшить значение интервала. Проверка комбинаций Тест проверяет равномерность распределения симво- лов в изучаемой последовательности. Рассматриваются группы из пяти следую- щих подряд чисел, и подсчитывается число групп Yr, в которых имеется r (r C [1; 5]) разных чисел: Y~ — все числа одинаковые (5); Y2 — имеется одна пара разных чисел (1 + 4); Y3 — имеется 3 разных числа (1 + 1 + 3 или 1 + 2 + 2); У4 — имеется 4 разных числа (1 +1 + 1 + 2); Y5 — все числа разные (1+ 1 + 1+ 1 + 1). Затем применяется критерий у~ с вероятностями 256(256 — 1) ..(256 — г+ 1) ~5 256 x=1 
Криптогркфичкскик методы зкщиты информации в компьютерных систкмкх и сетях где т — число исследуемых байтов. Полученный результат анализируется при помощи таблицы распределения К с четырьмя степенями свободы. Для усиле- 2 ния теста можно рассмотреть другие разбиения на группы. Проверка серий. Тест проверяет равномерность распределения символов в изучаемой последовательности. Последовательность представляется в виде 0 и 1, и проверяются пары и тройки следующих друг за другом чисел. Серии-пары. Определяются: Yp — число биграмм вида 00; Y& t; Ђ” чи ло бигр мм в да Y. — число биграмм вида 10; Y3 — число биграмм вида 11. Вычисляется критерий иг «=0 где т — число анализируемых байтов. Затем используется таблица для распреде- ления у с числом степеней свободы, равным трем. Рекомендуется проводить и проверку сцепленных биграмм. Для этого опре- деляются: Yp — число сцепленных биграмм вида 00; Y& t; Ђ” чи ло сцеплен ых бигр мм в да Y2 — число сцепленных биграмм вида 10; Уз — число сцепленных биграмм вида 11. После этого вычисляется критерий «=0 2 а затем используется таблица для распределения К с числом степеней свободы, равным трем. Серии-mpouxu. Определяются: Yp — число триграмм вида 000; Y& t; Ђ” чи ло тригр мм в да 0 Y — число триграмм вида 010; Уз — число триграмм вида 011; Y4 — число триграмм вида 100; Yq — число триграмм вида 101; Ув — число триграмм вида 110; Y7 — число триграмм вида 111. Вычисляется критерий «=0 
Гмвд 2. Принципы построснил и свойствА генсрдторов пссвдослучдйных кодов 89 где m — число тестируемых байтов. Затем используется таблица для распределе- 2 ния у с числом степеней свободы, равным семи. Тест можно усилить, рассматривая четверки, пятерки и т. д. следующих друг за другом битов, а также используя сцепление. IIpoeepxa на монотонность. Тест проверяет равномерность распределения символов в изучаемой последовательности. Определяются длины отрезков не- возрастания и неубывания len [ г ] и вычисляется статистика 6 6 V = — $$(len[i — еаЬ,.) lee[i — mb а, m 1 J У i=1 /=1 где коэффициенты а„и b, определяются из матриц: (b, Ь b, b„ b, b ) = 6 24 120 720 5040 840 1 Полученный результат анализируется при помощи таблицы распределения К с шестью степенями свободы. Проверка О и 1. Тест проверяет равномерность распределения символов в изучаемой последовательности. Подсчитывается Yo — число нулей и Y~ — число 1 единиц и применяется критерий X c числом категорий, равным двум, и вероят- ностью р = 0,5 в каждой категории: (Y, — 0,5m) 0,5т где т — длина последовательности в битах. Затем используется таблица для рас- 2 пределения X c числом степеней свободы, равным единице. Анализ результатов оценочных теспгов. Для всех тестов за исключением тес- та "Последовательная корреляция" оценка производится следующим образом. Значение полученного числового критерия определяет вероятность появления последовательности с данными статистическими свойствами. Поэтому последо- вательности с вероятностью, меньшей 1 Уо, должны сразу браковаться, иначе говоря, значения вероятности должно лежать в интервале [1%; 100%]. Значение нижней границы берется, исходя из области использования генератора. Чем ка- чественнее требуется последовательность, тем больше дол> на б ть ниж яя г ница. ~12 ~13 ~14 ~15 ~16 21 22 23 24 25 26 31 32 ~33 34 ~35 ~36 41 42 ~43 44 45 ~46 51 52 53 54 55 56 61 62 63 64 65 66 45294 90449 13568 18091 22615 27892 90449 18097 27139 36187 45234 55789 13568 27139 40731 54281 67852 83685 18091 36187 54281 72414 90470 111580 22615 45234 67852 90470 113262 139476 27892 55789 83685 111580 139476 172860 
ГЛАВА 3 Криптосистемы с секретным ключом 3.1. Модель симметричной криптосистемы В системе, показанной на рис. 3.1, в информационных отношениях принима- ют участие 3 действующих лица: отправитель (абонент А) и получатель инфор- мации ~абонент В), а также противник W. Современные одноключевые крипто- системы предполагают использование взаимно-обратных преобразований Е и D блоков данных фиксированной длины. Для задания блочной криптосистемы не- обходимо определить (см. гл. 1): ° числовые параметры криптоалгоритма — разрядность п шифруемых блоков данных, объем ключевой информации, размер раундового ключа, число ра- ундов шифрования; ° раундовую функцию F шифрования; ° алгоритм получения раундовых ключей из исходного ключа k». фис. 3.1. Модель криптосистемы с секретным ключом Задача абонента А заключается в том, чтобы передать получателю конфиден- циальное сообщение р, состоящее из и блоков длины и, т. е. 
Глдм 3. Криптосистемы с секретным ключом 91 ° %уФ ° %уФ 4%уФ ° %уФ ° ~а( ° Р = Р1 Р~" Р;" p,„ Задача абонента B заключается в том, чтобы, получив переданное сообщение С = C]C>".С~... понять его содержание. Для того, чтобы только получатель мог прочитать по- сланное сообщение, отправитель преобразует открытый текст Р с помощью функции зашифрования Е и секретного (известного только А и В) ключа k» в шифротекст с: 3.2. Классификация угроз противника. Основные свойства криптосистемы Таким образом, имеют место 3 возможных типа угроз со стороны противника: ° нарушение секретности информации — дешифрование (полное или частич- ное) переданного сообщения или получение информации о его сути; ° нарушение целостности информации — внесение в сообщение искажений, которые законный получатель не смог бы обнаружить; ° нарушение подлинности информации — формирование ложных сообщений, которые законный получатель В принял бы за подлинные, пришедшие от А. Дешифрование переданного сообщения противником возможно в случае вы- числения им секретного ключа либо нахождения алгоритма, функционально эк- вивалентного D» и не требующего знания k». Соответственно задачей криптографа является обеспечение требуемого уровня секретности (криптостойкости) и аутентичности (имитостойкости) системы. Секретность — это защищенность криптосистемы от несанкционированного озна- комления с содержимым зашифрованных сообщений. Аутентичность — это защи- щенность криптографической системы от навязывания ложных данных [13]. с = Е»(р) который и поступает в канал связи. Получатель восстанавливает исходный текст сообщения с помощью функции расшифрования D и того же секретного ключа k».. Р = О»(с). Для реализации такого информационного обмена должен существовать на- дежный канал, по которому происходит предварительный обмен секретными ключами, а у одного из его законных участников должен быть генератор, фор- мирующий качественные ключи k», обеспечивающие гарантированную стой- кость системы. Цель противника — воспрепятствовать осуществлению намерений законных участников информационного обмена. В общем случае противник может пере- хватывать зашифрованные сообщения, модифицировать их и даже посылать фальсифицированные сообщения стороне B якобы от имени другой, в рассмат- риваемом случае от стороны А. 
92 Криптографические маоды защиты информдции в компьютерных системах и сатвх 3.3. Кпассифихация атах на хриптосистему с сехретным хпючом В симметричной криптосистеме различают 5 уровней атак со стороны крип- тоаналитика [4, 7]: атака на основе гполько шифротексгпа (ciphertext-only attack): противнику известны и шифротекстов, зашифрованных на одном и том же ключе k; ® атака на основе извесптого (невыбраггного) открытого текста (known- plaintext attack): противнику известны п шифротекстов, зашифрованных на одном и том же ключе k, а также соответствующие им открытые тексты; атака на основе выбранного открьипого пгекста (chosen-plaintext attack): противник может выбрать необходимое число открытых текстов и получить соответствующие им шифровки (при этом в случае простой атаки такого ти- па все открытые тексты могут быть выбраны до получения первой шифровки; в случае адаптивной атаки противник выбирает очередной открытый текст, зная шифровки всех предыдущих); атака на основе выбранного шифротекста (chosen-ciphertext attack): против- ник может выбрать необходимое количество шифровок и получить соответ- ствующие им открытые тексты (в случае проспгой атаки такого типа все шифровки должны быть выбраны до получения первого открытого текста; в случае адаптивной атаки противник выбирает очередную шифровку, зная от- крытые тексты всех предыдущих); атака на основе выбрсгнного текста (chosen-text attack): противник может атаковать криптосистему с обеих сторон, т. е. выбирать шифровки и дешиф- ровать их, а также выбирать открытые тексты и шифровать их (атака такого типа может быть простой, адаптивной, простой с одной стороны и адаптив- ной с другой). В каждом случае противник должен либо определить ключ Йдв, либо выпол- нить дешифрование некоторого нового шифротекста, зашифрованного на том же ключе, что и сообщения, предоставленные ему для исследования на началь- ной стадии криптоанализа. Атаки перечислены в порядке возрастания их силы. Различие в степени дей- ственности, например, атак первых трех уровней можно показать на примере шифра простой (одноалфавитной) замены. При анализе на основе только шиф- ротекста для раскрытия этого простейшего шифра требуется провести некото- рую работу, аналогичную той, которую провели герои вышеупомянутых произ- ведений Э. По и А.Конан Дойля. В случае атаки на основе известного открытого текста раскрытие шифра становится тривиальным в особенности после того, как в открытых текстах встретится большинство символов используемого алфавита. При атаке на основе выбранного открытого текста в случае использования анг- лийского алфавита шифр будет вскрыт сразу после получения шифровки Ет,(АВС...XYZ) [7] 
ГЛАВА $. KPHIlTOCHCTfNlbl С СЕКРПНЫМ KAIOVONI 3.4. Режимы использования блочных шифров Для различных ситуаций, встречающихся на практике„разработано значи- тельное количество режимов шифрования [7, 9, 11]. Наиболее очевидное решение задачи закрытия сообщений, состоящих из не- скольких блоков, заключается в независимом шифровании каждого блока на од- ном и том же ключе kgb. Данная классическая схема блочного шифрования (рис. 3.2) известна под названием режима электронной кодовой книги — ECB (Elec- tronic Code Book). В ГОСТ 28147 — 89 [20] данный режим назван режимол~ про- с)ыои заиевы. Рис. 3.2. Шифрование в режиме ECB: а — зашифрование; б — расшифрование Уравнения зашифрования и расшифрования в режиме ECB имеют вид: с, = E„(p,); р, =D„(,); i =1,m. Режим имеет 3 существенных недостатка. Так как блоки шифруются незави- симо друг от друга, при зашифровании двух или более одинаковых блоков по- лучаются одинаковые блоки шифротекста, и наоборот. Данное свойство режима ЕСВ позволяет противнику делать выводы о тождественности тех блоков откры- того текста, которым соответствуют одинаковые блоки шифротекста. В тех слу- чаях, когда длина исходного сообщения не кратна п, возникает проблема допол- нения последнего блока до нужного размера. Дополнение последнего неполного 
94 Криптографические методы защиты информации в компьютерных системах и сетях блока некоей фиксированной комбинацией битов в некоторых случаях может позволить противнику методом перебора определить этот неполный блок. И на- конец, данный режим нечувствителен к выпадению или вставке целого числа блоков шифротекста. Отмеченные недостатки ограничивают область использования режима ECB только шифрованием ключевой информации, объем которой обычно кратен и, при этом качественные ключи не могут содержать повторяющихся блоков. Применение режима ЕСВ оправдано также в базах данных, когда требуется про- извольный доступ для чтения/записи к различным полям. Все остальные режимы реализуют комбинированные схемы шифрования (см. разд. 1.4) и обеспечивают зависимость каждого блока шифротекста не только от соответствующего блока открытого текста, но и от его номера. На рис. 3.3. пока- зана схема шифрования в режиме сцепления блоков шифротекста — CBC (Ci- phertext Block Chaining). Рис. 3.3. Режим шифрования СВС: а — зашифрование; 6- расшифрование; со — синхропосылка 
95 Глдм 3. Криптосистемы с секретным ключом Уравнения зашифрования и расшифрования в режиме CBC имеют вид: с, = EAB(~, +ñ,,); р; = ~др (c& t; )@ с - i =l,m, где секретность и-разрядного блока со (синхропосылки) не является обязательной. Отличительными особенностями режима CBC являются зависимость при за-' шифровании l-го блока шифротекста от всех предшествующих блоков открыто го текста и зависимость при расшифровании каждого блока открытого текста р, только от двух блоков с; 1 и с; шифротекста. Первое свойство делает пригодным использование режима для решения задач контроля целостности информации.' Второе свойство делает режим самосинхронизирующимся: одиночная ошибка при передаче (ошибка при передаче одного блока) может привести к неправильному расшифрованию только двух блоков. Как будет видно в даль- нейшем, этот режим используется и в криптосистемах с открытым ключом в том случае, если размер шифруемого сообщения больше, чем размер блока. Схема режима обратная связь по шифротексту — CFB (Ciphettext Feedback) показана на рис. 3.4. Схема, приведенная ранее на рис. 1.13, может рассматри- ваться как простейший частный случай данной схемы. Уравнения зашифрования и расшифрования имеют вид: с, = р, ЮЕ,д(я,,); р, = с, 0+ EÄ'~ (я, , ); s,=2' s,,+с, пюН2"; i =l,rn, где t — разрядность шифруемых блоков данных (1 & t &l E„"sr '(s,, ) — t стаРших битов и-РазРЯдной шифРогРаммы EÄrr(s; 1); n — разрядность регистра сдвига; яв — начальное состояние регистра сдвига (синхропосылка). Схема шифрования в режиме CFB npu t = n показана на рис. 3.5. Уравнения зашифрования и расшифрования принимают вид: с, =р,eE„B(ñ,); р, = с, ЮЕ,д(с,,); ~=1,т. В ГОСТ 28147 — 89 аналогичный режим назван релсимол галаиирования с об- ратной связью. Свойства данной схемы шифрования аналогичны режиму CBC: при зашифровании каждый блок шифротекста зависит от всего предшествующе- го ему открытого текста, при расшифровании отсутствует эффект "размноже- ния" ошибок. 
96 Криптогркфичсскис методы здщиты информдции в компьютерных систкмдх и сетях Рис. 3.4. Режим шифрования CFB: а —; б —; so — с инхропосылка Схема шифрования в режиме обратной связи по вьподу — OFB (Output Feed- back) показана на рис. 3.6. Схема, приведенная ранее на рис. 1.12, может рас- сматриваться как простейший частный случай данной схемы. Гамма шифра снимается с выходов генератора псевдослучайных кодов, реализованного на ос- нове и-разрядного регистра сдвига, в цепи обратной связи которого использует- ся функция зашифрования Е». Уравнения зашифрования и расшифрования имеют вид: с, =р,.& р, =с,O+y,; =&lt ! ( s, = 2's,, +у, mod 2"; 
97 Глдвл $. Криптосистемы с секретным ключом где ~у, — очередной элемент гаммирующей последовательности; Е~" (s,., ) — t старших бит и-разрядной шифрограммы Egg(s; ~); t — разрядность шифруемых блоков данных (1 & t &l п — разрядность регистра сдвига; sp — начальное состояние регистра сдвига (синхропосылка). Рис. 3.5. Режим шифрования CFB npu t = и: а — зашифрование; 6 — расшифрование; г() — синхропосылка Последовательность у = у1у....у;...у,„не зависит от открытого текста и поэтому всякий раз при фиксированных k» и sp будет вырабатываться одна и та же гам- ма. Данный факт требует при шифровании на одном ключе двух различных мас- сивов данных использовать различные синхропосылки. 
Криптогркфичсскис методы защиты информдции в компьютерных систсмдх и сетях Рис. 3.6. Режим шифрования OFB: а — зашифрование; б — расшифрование; Sp — СИНХРОПОСЫЛКа Схема шифрования в режиме OFB npu t = и показана на рис. 3.7. Уравнения зашифрования и расшифрования принимают вид: с, = р, Е E»(я,); р,. = с, Е Едд (я,, ); s: Едтт(Я ~)& i =1,ò. В схеме режима счетчика (Counter) (рис. 3.8) ГПК имеет ярко выраженную двухступенчатую структуру. Первая ступень — это либо и-разрядный счетчик, изменение состояния которого задается формулой s; = ь| ~ + 1, либо генератор и- разрядных кодов, единственное требование к которому — это максимально воз- можный период выходной последовательности. Каждый и-разрядный двоичный набор с выхода счетчика или генератора кодов первой ступени поступает на вход функции зашифрования Е», результатом действия которой становится 
Гмм $. Криптосистемы с секретным ключом 99 очередной элемент гаммы: у,. = E„'„(я,,) Так &gt ке а в реж ме O B, ля об тимости процедур шифрования при зашифровании и расшифровании должна использоваться одна и та же синхропосылка ьо. Уравнения зашифрования и расшифрования в режиме счетчика имеют вид: с,=р,&amp р, =с, Юу,; i =1,m, t&lt Рис. 3.7. Режим шифрования OFB npu t = n: а — зашифрование; б — расшифрование; sp — синхропосылка 
100 Криптографичкскнг мгтоды здщиты информкции в компыоткрных системдх и сетях В ГОСТ 28147 — 89 аналогичный режим называется релсимом гиммироваиия. Рис. 3.8. Режим шифрования Counter: а — зашифрование; б — расшифрование; s& t; Ђ” синхропосы при зашифровании и расшифровании используется одна и та же функция ЕАв,. любой элемент (бит, байт, блок и т. п.) информационной последовательности шифруется независимо от других; изменение любого бита шифротекста на противополо>к ое значе ие при дит после расшифрования к аналогичному изменению соответствующего би- та открытого текста: b" = b~" ~ О+ 1 = (b,'"' O+ 1г, ) О+ 1 = (Ь'""~ O+ 1) O+ 1г, = b'"' O+ 1г,, где b,', b," — соответственно биты закрытого и открытого текста; Режим счетчика и режим OFB с точки зрения обеспс ~ения высокого уровня криптозащиты являются наиболее эффективными: име~нн1 они по своей сути наиболее близки к схеме одноразового использования, т. е. к абсолютно стойко- му шифру. С одинаковым на то основанием оба они могут называться ре>ки гаммирования и в качестве последнего имеют следующие свойства: 
101 Глдм $. Криптосистемы с секретным ключом повторное наложение той &gt ке га м у на зашифрован ую последовательно с дает на выходе исходную последовательность р: р O+ у O+ у = р; е шифрование нулевой последовательности дает на выходе гамму 0 O+ y = y; если известны две последовательности с' ' и с ', зашифрованные с использо- (1) (2) ванием одних и тех же значений k и s), т. е. с использованием одной и той х&l гаммы, и известна последовательность р®, TO последовательность р~ ' мо- х&lt ет б ть ле ко вычисл на по форм ле р = "' O+ c ~) O+ р ', ак ак сп ведливо соотношение с(''O+с'"-) O+ р(') = YO+ с'"-) = р("-). р, = D„~ (с, O+ р,, ); Третье свойство рех<и ов гаммирова ия д ет возможно ть противни у, обладающему секретным ключом, воздействуя лишь на биты шифротекста, вно- сить предсказуемые, а в некоторых случаях даже целенаправленные, изменения в получаемый после расшифрования открытый текст. Однако, KRK справедливо отмечается в [ll — 14], это свойство гаммирования нельзя считать недостатком, так как обеспечение секретности, с одной стороны, и обеспечение целостности и подлинности (аутентичности) информации, с другой — суть различные свойства криптосистем. Режим счетчика следует признать более качественным, чем режим OFB, учи- тывая что во втором случае криптостойкая функция Ep(), используемая в цепи обратной связи ГПК, вовсе не гарантирует максимально возмо>к ый пер гаммы. Кроме того, если в рех< ме счетч ка ри реализа ии алгори ма E& t; используемого в цепи обратной связи ГПК, возникает случайное искажение ин- формации, то при этом искажается только один элемент гаммы, а значит, непра- вильно расшифровывается только один соответствующий блок. Приведенные 5 режимов использования блочных шифров являются наиболее распространенными. Более того, первые 4 из них в свое время были официально утверх<д ны Националь ым б ро стандар ов ША (N S в качес ве режи использования алгоритма DES. В настоящее время помимо вышеперечисленных используются еще следующие режимы [9, 40]: ® сцепление блоков открытого текста — PBC (Plaintext Block Chaining) — ре- жим, обратный режиму СВС (рис. 3.9): с, = E„„(p,)O+ р 
102 Криптогрдфичсские методы здтциты информдции в компьютерных систсмдх и сетях а Рис. 3.9. Шифроаание а режиме PBC: а — зашифроаание; 6 — расшифроаание; po — синхропосылка ° обратная связь по открытому тексту (Plaintext Feedback (PFB)) (рис. 3.10)— режим, обратный режиму CFB: с, = р, ®Е,,в(р,,); р, =с, О+Ед(р,,); ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
10& Глдм $. Криптосистемы с секретным ключом а Рис. 3.10. Режим шифрования PFB: а — зашифрование; 6 — расшифрование; po — синхропосылка с, = E„B (p, О+ р,, О+ с,., ); р,. = D„~(c,)®с,, 9 р,, (рис. 3.11); ж =1, пг. с, = р,, 9Едв(р, Юс,,); р, = с,, Q+ D„~(c, 9 р,.,) (рис. 3.12); ° усиленное сцепление блоков шифротекста — различные модификации режима CBC: 
104 Криптографические мноды защиты информации в комль отерных системах и сетях Рис. 3.11. Шифрование в режиме Ciphertext Block Chaining of Ìåççàgå Difference: а — зашифров тние; 6 — расшифрование; (рп, с,) — синхропосылка s,, +k, mod 2"; с,=F,(р); SI = ® обратная связь по выходу с нелинейной функцией — OFBNLF (Output Feedback with Nonlinear Function) (рис. 3.13) — режим, предполагающий использование ГПК с функцией Е„в в цепи обратной связи для генерации ключевой последо- вательности k(k2...k;...k„„êàæäûé элемент которой используется нелинейной функцией F„: 
Глдвд $. Криптосистемы с секретным ключом р, = е',. (с,); t < ,i = Рис. 3.12. Шифрование в режиме усиленного сцепления блоков шифротекста: а — зашифрование; 6 — расшифрование; (р„, c,) — синхропосылка 
106 Криптогрдфичсскиг методы защиты информдции в компьютерных систсмдх и сетях а Рис. 3.13. Шифрование в режиме OFBNIF: а — зашифрование; 6 — расшифрование; s() — синхропосылка счепгчик с нелинейной функцией — CNLF (Counter with Nonlinear Function) (рис. 3.14) — режим, отличающийся от предыдущего лишь схемой построения ГПК: Ic, = Е,д(s,. ); с, =F,. (р,); р, =Р;,'(с,); t &lt п т =1 Представляется перспективным предло>ке ие С. А. Осмоловск го Ђ” испо зовать вместо функции Е„в и F, (рис. 3. 13) стохастическое преобразование, рассмотренное в гл. 2. ГПК, функционирующий в соответствии с уравнением 2' s,, + Е~д'О (s,, ) той 2", официально утвержден для использования в режиме Output Feedback (см. рис. 1.12) и его модификациях. Стойкость генератора при t & t и мо но по 
107 Глдм $. Криптосистемы с секретным ключом сить, если в каждом такте полностью менять содерх<и ое регис ра Г К, т. в качестве сигналов обратной связи использовать л-разрядный код E»(s; &gt Уравнение работы модифицированного генератора (рис. 3.15) имеет вид & t = EAa(&gt а Рис. 3.14. Шифрование в режиме CNLF: а — зашифрование; б — расшифрование; s() — синхропосылка Рис. 3.15. Модифицированный ГПК для режимов шифрования, подобных OFB 
108 КРИптОГРафИЧЕСКИЕ МЕТОДЫ ЗАЩИТЫ ИНфОРМЯЦИИ В КОМПЬЮТЕРНЫХ CNCTEMAX И СЕТЯХ Режимы, обратные CBC и CFB, предназначенные для обеспечения эффекта раз- множения ошибок при расшифровании искаженных сообщений, имеют общий не- достаток: искажение i-го блока с, шифротекста приводит при расшифровании к ис- кажению только блоков р„р„,,...,р,„открытого текста. Для обеспечения эффекта размножения ошибок в пределах всего расшифрованного открытого текста незави- симо от места искажения можно предложить N-кратный режим, обратный СВС, предполагающий N/2 операций сцепления в прямом направлении и N/2 операций сцепления в обратном направлении. Для того чтобы данная модификация схемы шифрования не потребовала N-кратного увеличения временных затрат на шифро- вание, композиционные процедуры Е~в и О„в можно разбить на секции E„„, j 1,N, каждая из которых используется при осуществлении соответствую- (!) ° щей /-й операции сцепления. Предлагаемый режим шифрования при недоступности для противника промежуточных результатов преобразования t(~'1,i = 1, т, j = 1, N, становится одинаково эффективным как для обеспечения секретности, так и для обеспечения аутентичности избыточной информации, где t,— промежуточные ре- зультаты шифрования, i = 1,тп . На рис. 3.16 и 3.17 показаны схемы зашифрования и расшифрования при N = 2 (см. разд. 12.5). Рис. 3.16. Схема зашифрования в режиме двойного сцепления блоков шифротекста в прямом и обратном направлениях: (hp, cp) — синхропосылка 
109 ГЛАВА $. К~)ИПТОСИСТЕМЫ С CEKPETHblM КЛЮЧОМ Рис. 3.17. Схема расшифрования в режиме двойного сцепления блоков шифротекста в прямом и обратном направлениях 3.5. Отечественный стандарт криптографической защиты В настоящем разделе дается краткое описание алгоритма криптографическо- го преобразования данных ГОСТ 28l47 — 89 [19], (в дальнейшем изложении— просто ГОСТ). Достоинства ГОСТа: ® удобство программной реализации на современных 32-разрядных процессорах; © регулярная структура устройства, реализующего алгоритм, облегчающая его интегральное исполнение; высокая криптостойкость, приемлемая для подавляющего числа приложений; ® оригинальный качественный генератор псевдослучайных кодов (генератор гаммы); большой запас "прочности" за счет значительного объема ключевой инфор- мации. 
110 Кривтогркфичсскис мттоды здщиты информкции в компьютерных системах и сствх Рис. 3.18. ГОСТ 28147-89. Таблица замен Основной недостаток, который отмечают все критики алгоритма, — он слегка медлителен, хотя в этом отношении он не сильно отличается в худшую стороны от других современных блочных шифров. Следует отметить также отсутствие в открытых источниках информации сведений о "слабых" ключах и методике выбора таблицы замен [11]. ГОСТ является классическим итерационным блочным шифром Фейстеля с разрядностью блоков данных, равным 64 битам. Чтобы разобраться в ГОСТе, необходимо выяснить характер используемой при шифровании ключевой ин- формации, раундовую функцию шифрования (так называемый основной шаг криптопреобразования, по терминологии [11, 12]), алгоритмы зашифрования Ет,. (базовые циклы 32-3 и 16-3) и расшифрования Dl,. (базовый цикл 32-P) и, нако- нец, рекомендуемые режимы использования. Ключевая информация ГОСТа. Ключевая информация представляет собой 2 массива данных: собственно ключ k и таблицу замен H (рис. 3.18). Ключ — это массив из восьми 32-разрядных элементов k = (k„,), m =0,7. Таким образом, размер ключа составляет 8 х 32 = 256 бит, или 32 байта. Таблица замен — это на- бор из восьми одномерных массивов Н = [Fl„,}, тп =0,7, так называемых узлов замены, каждый из которых определяет логику работы 4-разрядного блока под- становок (S-блока) и по этой причине содержит 16 4-разрядных двоичных набо- ров (от О до 15), расположенных в произвольном порядке Н = ]H, „,), j =0,15. Элемент т-го узла замен H,,„— это 4-разрядный код на выходе соответствующе- го m-го S-блока при поступлении на его вход двоичного кода числа j. 
ГЛАВА $. КРИПТОСИСТЕМЫ С СЕКРЕТНЫМ КЛЮЧОМ Таким образом, объем таблицы замен равен 8 х 16 х 4 = 512 битам, или 64 бай- там. Ключ должен являться массивом статистически независимых битов, прини- мающих с равной вероятностью значения 0 и 1. Если для генерации ключевой ин- формации используется ГПК, он должен обладать криптостойкостью не меньшей, чем у самого ГОСТа. Таблица замен H является в отличие от ключа k долговре- менным ключевым элементом. Она, например, может быть общей для всех проце- дур шифрования в рамках одной системы криптографической защиты. Раундовая функция шифрования ГОСТа. Структура и схема алгоритма основ- ного шага криптопреобразования показаны на рис. 3.19, 3.20. В качестве исход- ных данных шаг получает 64-разрядный блок данных d = (L, R) и 32-разрядный раундовый кл|оч х, в качестве которого используется один из элементов ключа k,„. В ходе выполнения шага левая L и правая R половины блока данных рассматри- ваются как отдельные 32-разрядные элементы данных, в качестве которых они подвергаются следующим преобразованиям: 1) сложению по модулю 2 полублока R и элементом ключа х; 32 2) разбиению результата S на 8 4-битовых блоков, поблочной замене по таблице замен, формированию из получившихся блоков нового значения S; 3) циклическому сдвигу результата S на 11 разрядов влево; 4) поразрядному сложению по модулю 2 (XOR) результата S и полублока L; 5) элемент R становится новым значением элемента L, значение результата пре- дыдущей операции становится новым значением элемента R. Полученные значения элементов L u R выдаются в качестве результата шага. Базовые циклы ГОСТа. Базовые циклы 32-3, 32-Р (циклы шифрования Е~ и D&l ; и 1 -3 (ц кл вырабо ки имитоприста ки ~) отличаю ся д уг от др га тол числом повторений основного шага и порядком использования элементов клю- ча. В обозначении цикла первый элемент — это число повторений основного ша- га (32 или 16), второй элемент — тип функции (3 — зашифрование, P — расшифро- вание). Кроме того, в конце циклов шифрования для взаимной обратимости пре- дусмотрена дополнительная перестановка элементов L и Х. Порядок использо- вания элементов ключа имеет вид: 1) цикл зашифрования 32-3 — 3 раза вперед, 1 раз назад (4 ki ", 4. 4, 4, "., 4. 4. 4, ", 4 4, 4, ", 4); 2) цикл расшифрования 32-P — 1 раз вперед, 3 раза назад (kp, 4, ", k7, k7, 4, ..., kp, К 4, .", ~о, k7, 4, ", 4); 3) цикл выработки имитоприставки 16-3 — 2 раза вперед (4, ki, ", к7 4. 4, ", 4). 
112 Подстановка Рис. 3.19. ГОСТ 28147-89: а — структура основного шага криптопреобразования; б — шаговая функция f; d~'~ — входной блок, d "" — выходной блок, х — шаговый (раундовый) ключ Сложение по мод~/лю 2 Циклический сдвиг на 11 разрядов влево КРИПТОГРАФИЧЕСКИЕ МЕТОДЫ ЗАЩИТЫ ИНФОРМАЦИИ В KOMnblOTEPHblX СИСТЕМАХ И СЕТЯХ 
1 ЛАВА $. К~ЭИПТОСИС1ЕМЫ С СЕКРЕТНЫМ КЛ!ОЧОМ Рис. 3.20. ГОСТ 28147-89. Схема алгоритма основного шага криптопреобразования G@(d, x): d — преобразуемый блок данных; x — шаговый (раундовый) ключ Схемы алгоритмов базовых циклов приведены на рис. 3.21 — 3.23. Режимы шифрования ГОСТа. ГОСТ 28147 — 89 определяет 3 режима шифро- вания данных (простая замена, гаммирование и гаммирование с обратной свя- зью) и режим выработки имитоприставки. Простая замена (рис. 3.24) заключается в применении цикла 32-3 к блокам открытого текста при зашифровании и цикла 32-P к блокам закрытого текста при расшифровании. Режим простой замены полностью совпадает с режимом ЕСВ, описанным выше. 
° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Рис. 3.21. ГОСТ 28147-89. Функция зашифрования Е» (цикл 32-3) ll4 Криптогрдфичтскит методы мщиты информдции в компьютерных систкмдх и сетях 
hABA 3. KPHllTOCHCTEMbl С СЕКРЕТНЫМ КЛ!ОЧОМ Рис. 3.22. ГОСТ 28147-89. Функция расшифрования Р» (цикл 32-P) 
11б Криптогрдфичкскик мноды защиты информдции в компьютерных систнндх и сетях Рис. 3.23. ГОСТ 28147-89. Функция зашифрования Е» (цикл 16-3) в режиме выработки имито приставки ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Ф ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
1l7 ГЛАВА 3. К~ЭИПТОСИСТЕМЫ С СЕК~)ЕТНЫМ КЛ1ОЧОМ Рис. 3.24. ГОСТ 28147-89. Шифрование в режиме простой замены: а — зашифрование; б— расшифрование; т — число блоков преобразуемого массива данных р, =с,®у,; i =l,т, где с;, р;, у; — 64-разрядные блоки соответственно открытого текста, шифротек- ста и гаммы; m — число блоков в преобразуемой информационной последова- тельности. Блоки гаммы получаются в результате зашифрования в режиме про- стой замены элементов выходной последовательности 64-разрядного генератора кодов. Таким образом, генератор гаммы имеет ярко выраженную двухступенча- Гаимирование (рис. 3.25, 3.26) заключается в наложении на открытые данные псевдослучайной гаммирующей последовательности. Режим гаммирования ана- логичен режиму Counter, описанному выше. Уравнения шифрования имеют вид: с, =р,®g,; 
118 Криптографические методы мщиты информации в компьютерных системах и снях тую структуру, при этом первая ступень, т. е. счетчик, обеспечивает близкий к максимально возможному значению 2 период гаммирующей последователь- ности, а вторая ступень, т. е. функция Ет„необходимую криптостойкость. Схема счетчика ГОСТа, являющегося по сути двумя независимо работающими рекур- 32 32 рентными генераторами со взаимно простыми значениями периодов (2 и 2 — 1), формирующими правую и левую половину блоков, обладает следующими свой- ствами: ® соседние 64-разрядные значения, вырабатываемые генератором, для повыше- ния криптостойкости отличаются друг от друга в каждом байте; генератор легко реализуется как аппаратно, так и на современных 32-разрядных процессорах программно; синхропосылка (начальное заполнение регистра ГПК) перед инициализацией генератора подвергается преобразованию по циклу 32-3; 3" период выходной последовательности равен 2' (2" — 1). Рекуррентные соотношения для старшей Q& t и млад ей QR час ей генерат имеют вид: Qq(t + 1) = (Q~(t) + Ci) mod 2, где С, = 01010101h; Qz(t + 1) = (Qz(t) + С. — 1) mod (2 — 1) + 1, где С = 01010104h. 
AABA $. К~ЭИПТОСИСТЕМЫ С СЕКРЕТНЫМ КЛЮЧОМ Рис. 3.25. ГОСТ 28147-89. Алгоритм генерации гаммы шифра: й — число элементов гаммы 
120 Криптогрдфи IEcKNE методы защиты ииформдции в KQMITI loTEplll lx cHcTEMAx u cETIIx Рис. 3.2б. ГОСТ 28147-89. Шифрование в режиме гаммирования: а — эашифрование; 6— расшифрование; ггг — число блоков преобразуемого массива данных ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
Гмвц $. Криптосистемы с секретным ключом 12l Рис. 3.27. ГОСТ 28147-89. Шифрование в режиме гаммирования с обратной связью: а — зашифрование; 6 — расшифрование; т — число блоков преобразуемого массива ДАНННЫХ Гаммирование с обратной связью (рис. 3.27) полностью совпадает с выше- описанным режимом CFB, его отличительной особенностью является способ выработки очередного элемента гаммы. Первый элемент гаммы является резуль- татом шифрования по циклу 32-3 синхропосылки. Любой последующий элемент гаммы вырабатывается как результат преобразования по циклу 32-3 предыдуще- го блока шифротекста, вследствие чего каждый блок шифротекста зависит от соответствующего и всех предыдущих блоков открытого текста. 
122 Криптогрдфичсскив методы зятциты информации в компьютерных сисгемАх и сетях Рассмотрим еще раз влияние искажений шифротекста на полученные в ре- зультате расшифрования открытые данные. В режиме простой замены искаже- ние блока шифротекста приводит при расшифровании к непредсказуемым изме- нениям соответствующего блока открытого текста. В режиме гаммирования все изменения открытого текста предсказуемы. В режиме гаммирования с обратной связью искажение блока шифротекста после расшифрования приводит к изме- нениям двух блоков открытого текста, при этом один из них оказывается иска- женным предсказуемым образов, а другой — непредсказуемым образом. Непред- сказуемые изменения в расшифрованном массиве данных могут быть обнаруже- ны лишь в случае избыточности этих данных. Такая избыточность, к сожале- нию, имеет место практически только для текстов на естественных или искусст- венных языках. Поэтому для обнаружения случайных или умышленных искаже- ний информационной последовательности требуется специальный режим, в ГОСТе он назван режимом выработки имитоприставки. Имитоириставка — это добавляемая к зашифрованным данным контрольная комбинация, зависящая от открытых данных и ключевой информации. Для про- тивника две следующие задачи вычислительно неразрешимы: ° вычисление имитоприставки для заданной незашифрованной информацион- ной последовательности; ° подбор открытых данных под заданную имитоприставку. Схема алгоритма формирования имитоприставки 1 приведена на рис. 3.28. В качестве имитоприставки используется часть последнего зашифрованного блока, обычно его младшие 32 разряда. В общем случае вероятность успешного навязывания ложных данных равна 2 ~. 
Глдм 3. Криптосистемы с секретным ключом Рис. 3.28. ГОСТ 28147-89. Режим выработки имитоприставки: т — число блоков преобразуемого массива данных; Ez — функция зашифрования по циклу 16-3; N разрядность имитоприставки 1 
ГЛАВА 4 Криптосистемы с открытым ключом Основной проблемой, возникающей при использовании криптосистем с сек- ретным ключом, рассмотренных в гл. 2, является проблема распределения клю- чей. Учитывая, что процедуры зашифрования и расшифрования выполняются с помощью одного и того же ключа, в системе с п абонентами потребуется n(n — 1)/2 ключей, которые не только должны быть сгенерированы, но и надеж- ным образом распределены среди всех участников информационного обмена. Необходимость наличия недоступных для противника секретных каналов обме- на ключами делает такой подход к построению системы секретной связи чрез- вычайно дорогостоящим мероприятием, практически неприменимым в коммер- ческих сетях связи, в региональных и глобальных информационных системах и, естественно, абсолютно недоступым частным лицам. Еще в 40-х гг. К. Шеннон предложил строить шифр таким образом, чтобы задача его вскрытия была эквивалентна решению некоей математической задачи, требующей объема вычислений, недоступного для современных компьютеров. Реализация этой идеи стала возможной, когда в 70-х гг. Диффи и Хэллман предложили принци- пиально новый способ организации секретной связи без предварительного об- мена ключами, так называемое шифрование с открытым ключом. При этом для зашифрования и расшифрования используются разные ключи и знание одного из них не дает практической возможности определить второй. В результате ключ зашифрования может быть сделан открытым без потери стойкости шифра и лишь ключ расшифрования держится получателем в секрете. 4.1. Односторонние фунмции Базовым понятием нового направления в криптографии является понятие од- носторонней функции. По заданному аргументу х с Хлегко вычислить значение этой функции F(x), в то же время определение х из F(x) трудновычислимо, т. е. нет алгоритма для решения этой задачи с полиномиальным временем работы. Теоретически х по известному значению F(x) можно найти всегда, проверяя по очереди все возможные значения х до тех пор, пока соответствующее значение F(x) не совпадет с заданным. Однако практически при значительной размерно- сти множества Х такой подход неосуществим [10]. Итак, односторонней функцией называется функция F: Х вЂ” Y, обладающая двумя свойствами: ° существует полиномиальный алгоритм вычисления значений F(x); ° не существует полиномиального алгоритма инвертирования функции F. 
Глдм 4. Криптосистсмд с открытым ключом ]25 Задача вычисления функции, обратной модульному возведению в степень, называется задачей дискретного логарифмирования. На сегодняшний день неиз- вестно ни одного эффективного алгоритма вычисления дискретных логарифмов больших чисел. Односторонняя функция в качестве функции зашифрования неприменима, так как, хотя Е(х) — надежно зашифрованное сообщение х, никто, в том числе и законный получатель, не сможет восстановить х. Обойти эту проблему мам&lt с помощью односпгороинеи функции с секретом (one-way (тарйоог function). Та- кова, например, функция Е~. Х вЂ” Y, имеющая обратную В&l ; У Ђ” Х, одн ко нать обратную функцию только по Е~ без знания секрета k невозможно. Таким образом, односторонней функцией с секретом Й называется функция Е,.: Х - ~, зависящая от параметра k и обладающая тремя свойствами: ° npu лк> о k сущеспгв ет полиномиачь ый алгор тм вычисле ия значе Е<.( ния Е~, функцию Е„можно использовать для зашифрования информации, а обрат- ную ей функцию D& t; Ђ” ля pàñøèôðîâàí ÿ, ак ак ри в е Х справедл %(й(-~)) = x. При этом подразумевается, что тот, кто знает, как зашифровывать информа- цию, вовсе не обязательно должен знать, как расшифровывать ее. Так же как и в случае с односторонней функцией, вопрос о существовании односторонних функций с секретом открыт. Для практической криптографии найдено несколь- ко функций — кандидатов на звание односторонней функции с секретом. Для них второе свойство не доказано, однако известно, что задача инвертирования экви- До сих пор ни для одной функции — кандидата на звание односторонней не доказано, что она действительно является односторонней. Примером кандидата на звание односторонней функции является модульное возведение в степень, т. е. функция F(x) = и mod р, где и — примитивный эле- мент поля GF(p); р — большое простое число. То, что эта функция может быть эффективно вычислена дах&l ;е ри разрядно ти парамет о в нескол ко от з 25 ков, можно показать на примере: и можно вычислить с помощью всего лишь шести операций умно>ке ия (умножен ем считае с и возведе и в квадра ), "5 1 '7 1 2 КаК о& t = (( о& t; ) ") и. але , при вычи ле ии ' mod р зятие м дуля, избежать получения очень больших чисел, следует делать после каждого умно- жения. Пусть 1 — разрядность экспоненты х, тогда при вычислении и" niod р по приведенному в [7] рекурсивному алгоритму потребуется выполнить от l до 2l модульных операций умножения: function expmod (и, х, р) if х = 0 then return 1 if х = О mod2 then return (expmod(v, х/2, р) )' modp else return (и expmod (и, х — 1, p) ) modp 
12б КриптографиvесKие методы защиты информации в компьютерных системах и сетях валентна некоторой хорошо изученной и давно известной трудной математиче- ской задаче. Это означает, что второе требование к односторонней функции с секретом заменяется более слабым условием: при неизвестном k. вероятно, не существует полиномиального алгоритма инвертирования Ет,. Применение рассмотренных функций для шифрования информации позволя- ет [10]: ° избавиться от необходимости секретных каналов связи для предварительного обмена ключами; ° свести проблему взлома шифра к решению трудной математической задачи, т. е. в конечном счете принципиально по-другому подойти к обоснованию стойкости криптосистемы; решать средствами криптографии задачи, отличные от шифрования, напри- мер задачу обеспечения юридической значимости электронных документов. 4.2. Модель криптосистемы с открытым ключом Криптосистему с открытым ключом (public key cryptosystem) (рис. 4.1), ос- нованную на применении односторонних функций с секретом, можно реализо- вать следующим образом. Пользователь В, который хочет получать конфиден- циальные сообщения, должен выбрать одностороннюю функцию Ев с секретом (ключом) kil. Он сообщает всем заинтересованным лицам, например публикует в справочнике открытых ключей, описание своей функции зашифрования Ев. При этом ключ kil, а следовательно, и алгоритм расшифрования DB, держится в секрете. Если теперь пользователь А хочет послать B секретное сообщение р, то он находит в справочнике функцию Ев, а затем вычисляет с = E„(p) и посы- лает шифротекст с по открытому каналу пользователю В. Последний, зная сек- рет kil, т. е. умея инвертировать Ео, определяет р по полученному с, вычисляя р = D (с). Противник, не зная ключа ka, в силу второго свойства односторонней функции с секретом не сможет прочитать секретную информацию. В отличие от криптосистемы с секретным ключом, если абонент А, зашифровав некоторое сообщение р для абонента В, сохранит шифротекст с, но потеряет р или забу- дет его содержание, он не будет иметь никаких преимуществ перед противни- ком в раскрытии исходного текста р по известному с. Атаки на криптосистему с открытым ключом аналогичны атакам на крипто- систему с секретным ключом, однако следует помнить, что в первом случае про- тивник всегда знает открытый ключ, а значит, всегда возможна атака на основе выбранного открытого текста. Кроме того, возможна так называемая атака с проверкой текста (verifiable text attack): если число возмохеных открытых тек- стов невелико, противник, зная открытый ключ, мохеет заранее заготовить сооТ- ветствующие им шифротексты, а затем, сравнивая с ними перехваченные шиф- ровки, получать соответствующие последним открытые тексты. Исключить та- кой вид атак на криптосистему позволяет вероятностное шифрование. 
Глдм 4. Криптосисымд с открытым ключом ]27 Й KJIOV ля k(~««) 0 сшифрования) Рис. 4.1. Модель криптосистемы с открытым ключом Шифрование с открытым ключом может использоваться в тех из рассмот- ренных в гл. 1 режимах, которые для зашифрования и расшифрования исполь- зуют разные функции, соответственно Е» и D». (например, ЕСВ и CBC). Наиболее известные системы с открытым ключом: ° рюкзачная криптосистема (Knapsack Cryptosystem); криптосистема RSA; ° криптосистема Т. эль-Гамаля — EGCS (El Gamal Cryptosystem); криптосистема, основанная на свойствах эллиптических кривых — ECCS. (El- liptic Сигче Cryptosystem). Первые две криптосистемы будут рассмотрены в данной главе. Криптосисте- ма эль-Гамаля, основанная на сложности решения задачи дискретного логариф- мирования, послужила основой для создания российского и американского стандартов электронной подписи, которые будут рассмотрены в гл. 8. ECCS бу- дет рассмотрена в гл. 12. 4.3. Открытое распределение кличей Помимо принципа построения асимметричных криптосистем У. Диффи и М. Хэллман предложили протокол выработки общего секретного ключа, т. е. процедуру взаимодействия по открытому каналу связи удаленных абонентов A и В, обладающую следующими свойствами: ° в конце процедуры у А и В появляется обидная секретная информация (общий секретный ключ), которой до начала действия протокола не было; 
128 КРИПТОГРАфИЧЕСХИЕ МЕТОДЫ ЗАЩИТЫ ИНФОРМАЦИИ В КОМТ1ЬЮТЕРНЫХ СИСТЕМАХ И СЕТЯХ ® противник, который способен перехватывать все сообщения и знает гжель протокола, не может восспгановигггь сформированный секретный ключ. Этот на первый взгляд невозможный протокол основывается на задаче дис- кретного логарифмирования, рассмотренной выше. Противник, который хочет узнать формируемый секретный ключ, вынужден решать именно эту трудную математическую задачу. Пусть р — большое простое число, и — примитивный элемент поля GF(p). Числа р и и считаются общедоступными. Тогда процедура получения общей секретной информации — протокол выработки обгцего сек- ретного xmo«a Диффи — Хэлшиана имеет следующий вид. 1) абоненты А и В независимо друг от друга вырабатывагот два случайных числа, соответственно хд и хв, копгорые держат в секрете; 2) абоненты А и В вычисляют значения y„= (o" * mod р и y„= (o'" mod р; 3) абопенпгы А и В обмениваготся сообщениями уд и ув, 4) А, получив сообгггение ув, вычисляет значение (у„) "madр= m'") mad р; В, получив сообщение уд, вычисляет значение тогг р; (y„) "mod р = 5) элемент GF(p), равный и""", объявляепгся общим секрепгным кггочом. 4.4. Электронная подпись Одностороннюю функцию с секретом Диффи и Хэллман предложили исполь- зовать для ггифровой подписи сообщений, которая позволила бы, например, ус- танавливать истину при возникновении споров относительно авторства пересы- лаемых важных документов. Традиционная криптосистема с секретным ключом (см. рис. 3.1) не может быть использована для разрешения противоречий, возни- кающих между не доверяющими друг другу абонентами, так как секретная ин- формация (ключ), используемая для зашифрования сообщений, известна как минимум двум лицам. Поэтому пересылка по линиям связи платежных доку- ментов или информации, требующей нотариального заверения, в этом случае чревата большими неприятностями. Если Ет, — односторонняя функция с секретом, то подписанное сообщение можно представить в виде пары (r О (р)) где р — подписываемый документ, а Ве — функция, обратная Ее. Из определения односторонней функции с секретом следует, что для такой подписи характерны следующие особенности [10]: 
Гмвц 4. Криптосистамд с открытым ключом 129 подписать сообщение р может только обладатель секрета k, т. е. подделать подпись практически невозможно; проверить подпись может любой абонент, знающий функцию Е~, так как про- верка подписи заключается в проверке равенства р=Е,. (D~ (р)); © при возникновении споров относительно авторства сообщений отказаться от подписи нельзя из-за невозможности ее подделки; подпись позволяет контролировать ~властность подписанных документов, а значит, их можно безо всякого ущерба пересылать по открытым каналам связи. Если необходимо обеспечить секретность, можно применить следующий протокол цифровой подписи. Пусть у каждого из двух абонентов А и В имеется пара взаимно-обратных функций — открытая функция зашифрования Е и секрет- ная функция расшифрования D. Если абонент А хочет послать подписанное со- общение абоненту В, он, используя сначала свой секретный ключ, а затем от- крытый ключ получателя, вычисляет D„(p) и передает шифротекст с абоненту В. Получатель сообщения, используя сначала свой секретный ключ, а затем открытый ключ абонента А, восстанавливает ис- ходный текст, вычисляя р = D (E„(c)) Теперь при возникновении спорной ситуации, когда А отказывается от по- сланного сообщения, он обязан предъявить арбитру свой секретный ключ. Ар- битру необходимо лишь проверить равенство DÄ (p) = DÄ (c) В случае его выполнения он убеждается, что никто, кроме А, отправить со- общение не мог, и принимает решение в пользу В. Приведенный протокол за- ставляет быть честным и абонента В. Для того чтобы исказить принятое сооб- щение р на р, ему необходимо изменить и подпись ° = О„(р) на я = О (р ). Но для этой операции необходим секретный ключ абонента А, которого у В нет. Приведенная последовательность применения функций D& t и Ед единстве возможна. Если абонент А попытается послать В "подписанное" сообщение вида С=DÄ(E (р)), противник W, перехватив это сообщение, используя открытый ключ абонента А, сможет вычислить Е~(с) = Е (р), а затем, используя свой закрытый ключ, по- слать якобы подписанное им сообщение с'= О, (Ец(р)). Тогда В, вычислив Dö(E, (с'))= р, 
130 КриптогрАфические методы зАщиты информАции в компьютерных системАх и сетйх был бы убежден, что р подписано именно W. Таким образом, в рассматривае- мой ситуации противник всегда может подписывать сообщения, содержимое которых он сам прочитать не в состоянии. Общий недостаток всех криптосистем с открытым ключом — низкое быстро- действие, поэтому на практике применяются модифицированные схемы элек- тронной подписи, в значительной степени решающие эту проблему. Эти схемы будут рассмотрены в гл. 8. 4.5. Криптосистема, основанная на задаче об укладке рюкзака Создание данной системы шифрования и ее модификаций чаще всего связы- вают с именами P. Меркля и М. Хэллмана. Прототипом трудной математической задачи, лежащей в ее основе, является следующая ситуация. Имеется рюкзак и множество предметов, которые хотелось бы захватить с собой, отправляясь в поход. Требуется найти подмно>кес во предмет в, ко рые заполнят рюкзак до отказа. Рассмотрим пример простой числовой задачи такого типа. Простая задача об укладке рюкзака. Представить число 55 в виде суммы не- которых из чисел (3, 8, 12, 2, 32, 59). Ответ: 55 = 3 + 8 + 12+ 32. Итак, число 55 равно сумме первого, второго, третьего и пятого чисел из представленного списка. Этот факт можно записать следующим образом: 55 +-+ (111010). При этом можно решить обратную задачу: если известна последова- тельность (111010), можно восстановить число 55, суммируя первое, второе, третье и пятое числа из заданного списка. Таким образом, на основе' списка чисел можно построить примитивную систему шифрования, как показано на рис. 4.2. Рис. 4.2. Примитивная система шифрования, в которой отправителю и получателю известен список чисел (3, 8, 12, 2, 32, 59) Еще более простая задача об укладке рюкзака получается в том случае, если каждое число в списке больше суммы всех предыдущих, стоящих справа, на- пример числа в списке являются степенями двойки. 
Гмм 4. Криптосистем~ с открытым ключом Очень простая задача об укладке рюкзака. Представить число 26 в виде сум- мы различных чисел из списка { 32, 16, 8, 4, 2, 1 }. Ответ: 26 = 16 + 8 + 2, ггли 26 «-+ ~(011010). По сути, решение задачи сводится к переводу заданного десятичного числа в двоичную систему счисления, обратная же задача сугь перевод заданного дво- ичного числа в десятичную систему счисления. Теперь можно сформулировать основные принципы получения односторон- ней функции с секретом и построения на ее основе криптосистемы с открытым ключом на основе задачи об укладке рюкзака: 1) составляется трудная задачи Т, нерегиаемая за полиномиальное время; 2) из Т выделяется легкая подзадачи Т„„,,, имеющая полино~чиальный или даже более простой алгоритм решения; 3) путем "взбивания" легкая задача Т„„„. превращается в труднорешаемую за- дачу T,.>, „, не имегои ую никак го сходс в с Т„„ 4) на основе Т,.ggfl, определяется открытая функция зишифровапия; процедура получения Т,.„„. из Т,~„~г, держится в секрете; 5) конструируепгся криптосистема таким образом, чтобы для противника процедура дегиифровиния заклгочалась в решении Т,.~„~„, имеющей вид труд- ной задачи Т, а законный получатель, знающий секрет, решал бы легкую за- дачу Tåøó. Предположим, что список {а 1, ..., аг, a)} состоит из ста 40-значных чисел, т. е. пг = 100 и с — 42-значное число. Тогда имеет место Трудная задача Т об укладке рюкзака. Дан список чисел {а„, 1, ..., а;, ..., а~, ао}. Представипгь число с в виде суммы некоторых чисел а; из списка. Если числа в списке выбраны случайным образом, для ответа на вопрос, ка- кие из них в сумме дают с, необходимо перебрать 2 различных вариантов. Ес- 100 ли использовать этот список в системе шифрования, аналогичной показанной на рис. 4.2, она была бы надежной, но законный получатель не смог бы восстано- вить переданное ему сообщение. Необходима задача об упаковке рюкзака с секретом, которую мог бы легко решить законный получатель информации, а для противника она бы выглядела по-прежнему трудноразрешимой. Сначала составим легкую задачу Т,„, об ук- ладке рюкзака, для чего выбираем числа { aÄ,1, а;,...,аг а1}, содержащие в десятичной записи степени двойки. Схема соответствующей системы шифрования на основе списка ао — — 020105, a~ = 220209, а =260405, аз = 120802, а4 = 031608 
1)2 Криптографические методы защиты информщии в компьютерных системах и cemx показана на рис. 4.3. Второй и третий разряды каждого числа а; из списка со- дерх&lt ат степ нь дво ки ', пер ые разр ды в ех чи е в дан ом прим ре сод жат нули. В общем случае нулевые разряды должны стоять не только правее, но и левее степеней двойки, чтобы после сложения любого количества чисел из списка в результате переносов не исказилась сумма этих степеней. Рис. 4.3. Примитивная система шифрования на основе легкой задачи об укладке рюкзака "Взбивание" задачи Т„,, è получение Т,.~„~т„мох&lt но выполн т с помо операции модульного умножения. Выберем два больших взаимно простых числа r u s и найдем число t, такое, чтобы выполнялось условие st = 1(mod r). Уничто- ЖИМ СПИСОК а„, 1, ..., аь ..., а~, ас} и число s, предварительно получив новый список {bi -~ ." Ь " Ьг bJ} каждый элемент которого есть результат умнох<е ия соответствующ го чи ла первоначального списка на s по модулю r: b, =scz,(mod r), i =0,(zz — 1). Числа из нового списка будут казаться случайными числами из интервала [0; r — 1], и все, кто не знает принципа их получения, примут соответствующую задачу Т,g„fl„за трудную задачу об укладке рюкзака. Именно она будет приме- няться при зашифровании информации, поэтому список {b„, ...,b;,...,Ь,,Ь,} сообщается всем заинтересованным лицам. Числа t u r держатся в секрете. Та- ким образом, получим следующую систему шифрования. Криптосистема на основе задачи оо укладке рюкзака: Открытый ключ зашифрования: список (Ь„, 1, ..., b;, ..., b~, Ьп }. Закрытый ключ расшифрованття: пара чисел (t; r). Алгоритм зашифрования двоичного сообтиения р = (р,,..., р„..., р,, ро): m-1 
Гмвц 4. Криптосистема с открытым ключом Алгоритм расшифрован ия закрытого сообщения с: 1) составляем произведение m 1 m-1 tc= t,ð,то r = ар,то r' j=o &lt 2) решая легкую задачу об укладке рюкзака, находим Р (Р 1'" Р " Р~ Ро). Пример шифрования по приведенной схеме показан на рис. 4.4. Легкая задача об укладке рюкзака Трудная задача об укладке рюкзака Зашифрованное Расшифрованное И со Рис. 4.4. Рюкзачная криптосистема К сожалению, некоторые варианты этой оригинальной и красивой криптоси- стемы были раскрыты вскоре после своего создания. 4.6. Криптосистема RSA х' =— (mod p); Система RSA, название которой происходит от первых букв фамилий авто- ров, P. Ривеста, А. Шамира и Л. Адлемана, является наиболее распространенной и изученной криптосистемой с открытым ключом. Она основана на использова- нии того факта, что легко перемножить два больших простых числа, в то х&l время крайне трудно разложить на множители их произведение. В результате произведение может быть использовано в качестве элемента открытого ключа зашифрования. Исходные простые числа необходимы для расшифрования, при этом задача их восстановления до сих пор сопротивляется всем атакам криптоа- налитиков. Таким образом, имеются хорошие предпосылки для построения од- носторонней функции с секретом. Рассмотрим некоторые математические факты, на которых основан алгоритм. Согласно малой теореме Ферма, если р — простое число, то для любого х, взаим- но простого с р, справедливо 
134 Криптогрдфичкскиа методы защиты информации в компьютерных системах и сетях для любого х справедливо х" = — x(mod р). Функция тр(и) натурального аргумента и, равная количеству положительных целых чисел, меньших и и взаимно простых с и, называется функцией Эйлера. Для нее справедливы следующие соотношения: тр(1) = 1; ч(р')=р (р-»' тр(аЬ) = тр(а)тр(Ь), где р — простое, r, а и b — натуральные, (а, b) = 1. Эти свойства позволяют легко вычислять тр(и), когда известно разложение и на простые множители. Если нату- ральное число е удовлетворяет условию (e, y(n)) = 1, то существует единствен- ное натуральное число d ( тя(п), для которого справедливо de = 1(mod cp(n)). Пусть n = pq, где р и q — два больших различных простых числа, и (х, (p(n)) = 1. Тогда согласно теореме Эйлера для любого натурального х выпол- няется сравнение х" = — x(mod и) и, следовательно, х"" (той n) = х при условии х ( и. Итак, выберем два больших различных простых числа р и q и число е, взаим- но простое с числом (р — l)(q — 1). Вычислим и = pq и найдем d, такое, что de = — 1(mod (p — 1)(q — 1)). Тогда рассматриваемая криптосистема выглядит следующим образом. Криитоскстема RSA: Открытый ключ зашифрования. числа и и е. Закрытый ключ расшифрования: числа р, q u d. Алгоритм зашифрования сообщения р: EÄ (p) = р" (mod n) = с. Алгоритм расшифрования закрытого сообщения с: D„(c) = с (mod n) = р. Единственный способ найти алгоритм расшифрования Вт, при известных е и и состоит в том, чтобы разложить на простые множители число и, найти р и q, а следовательно, и d. Правильный выбор разрядности чисел р и q (первоначаль- но авторы RSA предлагали в качестве р и q использовать не менее чем 40-разрядные десятичные числа) делает задачу факторизации и практически не- осуществимой. Пример шифрования по приведенной схеме показан на рис. 4.5, где е = 7, d=3, п = 33. 
Гмю 4. Криптосистема с открытым ключом Рис. 4.5. Пример шифрования по схеме ИА Авторы RSA при описании принципов функционирования своей системы вы- брали в качестве исходного текста фразу ITS ALL GREEC ТО МЕ (Для меня все это совершенно непонятно). Для того чтобы преобразовать этот текст в одно большое число, закодировали пробел между словами О, букву А — 1, букву  — 2, букву С вЂ” 3, ..., букву Z — 26. На представление каждого символа выделили 5 двоичных разрядов. В результате приведенной фразе стало соответствовать число р = 09201900011212- 000718050511002015001305. Для шифрования авторы выбрали е = 9007 и п = 114381625757888867669235- 77997614661201021829672124236256265184293570693524573389783059712356- 3958705058989075147599290026879543541. После зашифрования получили число с = р'(modn) = 199935131497805100- 45231712274026064742320401705839146310370371740625971608948927504399- 20962672582675012893554461353823769748026. Число п было произведением 64- и 65-значного простых чисел р и q, выбран- ных случайным образом. Если исходный текст слишком велик, чтобы с ним можно было обращаться как с одним числом, то его следует разбить на блоки и каждый блок рассматри- вать как отдельное число, при этом необходимо использовать шифрование со сцеплением блоков (режим CBC). При разработке криптосистемы сначала выбираются два различных простых числа р и q. Для этого произвольно выбирается нечетное число r подходящего размера (например, 100-разрядное) и проверяется на простоту. В случае, если тест дает отрицательный результат, проверяется число r + 2 и т. д. Существует приблизительно (10 ~/ln10'~) — (10 /ln10 ) 100-разрядных простых чисел. Учи- тывая, что всего существует (10 — 10 )/2 100-разрядных нечетных чисел, ве- ) 00 99 роятность успеха одного конкретного теста равна приблизительно 0,00868. По- сле того как р и q выбраны, кандидаты на е проверяются с помощью алгоритма Евклида. Когда е удовлетворяет условию (е, y(n)) = l, цепочка равенств, полу- чаемых в результате применения алгоритма Евклида, дает нам и значение d. Процедура шифрования суть модульное возведение в степень, эту операцию следует осуществлять методом последовательного возведения в квадрат, т. е. после каждого возведения в квадрат результат берется по модулю r. При этом никогда не возникают числа большие и [7]. 2 
136 Крилтогркфичсскик методы защиты информации в компьютерных систсмкх и сетях 4.7. Гибридные криптосистемы Рис. 4.6. Первый вариант схемы гибридного шифрования Несмотря на все преимущества криптосистем с открытым ключом, ни одна из известных на сегодняшний день их реализаций не может конкурировать по бы- стродействию с криптосистемами с секретным ключом. Так, например, быстро- действие системы RSA в тысячи раз ниже быстродействия DES. В результате при шифровании длинных информационных последовательностей может случиться так, что применение асимметричного алгоритма недопустимо снижает скорость информационного обмена, а применение симметричного невозможно из-за от- сутствия общего секретного ключа у участников этого обмена или по каким-то другим причинам. Выходом из этой ситуации является использование гибрид- ной криптосистемы (рис. 4.6, 4.7). 
137 Гмвд 4. Криптосистем~ с открытым ключом ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° А (Генератор ключей) 3 " ( ° .". /i& % Докуиент р Сеансовыи ключ k„a Заши рование сеансового ключа Расши рование сеансового ключа Сеансов ы й кл юч ~лв окумент р Рис. 4.7. Второй вариант схемы гибридного шифрования Абонент А (отправитель) Заши рован ие документа Расши рование документа Абонент В (получатель) Открытый ключ абонента В & t; (риЫ в Заши рованное сообщение Закрытый ключ получателя ~ (secret') в 
Криптографические методы защиты информации в компьютерных системах и сетнх В схеме, показанной на рис. 4.6, на начальном этапе участники информаци- онного обмена (абоненты А и В), используя протокол выработки общего секрет- ного ключа, формируют общую секретную информацию (сеансовый ключ Й,цт). На следующем этапе для обмена зашифрованными сообщениями используется криптосистема с секретным ключом. Схема, показанная на рис. 4.7, предполагает наличие у каждого участника информационного обмена двух ключей: открытого k+"~"" и закрытого k"""". Рассмотрим процесс пересылки некоего документа р . Отправитель (абонент А) вырабатывает секретный ключ — случайное число, используемое только 1 раз и поэтому называемое одноразовым или сеансовым ключом. Этот ключ исполь- зуется для зашифрования документа р при помощи симметричного криптоал- горитма. Сеансовый ключ зашифровывается на открытом ключе получателя (абонент B) и присоединяется к ранее зашифрованному документу. Сформиро- ванное таким образом сообщение отсылается получателю. Последний, получив сообщение, повторяет те же процедуры, но в обратном порядке. С помощью своего секретного ключа получатель восстанавливает сеансовый ключ, а затем с его помощью расшифровывает и сам документ. 
ГЛАВА 5 Криптографические протоколы Успешное решение задачи открытого распределения ключей, создание прак- тических схем электронной подписи способствовало возникновению нового на- правления криптографии — теории криптографических npomoxoíoâ. Для совре- менных информационных систем характерен перевод всего документооборота в электронную форму. Возникающие при этом проблемы чаще всего могут быть решены только с использованием возможностей криптографии. Типичный при- мер: взаимодействуют два удаленных абонента А (клиент банка) и В (банк). Абонент А хочет доказать абоненту В, что он тот, за кого себя выдает, а не зло- умышленник. Для решения этой задачи требуется протокол аутентификации абонента. В каждом конкретном случае для обеспечения юридической значимо- сти пересылаемых электронных документов требуется использование соответст- вующих криптографических протоколов, которые за последние годы преврати- лись в основной объект исследований криптографии [10]. 5.1. Основные понятия Объектом изучения теории криптографических протоколов являются удален- ные абоненты, взаимодействующие по открытым каналам связи. Целью взаимо- действия является решение какой-либо практической задачи. Модель преду- сматривает наличие противника, преследующего собственные цели. Противник может выдавать себя за законного субъекта взаимодействия, вмешиваться в ин- формационный обмен между абонентами и т. и. Участники протокола в общем случае не доверяют друг другу, т. е. некоторые протоколы должны быть рассчи- таны на ситуацию, когда противником может оказаться даже один из абонентов или несколько абонентов, вступивших в сговор. В настоящее время известно около трех десятков различных типов протоколов. Все эти типы можно разде- лить на две группы: ° прикладные протоколы, решающие конкретную задачу, которая может воз- никнуть на практике; ° примитивные протоколы, которые используются в качестве своеобразных строительных блоков при создании прикладных протоколов [10]. Протокол чаще всего является интерактивным, т. е. предусматривает много- раундовый обмен сообщениями между участниками, и включает в себя [10]: ° распределенный алгоритм, т. е. характер и последовательность действий ка- ждого из участников; ° спецификацию форл~атов пересылаел~ых сообщений; ° спецификацию синхронизации действий yuacmnuxos; ° описание действий при возникновении сбоев. 
140 Криптографические методы м щиты информации в компьютерных системах и сатих 5.2. Доказательства с нулевым разглашением Существенное влияние на разработку многих криптографических протоколов оказали исследования двух математических моделей — ггнпгерактивной системы доказапгельств (Interactive Proof System) и доказапгельств с нулевым разелаше- нием знаний (Zero-Knowledge Proofs). Интерактивная система доказательств суть протокол (P, V, S) взаимодействия двух субъектов: доказывающего (претендента) P и проверяющего (верификато- ра) V. Абонент P хочет доказать V, что утверждение S истинно. При этом счита- ется, что абонент V самостоятельно проверить утверх<де и S н в состоян что абонент V не может быть противником, а абонент Р может быть противни- ком, пытающимся доказать истинность ложного утверх<де ия S. Проток л, стоящий из некоторого числа раундов обмена сообщениями между P и V, дол- жен удовлетворять двум условиям: 1) полноте — если S действительно истинно, то доказывающий убедит прове- ряющего признать это; 2) коррекпгности — если S ложно, то доказывающий не сможет убедить прове- ряющего в обратном. Если предполох<и ь, т V мо ет б ть противник м, кото ый хо ет получ информацию об утверждении S, необходим протокол (P, V, S), называемый доказательством с нулевым разглашением, удовлетворяющий, помимо пере- численных, еще и следующему условию: 3) нулевому разглашению — в результате. работы протокола абонент V не увели- чит своих знаний об утверждении S. Иными словами, в результате реализации протокола абонент P сможет дока- зать абоненту V, что он владеет некоторой секретной информацией, не разгла- шая ее сути. Упрощенно процедуру доказательства с нулевым разглашением можно пред- ставить следующим образом. Проверяющий задает серию случайных вопросов, ках< ый из кото ых допуск ет от ет " а" ли "не ". По ле перв го вопр са п веряющий убеждается в том, что доказывающий заблуждается с вероятностью 1/2. После второго вопроса проверяющий убех<дае с в т м, то доказываю заблуждается с вероятностью 1/4, и т. д. (после каждого вопроса знаменатель удваивается). После 100 вопросов вероятность того, что доказывающий заблуж- дается или не располагает доказательством (не владеет секретной информацией) становится настолько близкой к нули, что даже у самого "недоверчивого" про- веряющего не должно остаться сомнений в справедливости доказываемого ут- верждения. После 300 вопросов знаменатель достигает величины, которая пре- восходит число атомов во Вселенной. Роль доказательств с нулевым разглашением особенно велика при реализа- ции протоколов аутентификаг/ии. Пусть, например, P — алгоритм, реализован- ный в интеллектуальной карточке клиента (абонент А) банка, V — программа, выполняемая компьютером банка (абонент В). Перед выполнением любой опе- 
141 Гллвл &g ;. Криптогрлфичсс иа проток рации банк должен убедиться в подлинности карточки и идентифицировать ее владельца. Если для этой цели использовать протокол (P, V, S), свойство полно- ты позволит карточке доказать свою аутентичность; свойство корректности защитит интересы банка от злоумышленника, который попытается воспользо- ваться фальшивой карточкой; свойство нулевого разглашения защитит клиента от злоумышленника, который попытается пройти аутентификацию под именем абонента А, воспользовавшись информацией, перехваченной во время предыду- щих раундов аутентификационного обмена. Аналогичных результатов можно добиться, используя методы доказательств с нулевым разглашением для созда- ния не поддающихся подделке удостоверений личности, имеющих важное зна- чение как для военных, так и для гражданских целей [10, 18]. 5.3. Протоколы подбрасывания монеты [7, 10] ° Х вЂ” конечное множество целых чисел, содержащее одинаковое количество четных и нечетных чисел; ® любые числа х1, х е Х, такие, что F(x&g ; = F(x ), им ют одинако ую четнос ° по заданному значению F(x) невозможно определить четность аргумента х. Протокол подбрасыванкя монеты (схема Блюма - Мккалк): 1. Абонент А выбирает случайное число хл G Х (подбрасываепг монету), вычис- ляет уд — — Р'(хл) и посылает ул абоненту В. 2. Абонент В, получив уд, пытается угадать четность х и посылает свою до- гадку А. 3. Абонент А, получив догадку от В, сообщает последнему, угадал ли он, посы- лая ему выбранное число хА. 4. Абонент В, получив х&g ;, проверя т, не обманыв ет ли А, вычис яя значе Р'(хд) и сравнивая его с полученным на втором игаге значением óä. Суть протокола состоит в том, что абонент А связывает себя с числом х., так как он сообщает абоненту В значение yA — — F(x&g ;) одн ко абон н В не мо ет мостоятельно вычислить хл, так как F(x) является односторонней функцией. Классическим примером задачи, решаемой двумя удаленными абонентами, является бросание жребия с помощью подбрасывания монеты. Это необходимо сделать так, чтобы абонент А, подбрасывающий монету, не мог изменить ре- зультат после получения догадки от абонента В, угадывающего этот результат. Протокол решения этой задачи называют протоколом подбрасывания монеты. Этот примитив, по сути протокол генерации случайного бита, используют в сво- ем составе многие прикладные протоколы. Примером такого протокола является схема М Блюма — C. Микали, предпо- лагающая наличие у двух его участников односторонней функции F: Х У, удовлетворяющей следующим требованиям: 
142 КриптогрАфические методы зАщиты информации 8 KQMnblotfpHl lx системАх и сещх Следующий протокол подбрасывания монеты основан на предположении о вычислительной неразрешимости задачи дискретного логарифмирования. Пусть р и q — простые числа, причем q делит р — 1. Найдем g c У„такое, что g»= 1 modр, g»е 1. Протокол подбрасывания монеты (схема Блюма~ 1. Абонент А выбирает случайное число хА e Z,, вычисляет у„= g'"ïãoñ! р и посылает уА абоненту B. 2. Абонент В выбирает случайный бит b и случайное число хгг т= Z», вычисляепг ув = y „g "'mod р и посылает ув абонепту А. 3. Абонент А выбирсгегп случайный бит а и посылает его абоненту В. 4. Абонент В посылает абоненту А бит b и число хгт. 5. Абонент А проверяет равенство у„= у„g'"mod р. При положипгельном ис- ходе результатом выполнения протокола будет бит с = а O+ b. Суть протокола объясняет следующая его "физическая" реализация. Абонент В выбирает случайный бит b, записывает его на листе бумаги, запирает этот лист в ящик (y& t; с ть криптографичес ий ана ог эт го ящик ), остав яя к юч (х у себя, и посылает ящик абоненту А. Получив запертый ящик, абонент А не мо- жет добраться до его содержимого. Он выбирает случайный бит а и посылает его абоненту В. В ответ В посылает А ключ от ящика, а затем определяет исход подбрасывания монеты с = а O+ b. Абонент А, получив ключ, отпирает ящик, чи- тает Ь и точно таким же образом узнает с. Следующий протокол основан на предположении о вычислительной нераз- решимости задачи дискретного логарифмирования. Протокол подбрасывания монеты [7) 1. Абоненгп А выбирает случайным образом некоторое число Блюма и (см. гла- ву 12) число хА G Z~ вычисляет уА — — x~~ mod n и z~ — — у А mod и, затем сообща- ет числа и и z~ абоненпгу В. 2. Абонент В сообщает абоненту А свое предположение о четности или не- чептосвги у&g 3. Абонент А сообщает абоненту В числа хА и y&g ; a та же да пг возможно убедиться, что и является числом Блюма. 4. Абонент В проверяет равенспгва у„= х ~ mod и и z„= у А mod n. 2 2 Таким образом, абонент А передает абоненту В квадратичный вычет по моду- лю целого числа Блюма, а B пытается угадать, является ли его примитивный квадратный корень четным или нечетным. Выбор в качестве и целого числа Блюма является гарантией отсутствия у z& t; д ух квадрат ых кор ей различ четности, оба из которых являются квадратичными вычетами. Можно предло- жить следующую "физическую" реализацию приведенного протокола. А бросает 
Гллвл 5. Криптогрлфические протоколы 14$ монету в колодец. А видит исход бросания монеты, но не может его изменить. В находится далеко и не может его увидеть. Однако А в конце концов может по- зволить В подойти поближе и заглянуть в колодец. Рис. 5.1. Протокол подбрасывания монеты 5.4. Протоколы битовых обязательств [7, 10] Если из приведенной выше схемы Блюма вычленить шаги 1, 2 и 4, получим так называемый протокол битового обязательства, или протокол привязки к биту (bit commitment). Шаги 1 и 2 в этом протоколе называются этапом при- вязки, а шаг 4 — этапом открытия бита. В данной схеме для значения ув, в ко- торое "упаковывается" бит b, используется термин блоб (blob), абонент А назы- вается получателем, а абонент  — отправителем. Схема привязки к биту класси- 
144 Криптотряфические млады м щиты информации в компьютерных системах и свтх ческий пример криптографического примитива, который используется в много- численных прикладных протоколах. Идеальная конструкция блоба должна обеспечивать одновременное выпол- нение двух требований: ® гарантии безоиасиости отиравителя — после выполнения этапа привязки получатель не мох&lt ет самостоятел но определи ь, ка ой ит упако а в бл ° гарантии безоиасности получателя — на этапе открытия бита отправитель может открыть блоб либо только как 0, либо как ] .. Иными словами, цель привязки к биту — позволить абоненту А взять на себя в качестве обязательства значение некоторого бита информации таким спосо- бом, который не позволит абоненту В узнать это значение без помощи А, при этом сам А после привязки к биту не может его изменить. Описанный протокол привязки к биту гарантирует безусловную безопасность отправителя. В то же время безопасность получателя основывается на недока- занном предположении о вычислительной неразрешимости задачи дискретного логарифмирования. Существует другой тип протоколов привязки к биту, в кото- рых безопасность получателя безусловна, а безопасность отправителя основыва- ется на недоказанном предполо>кен и. Учитыв я, то та ая асиммет ия типи для многих типов криптографических протоколов, иногда строятся двойствен- ные протоколы такого рода. 5.5. Протоколы раздеиения секрета [7, 10] 2) D передает абоненту А информационную последовательность rA, абоненту B — информационную последовательность ra и абоненту C — информацион- ную последовательность г~, 3) чтобы прочитать информацию р, абонентам А, В и С необходимо предъявить свои Доли секРета f A, гв и гс и вычислить Р = г, 0+ гв 9 г . Эффективным методом защиты является разделение достуиа (не путать с разграничением docmyna), разрешающее доступ к секретной информации только при одновременном предъявлении своих полномочий участниками ин- формационного взаимодействия, не доверяющих друг другу. Протоколы или схемы разделения секрета (Secret Sharing Scheme) — CPC позволяют распреде- лить секрет между и участниками протокола таким образом, чтобы заранее за- данные разрешенные множества участников могли однозначно восстановить секрет, а неразрешенные — не получали бы никакой информации о возможном значении секрета. Выделенный участник протокола, распределяющий доли (share) секрета, обычно называется дилером. Пусть р — защищаемая информационная последовательность (битовая стро- ка) длиной т. Простейшая схема разделения секрета между тремя абонентами А, В и С имеет следующий вид: 1) дилер D вырабатывает две случайные битовые строки fA и гв длиной 1&g ; и числяет г = p0+rA 0+r„; 
nasa 5. Криптогрлфичкскик протоколы 145 Шаги 1 и 2 — это стадия распределения долей секрета. Шаг 3 — стадия восста- новления секрета. Каждая доля секрета сама по себе не имеет никакого смысла, но, если их сложить, смысл исходной информационной последовательности полностью восстанавливается. При правильной реализации приведенный прото- кол полностью безопасен, так как для закрытия информации применяется абсо- лютно стойкий шифр, описанный в гл. 1, и поэтому никакие вычисления не смо- гут помочь при попытке определить секрет по одной или двум его частям. Ана- логичную схему можно легко реализовать для любого числа участников. Рассмотрим схему разделения доступа Э. Шамира. Пусть n — число участни- ков протокола, GF(p) — конечное поле из р элементов, р — простое, р & t; п. Пос вим в соответствие каждому г-му участнику ненулевой элемент поля и;, г = 1,п, и положим оо — — О. Схема разделения доступа Шамира: 1. Стадия распределения долей секрета sp. Дилер CPC вырабатывает t — 1 неза- висимых равномерно распределенных на GF(p) случайных чисел у,, j = 1, (t — 1), и посылает каждому i-му участнику соответствующее ему значе- ние s; =Да;) многочлена f(x) = у, 1х' ' + ... + у,х+ Уо, где Yo — — so. 2. Стадия восспгановления секрета. Учитывая, что любой многочлен степени t — 1 однозначно восстанавливаются по его значениям в произвольных t точках, любые t участников могут восстановить многочлен j(x), а значит, найти значе- ние секрета по формуле so — — ЯО). По этой же причине для любых t — 1 участни- ков, любых значений s; и любого секрета sp существует только один соответст- вующий им многочлен, для которого справедливо s; =Ям;) и sp — — ЯО). Схемы подобного типа находят применение при построении пороговых структур доступа и носят название (и, t)-пороговых CPC. Такие схемы, напри- мер, позволяют владельцу некоей секретной информации распределить эту ин- формацию при хранении на и своеобразных ее дубликатов таким образом, что ему для восстановления секрета достаточно получить доступ к любым t из них. При этом никакие t — 1 дубликатов не предоставляют никакой информации об этом секрете. 
ГЛАВА б Контроль целостности информации 6.1. Аутентичность. Задача аутентификации информации В АСОД помимо обеспечения секретности информации необходимо также решать не менее важную задачу аутентификации обрабатываемых массивов данных. Информация может считаться аутенпгичной, когда потребитель имеет гарантии, во-первых, целостности информации и, во-вторых, ее авторства. Иногда ошибочно считается, что задача аутентификации решается простым шифрованием. На первый взгляд кажется, что это действительно так. В зашиф- рованный массив данных трудно внести какие-то осмысленные изменения, по- тому что с вероятностью, близкой к единице, факты искажения становятся оче- видными после расшифрования, например вместо текста на русском языке появ- ляется бессмысленный набор символов. Наконец, для классических криптоси- стем только пользователи, обладающие секретным ключом, могут зашифровать сообщение, и значит, получатель, если он принял сообщение, зашифрованное на его секретном ключе, может быть уверен в его авторстве. На самом деле приведенные рассуждения ошибочны. Искажения, внесенные в зашифрованные данные, становятся очевидными после расшифрования только в случае большой избыточности исходных данных. Эта избыточность имеет ме- сто лишь в некоторых частных случаях, например когда исходная информация является текстом на естественном или искусственном языке. В общем случае требование избыточности данных может не выполняться, а это означает, что по- сле расшифрования модифицированных данных они по-прежнему могут подда- ваться интерпретации. Таким образом, свойства АСОД, обеспечивающие сек- ретность и подлинность информации, в общем случае могут не совпадать, т. е. секретность и аутентичноспгь есть различные свойства криптосиспгем. При использовании симметричной криптосистемы факт успешного расшифрования данных, зашифрованных на секретном ключе, может подтвердить их авторство лишь для самого получателя. Третий участник информационного обмена, ар- битр, при возникновении споров не сможет сделать однозначного вывода об ав- торстве информационного массива, так как его автором может быть каждый из обладателей секретного ключа, а их, как минимум, двое [14]. 
Гллвл 6. Контроль целостности информлции 147 6.2. Имитозащита информации. Контроль целостности потока сообщений На всех этапах своего жизненного цикла информация может подвергаться случайным и умышленным разрушающим воздействиям. Для обнару>ке ия с чайных искажений информации применяются корректирующие коды, которые в некоторых случаях позволяют не только зафиксировать факт наличия искаже- ний информации, но и локализовать и исправить эти искажения. Умышленные деструктивные воздействия чаще всего имеют место при хранении информации в памяти компьютера и при ее передаче по каналам связи. При этом полностью исключить возможность несанкционированных изменений в массивах данных не представляется возможным. Поэтому крайне ва> но операти но обнаруж такие изменения, так как в этом случае ущерб, нанесенный законным пользова- телям, будет минимальным. Целью противника, навязывающего ложную ин- формацию, является выдача ее за подлинную, поэтому своевременная фиксация факта наличия искажений в массиве данных сводит на нет все усилия злоумыш- ленника. Таким образом, под гтитозаигитой понимагопг пе исключение возмолс- носпги несанкггионированных изменений информаг~ии, а совокупносгпь методов, позволяющих достоверно зафиксировать их факты, еаги они и тгели месггго [14]. Для обнаружения искажений в распоряжении законного пользователя (напри- мер, получателя информации при ее передаче) должна быть некая процедура про- верки Т(р), дающая на выходе 1, если в массиве данных р отсутствуют искаже- ния, или О, если такие искажения имеют место. Для ограничения возможностей противника по подбору информационной последовательности р' (р'е р), где р — правильная последовательность (без искажений), такой, что T(p') =1, иде- альная процедура такой проверки должна обладать следующими свойствами [14]: ° невозмолсггоспгь найти такое сообщение р способом более эффективным, чем полный перебор по множеству допуспггтмых значений р (такая возмож- ность в распоряжении противника имеется всегда); верояпгность успешно пройти проверку у случайно выбраггггого сообщеиггя р не должгга превышать заранее успгановленного значения. Учитывая, что в общем случае все возможные значения р могут являться до- пустимыми, второе требование требует внесения избыточноспги в защищаемый массив данных. При этом чем больше разница N между размером преобразован- ного избыточного р и размером исходного р массивов, тем меньше вероят- ность принять искаженные данные за подлинные — эта вероятность равна 2 ~. На рис. 6.1 показаны некоторые возможные варианты внесения такой избы- точности. В роли неповторяющегося блока данных nrb могут выступать метка времени, порядковый номер сообщения и т. п. В роли контрольного кода могут выступать имитоприставка или электронная подпись (signature). Имитопристав- кой принято называть контрольный код, который формируется и проверяется с помощью одного и того же секретного ключа [30]. 
148 Криптографичксиик методы защиты информации в KQMnbloTEpHblx cHcTEMAx и сетях C Рис. 6.1. Схемы контроля целостности: а — с использованием зашифрования; 6 — с формированием контрольного кода; в — с формированием контрольного кода и зашифрованием ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
l49 nasA 6. Контроль целостности информации Использование блока nrb позволяет контролировать целостность потока со- общений, защищая от иовтора, задержки, переупорядочения или их утрагггы. При использовании в качестве nrb порядкового номера получатель, получив (г + 1)-е сообщение, проверяет равенство nrb;, г — — nrb; + 1, т. е. что его номер на единицу больше номера предыдущего г-го сообщения. При использовании в ка- честве nrb метки времени получатель контролирует, чтобы времена отправки и приема сообщений соответствовали друг другу с учетом задержки в канале свя- зи и рмности показаний часов отправителя и получателя. Целостность потока сообщений можно также контролировать, используя зашифрование со сцепле- нием сообщений (рис. 6.2) [30]. Шифрование (i 1)-го сообщения Шифрование (i+ 1)-го сообщения Рис. 6.2. Контроль целостности потока сообщений Рассмотрим схему на рис. 6.1, б. Самый естественный способ преобразования информации с внесением избыточности — это добавление к исходным данным контрольного кода s фиксированной разрядности N, вычисляемого как некото- рая функция от этих данных: р =(р,~) =(р,r(r)), ° =гт'. В этой ситуации выделение исходных данных из преобразованного массива р суть простое отбрасывание контрольного кода s. Проверка же целостности за- ключается в вычислении для содержательной части р полученного массива данных контрольного кода s'= =f(p ) и сравнении его с переданным значением s. Если они совпадают, сообщение считается подлинным, в противном случае— ЛОЖНЫМ: 1, если s = /(р'); О, если» /(р ). 
150 КриптографиvEcKHE METQAbl мщиты информации в KQMllbloTEpHblx cNcTEMAx и саттх Функция f формирования контрольного кода должна удовлетворять следую- щим требованиям: она должна быпгь вычислительно необратггмой, m е. подобрать массив дан- ных под заданный контрольный код можно только ггутем полного перебора по пространству возиожных значений р; тг у противника должна отсутствовать возможность сформировать ложный массив даггных гили ложное сообщение) m' и снабдить его корректно вычис- ленным контрольным кодом s = f(р'). Второе свойство можно обеспечить двумя способами: либо сделать функцию /зависимой QT некоторого секретного параметра (ключа), либо пересылать кон- трольный код отдельно от защищаемых данных. Простейшим примером кода s является контрольная сумма блоков массива данных. Например, если Р = Pi Р» "Pi'"P»i ТО s = f (р) = g р,. mod 2" где и — разрядность блоков. Однако такое преобразование непригодно для ими- тозащиты, так как контрольная сумма не зависит от взаимного расположения блоков, а, самое главное, соответствующее преобразование не является крипто- графическим. Процедура подбора данных под заданную контрольную комбина- цию чрезвычайно проста. Пусть некий массив данных Р— Р~Р." Р( "P]n имеет контрольную сумму s. Тогда для внесения необнаруживаемых искажений противнику достаточно дополнить произвольный ложный массив ° еер / ееер / ееер / е~у / еды / Р Р1 Р') ° ° еР'е ° еР еще одним блоком т р,„„=s р, иго /=1 6.3. CRC-код Идеальным средством защиты информации от случайных искажений являют- ся CRC-коды (cyclic redundancy code). Достоинствами CRC-кодов являются: высокая достоверность обнаружения искажений, доля обнаруживаемых ис- кажений не зависит от длины массива данных и составляет 1 — 2, где N— разрядность контрольного кода; ® зависимость контрольного кода не только ото всех битов анализируемой ин- формационной последовательности, но и от их взаимного расположения; 
nasa 6. Контроль целостности информации ° высокое быстродействие, связанное с получением контрольного кода в ре- альном масштабе времени; ® простота аппаратной реализации и удобство интегрального исполнения; простота программной реализации. К сожалению, простое условие пропуска искажений делает CRC-коды прин- ципиально непригодными для защиты от умышленных искажений информации. Сущность процесса контроля целостности с использованием CRC-кодов за- ключается в следующем. Генератор CRC-кода инициализируется фиксирован- ным начальным значением. Чаще всего в качестве начального заполнения ис- пользуется либо код "все 0", либо код "все 1". Учитывая, что от начального со- стояния генератора достоверность метода не зависит, все дальнейшие рассужде- ния выполняются в предположении, что исходное состояние устройства нуле- вое. Анализируемая двоичная последовательность преобразуется в короткий (обычно 16- или 32-разрядный) двоичный код — CRC-код. Значение полученного CRC-кода сравнивается с эталонным значением, полученным заранее для после- довательности без искажений. По результатам сравнения делается вывод о на- личии или отсутствии искажений в анализируемой последовательности. CRC-код часто называют сигнатурой (signature). Однако второй термин сле- дует признать неудачным, создающим ненужную путаницу, так как термин signature может означать также и электронную подпись. Процесс получения CRC-кода можно рассматривать как процедуру кало> ния псевдослучайной последовательности, формируемой LFSR, на входную ана- лизируемую последовательность (рис. 6.3) Рассмотрим схему генератора CRC-кода, показанную на рис. 6.3, б. Входной анализируемой двоичной последовательности А = apaiaq...a,...a„, 1, а, E 10, 1},t = О, (m — 1), где m — длина последовательности, можно поставить в соответствие многочлен А(х) степени (и — 1) A(x) = asx ' + ... + а,х"' ' ' + ... + а„.;к+ a„,,. Тогда процесс получения CRC-кода эквивалентен делению многочлена A(x) входной последовательности на характеристический многочлен тр(х) генератора CRC-кода. Если А(х) = cp(x)Q(x) + R(x), где Q(x) и R(x) — соответственно частное и остаток, то коэффициенты многочле- на Q(x) появляются на выходе триггера q~ ~, а коэффициенты многочлена R(x) остаются в регистре генератора после прохождения всей последовательности А. Иначе говоря, CRC-код s в точности равен коду остатка R, т. е. ь = R, а s(x) = R(x). 
152 Криптографические методы защиты информации в KQMllbloTEpHblx системАх. и сетях R = 5' 2 с х~О + хв + ~Ф + х~ + х Э;. ' О+ &g ;Р + Q(x) @ '~, )ri + Ж + x' с k х... + 0 + х ® '~7 + '~ + ~3 R(x) Работа генератора CRC-кода описывается системой линейных уравнений q,(t+ 1) = n„q„,(t)Q+ а,; ц(t+1)= a„,q,,(t)O+q,.,(t),i = 1, N — 1, Рис. 6.3. Процесс получения CRC-кода: а, 6, в — 3 варианта схемы генератора CRC-кода, соответствующего образующему многочлену Ф(х) = x + х'+ 1; г — деление многочлена входной последовательности на характеристический многочлен генератора CRC-кода 
ГАЕВА 6. KQHTpohb QEAocTHocTN информации где д(~) и q,(t + 1) — состояние j-го триггера соответственно в моменты времени г и t + 1, t =0,ò, ~ =О, N — 1. В матричной форме уравнение работы CRC-гене- ратора имеет вид q,(~+ 1) q,(~+ 1) Чо (~) q,(~) 0 0 ... 0 а„ 1 0 ... 0 а а, О + Э ° ° ° ° ° q„-z (t +1 q„,(~+ 1) Чи-г (~ q„,(t) 0 0 ... 0 а 0 0 ... 1 а, О О q(t+ 1) = T, q(t) Ю a(t), ИЛИ q,(t+ 1) q,(~+ 1) qp(m) q, (m) а, О q(t) = , q(t+1) = ,s = q(m) = ,a(t) = q~ „(l+1 q„,(t+ 1) где ° ° ° qw-г (~ q„, (~) q„ „(m qy (m) 0 0 А = apa~...а„1 суть анализируемая последовательность,  — bpbl."b., I суть правильная последовательность (без искажений); е — последовательность, полученная в результате сложения по модулю 2 соответствующих элементов последовательностей А и В, т. е. для любого элемента последовательности е справедливо е, =а, ЮЬ,, г =0,(т — 1). Единичные биты последовательности е соответствуют искаженным битам последовательности В, поэтому последовательность е логично назвать последо- вательностью или вектором ошибок. При отсутствии искажений Vi = О, (т — 1), е; = О. Пусть А(х), В(х) и е(х) — многочлены; s&g ;, a и s, Ђ” CRC-к ды соответстве последовательностей А, В и е. Искажения в последовательности А будут пропу- щены, если s& t; Ђ” Ђ” >. И е м А В 0+ е, р ч м а О, пр меняя п инцип су зиции, получаем равенство зд = зв ® з. Таким образом, для CRC-генератора справедлив принцип суиериозиции, кото- рый гласит: реакция линейного устройства на сумму двух входных воздействий равна сумме реакций на калсдое воздействие в отдельности. Пусть 
154 Крипгографи IEcKNE METQAbl мщиты ииформдции в KQMllbloTEpHblx cllcTEMAx и сегйх Таким образом, необходимым и достаточным условием ггропусксс искажений является равенство ь, = 0, которое имеет место тогда и только тогда, когда мно- гочлен e(x) нацело делится на многочлен <р( Пусть N — разрядность CRC-кода и e a 0, т. е. в анализируемой последова- тельности длиной т есть искажения. Рассмотрим достоверность метода, т. е. ус- ловия, при которых s,. = О. При m ( N контрольный код не может быть нулевым, так как первая единица, попавшая в регистр генератора, не успевает выйти из него до конца формирования CRC-кода и не может быть уничтожена из-за сло- жения с битом обратной связи. Таким образом, при длине входной последова- тельности меньшей или равной разрядности CRC-кода, для с& t О справедл s, ~0, т. е. число необнаруживаемых искажений N,. = О. При т = N + 1, когда степень многочлена е(х) меньше или равна N, существует только один много- член е(х), нацело делящийся на многочлен cp(x), это е(х) = cp(x), а значит, в этом случае N,. = 1. При т = N + 2 существует уже 3 многочлена е(х), степени мень- шей или равной N + 1, нацело делящиеся на многочлен cp(x), это е(х) = cp(x), е(х) = ср(х) х, е(х) = cp(x) (х + 1), а значит, N„= 3. В общем случае при т ) N спра- ведливо ,, =2" "— 1. Учитывая, что общее число искажений в последовательности длиной m равно 2 — 1, для доли Рг обнаруживаемых искажений получаем соотношение ni-N 1 2"' — 1 На практике m» N, а значит, 2"' »» 1, т-N =1— - 2 " (при И= 16, К,г =0,99998). Таким образом, доля обнаруживаемых искажений не зависит от длины анали- зируемой последовательности, а определяется лишь разрядностью контрольного кода. Все сказанное относительно генератора, показанного на рис. 6.3, б; справед- ливо и для двух других на том &gt ке рисун е, ак ак ля в ех т ех генерато при е е О справедливо утверждение: s„= О тогда и ггголько гггогда, когда е(х) на- цело делится на cp(x). Все 3 схемы обеспечивают одинаковую достоверность контроля, тем не менее предпочтение следует отдать третьей из них (в), как обеспечивающей наиболее интенсивное "перемешивание" ошибок. Рассмотрим процесс получения CRC-кода последовательности ошибок е. Каждый единич- ный бит этой последовательности, поступив на вход первых двух CRC-генераторов, искажает состояние только одного, первого, разряда регистра. В третьем генераторе, в котором CRC-код ггоследовательностгг А равен остатку от деления многочлена х"А(х) на cp(x), в аналогичной ситуации искажаются сразу гг ь разрядов, где гг ь — количество отводов обратной связи. Уравнение работы многоканального CRC-генератора в общем случае можно записать следующим образом: q(t + 1) = 7" q(t) 0+ G a(t), 
nasa 6. Контроль целостности информации где "(t) а, (t) суть N-разрядный двоичный набор, поступающий на входы второй ступени; вторая ступень — N-входной LFSR, уравнение работы которого имеет вид q(t+ 1) = T' q(t) 9 а'(t). Пример 6.1. CRC-генератор, обеспечивающий получение контрольного кода, равного остатку от деления многочлена х А(х) на многочлен .8 cp(x) = х + х + х + х + 1, где А(х) — многочлен входной последовательности А = asajaq...а,...а 1, а,е (О, 1),t =0,(ò — 1), покыан на рис. 6.4. Дня построения двухканального (n = 2) генератора найдем G и Т,: 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 суть обрабатываемый в одном такте двоичный набор, Т вЂ” квадратная матрица порядка N вида Т, (для рис. 6.3, а) или Tz (для рис. 6.3, б и в). Матрица G размером n x N имеет вид G = Jq (n)...q (2)q (1)~, где q (1), q (2), ..., q (n) — последовательные состояния одноканального CRC-генератора при тех же Т и тв(х) при поступлении на его вход последова- тельности 1 0 0 ... О, соответствующей многочлену x" '. Многоканальный CRC-генератор (при n & t; 1) мо но представ т в в де дв ступенчатой структуры: первая ступень — преобразователь кода, уравнение ко- торого имеет вид а (t) = G пЯ, где 
15б КРиптогРАфиvEcKNE METQAbl здЩиты инфоРмаЦии в KQMITbloTEPHblx cNcTEMAx u cETTTx Уравнения работы блока G имеют вид: а г(К) = a'6(т) = а в(т) = т~о(т); aО(т) = aЗ(т) = a5(т) = т~т(т)~ а l(t) = ap(t) Ю al(t). Схема генератора показана на рис. 6.5. Рис. 6.4. CRC-генератор, соответствующий характеристическому многочлену тр(х)= х +х +х +х+1 Рис. 6.5. Двухканальный CRC-генератор, соответствующий характеристическому многочлену (p(x)= x +х +х +х+1 
157 AABA 6. Контроль целостности информации На рис. 6.6 показана схема CRC-генератора при числе входов, превышающем разрядность CRC-генератора, т. е. при n & t № Пер ая ступ нь генерат р в э случае выполняет функцию блока иространснтвенного сжатия — БПС, вторая ступень генератора — функцию блока временного сжатия — БВС информации. Q(m) -s Рис. 6.6. Многоканальный CRC-генератор Пример 6.2. На рис. 6.7 показаны 3 схемы генератора CRC-кодов троичной информации. Контролируемая троичная последовательность поступает на вход шифратора С, преобразующего ее в двоична-троичную, которая и поступает на входы CRC-генератора. Рис. 6.7. Генератор CRC-кодов троичной информации: а, б, в — варианты схемы; г — возможная логика работы шифратора С 
158 КриптогрАфи IEcKHE методы зАщиты информАции в KQMllbloTEpHblx системАх и снях В заключение сформулируем способы "обмана" CRC-кода, т. е. способы вне- сения необнаруживаемых искажений информации. Пусть задан массив данных р. CRC-код s„- искаженного массива р' будет равен CRC-коду s„- массива р в следующих случаях: 1) искаженный массив получается путем добавления к истодггому массиву р информационной последовательносггги, имеющей нулевой CRC-код; 2) искаженный массив получается путем исключения из исходного массива р информационной последовательности, имеющей нулевой СЛС-код; 3) искаженный массив получается пупгем замены фрагмента исходного масси- ва р на другой, имеющий такое лсе значение СЯС-кода; 4) искалсениый массив получается путем иггвергггггрованггя битов исходного массива р таким образом, чтооы соответствующий лгногочлен ошибок е(х) делился нацело на характеристический мггогочлен <р х) генерат ра CRC-ко 6.4. Криптографические методы контроля целостности Мо> но выдел ть ва основ ых криптографичес их подх д к реше ию за чи защиты информации от несанкционированных изменений данных: формирование с помощью функции зашифрования Е» блочного шифра кода аутентификации сообщений — MAC (Message Authentication Code); ° формирование с помощью необратимой функции сжатия (xeut-фуггкггии) ин- формации кода обнаружения мсiнипуляггий с даннылт — MDC (Manipulation Detection Code). В табл. б. l приведена сравнительная характеристика указанных двух подхо- дов [14]. Таблица 6.1. Сравнительная характеристика МАСи MDC МАС МОС Параметр Хеш- ункция h(x) Используемое преобразование Функция зашифрования Е» блочного ши ра Секретный ключ 1 Отсутствует Секретная информация Нет Присутствует Возможность для противника вычислить контрольный код Отдельно от защищаемых дан- ных Вместе с защищаемыми данными Хранение и передача кон- трольного кода Необходим аутентичный канал для передачи контрольного кода Требует предварительного распределения ключей ополнительные условия Области использования Защита при разовой передаче данных, контроль целостности хранимой ин ормации Защита при передаче данных 
]59 Глава 6. Контроль целостности информации 6.5. Код аутентификации сообщений Формирование кода МАС с использованием функции зашифрования блочно- го шифра официально или полуофициально закреплено во многих государст- венных стандартах шифрования. Имитоприставка ГОСТ 28147 — 89 является классическим примером кода MAC. Код аутентификации сообщений может формироваться в режимах CBC или CFB, обеспечивающих зависимость послед- него блока шифротекста от всех блоков открытого текста. В случае использова- ния преобразования Е~ для выработки контрольного кода требования к нему не- сколько отличаются от требований при его использовании для зашифрования: во-первых, не требуется свойство обратимости, во-вторых, его криптостойкость может быть снижена (например, за счет уменьшения числа раундов шифрования как в ГОСТ 28147 — 89). Действительно, в случае выработки кода MAC преобра- зование всегда выполняется в одну сторону, при этом в распоряжении против- ника есть только зависящий от всех блоков открытого текста контрольный код, вто время как при зашифровании у него имеется набор блоков шифротекста, полученных с использованием одного секретного ключа. Схема алгоритма фор- мирования МАС показана на рис. 6.8. 6.6. Код обнаружения манипуляций с данными 1) массив данных р разбивается на блоки фиксированного размера, равного размеру ключа ~Ц используемого блочного шифра, т. е. Р = PiPzP&g ;" I p ~=~ р, Н р, I= ~ Р., I=1k I o(l Ð. I-(lk I' 2) если последний блок р неполный, он дополняется каким-либо образом до нужного размера ~Ц; 3) хеш-образ сообщения вычисляется следующим образом: s = Ь(р) = Е„-(...Е„(E; (E--„(s, )))), MDC есть результат действия хеш-функции. Иначе говоря, MDC — это хгш- образ сообщения р, к которому применили хеш-функцию, т. е. s = h(p). Основ- ное требование к хеш-функции: не должно существовать способа определения массива данных р, имеющего заданное значение хеш-образа h(p), отличного от перебора по всему множеству возможных значений р. Наиболее простой способ построения хеш-функции основан на использовании вычислительной необрати- мости относительно ключа k функции зашифрования Ет,. любого блочного шиф- ра. Даже при известных блоках открытого р и закрытого с = Е„(р) текстов ключ k не может быть определен иначе как перебором по множеству всех возможных значений. Итак, схема формирования хеш-образа сообщения р, обладающая га- рантированной стойкостью, равной стойкости используемого шифра, может быть следующей: 
1бО Криптографические методы защиты информации в компьютерных cNcTEMAx u cETAx где яо — синхропосылка, обычно выбирают ьо — — О. Задача подбора массива данных ° ъю/ юлю/ юлю/ ~ ° / ю~ю/ J = P]PgP3 "Pyg под заданный контрольный код s эквивалентна системе уравнений, которую не- обходимо решить для определения ключа для заданных блоков открытого и за- крытого (в режиме простой замены) сообщений. Однако в рассматриваемой си- туации нет необходимости решать всю систему Е„-(so) = si,Ep (si) = s„,Å-„(s ) = s3,..., Е-, (s„,,) = s; достаточно решить только одно уравнение Е„- (s,,) = s, относительно р,'., остальные блоки массива р могут быть произвольными. Но и эта задача в случае использования надежной функции Е» вычислительно нераз- решима. К сожалению, приведенная схема формирования MDC не учитывает наличия так называемых побочных ключей шифра. Если для k' e k справедливо Е, (р,)= Е,. (р,), где р, — некоторый блок открытого текста, то такой код k' и является побочным ключом, т. е. ключом, дающим при зашифровании блока р,точно такой же ре- зультат, что и истинный ключ k. Обнаружение противником побочного ключа при дешифровании сообщения не является особым успехом, так как с вероятно- стью, близкой к единице, на этом найденном побочном ключе он не сможет пра- вильно расшифровать другие блоки закрытого текста, учитывая что для различ- ных блоков побочные ключи в общем случае также различны. В случае выра- ботки кода MDC ситуация прямо противополо>к а: обнаруже ие побочн ключа означает, что противник нашел такой ложный блок данных, использова- ние которого не изменяет контрольного кода [14]. Для уменьшения вероятности навязывания ложных данных в результате на- хождения побочных ключей при преобразовании применяются не сами блоки исходного сообщения, а результат их расширения по некоторому алгоритму. Под расширением понимается процедура получения блока данных большего размера из блока данных меньшего размера. Например, для криптоалгоритма, в котором размер ключа равен 256 битам, возможна следующая схема расширения 128-битового блока в 256-битовый: исходныи блок: р, = (b,b,b3b4bsb6b7Üßb9bùb! ibi~p13bi4b„bi6) расшг~репны 74 блок: Ext( pÝ = (bÀb3b4bsb6b7ÌÀîbi ibi 2bi 3bi4bi sbi 6bib4b7bi îbi 3bi6b3b6bÀ ~bi 5bãbsbübi А4) где b; — байты блока данных [14]. Схема алгоритма формирования MDC (хеш-образа сообщения р) показана на рис. 6.9. 
nasA 6. Контроль целостности информлции Рис. 6.8. Алгоритм формирования кода аутентификации сообщений Рис. 6.9. Алгоритм формирования хеш-образа массива данных 
ГЛАВА 7 Методы аутентификации информации 7.1. Идентификация, аутентификация и авторизация Чтобы исключить работу с системой незаконных пользователей, необходима процедура распознавания системой каждого законного пользователя (или групп пользователей). Для этого в защищенном месте система обязана хранить инфор- мацию, по которой можно опознать пользователя, а пользователь при входе в систему, при выполнении определенных действий, при доступе к ресурсам обя- зан себя идентифицировать, т. е. указать идентификатор, присвоенный ему в данной системе. Получив идентификатор, система проводит его аутентифика- ~ию, т. е. проверяет его содержательность (подлинность) — принадлежность к множеству идентификаторов. Если бы идентификация не дополнялась аутенти- фикацией, то сама идентификация теряла бы всякий смысл. Обычно устанавлива- ется ограничение на число попыток предъявления некорректного идентификатора. Аутентификация пользователя может быть основана на следующих принципах: на предъявлении пользователем пароля (рис. 7.1); ° на предъявлении пользователем доказательств, что он обладает секретной ключевой информацией; ° на ответах на некоторые тестовые вопросы; ° на предъявлении пользователем некоторых неизменных признаков, нераз- рывно связанных с ним; на предоставлении доказательств того, что он находится в определенном мес- те в определенное время; ° на установлении подлинности пользователя некоторой третьей, доверенной стороной. Процедуры аутентификации должны быть устойчивы к подлогу, иодоору и иодделке. После распознавания пользователя система должна выяснить, какие права предоставлены этому пользователю, какую информацию он может использовать и каким образом (читать, записывать, модифицировать или удалять), какие про- граммы может выполнять, какие ресурсы ему доступны, а также другие вопросы подобного рода. Этот процесс называется авторизациег~. Таким образом, вход пользователя в систему состоит из идентификации, аутентификации и авториза- ции. В процессе дальнейшей работы иногда может появиться необходимость дополнительной авторизации в отношении каких-либо действий. 
Гмнд 7. Методы аутентификации информации ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Э ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 163 Рис. 7.1. Процессы идентификации и аутентификации Существуют различные механизмы реализации разграничения доступа. На- пример, каждому ресурсу (или компоненту) системы может быть поставлен в соответствие список управления доступом, в котором указаны идентификато- ры всех пользователей, которым разрешен доступ к данному ресурсу, а также определено, какой именно доступ разрешен. При обращении пользователя к конкретному ресурсу система проверяет наличие у данного ресурса списка управления доступом и, если он существует, проверяет, разрешено ли этому пользователю работать с данным ресурсом в запрошенном режиме. Другим примером реализации механизма авторизации пользователя является профиль пользователя — список, ставящий в соответствие всем идентификаторам пользо- вателей перечень объектов, к которым разрешен доступ данному пользователю, с указанием типа доступа. Может быть организована системная структура дан- ных, так называемая матрица доступа, которая представляет собой таблицу, столбцы которой соответствуют идентификаторам всех системных ресурсов, а строки — идентификаторам всех зарегистрированных пользователей. На пере- сечении i-го столбца и ~'-й строки таблицы администратор системы указывает разрешенный тип доступа владельца i-го идентификатора к~-му ресурсу. Доступ к механизмам авторизации должны иметь только специальные сис- темные программы, обеспечивающие безопасность системы, а также строго ог- раниченный круг пользователей, отвечающих за безопасность системы. Рас- сматриваемые механизмы должны быть тщательно защищены от случайного 
1б4 Крипгогрдфичкскиа методы защиты информации в компьютерных системах и снях или преднамеренного доступа неавторизованных пользователей. Многие атаки на информационные системы нацелены именно на вывод из строя или обход средств разграничения доступа. Аналогичные действия осуществляются в системе и при аутентификации других субъектов взаимодействия (>грепгенденто ), напри ер приклад ых п цессов или программ, с системой (верификатором). В отличие от аутентификации субъекпга взаимодействия, процедура аутен- пгификации объекта, устанавливая подлинность электронной почты, банковско- го счета и т. п., проверяет факт принадлежности данного объекта владельцу ука- занного идентификатора. 7.2. Аутентификация субъекта Цель субъекта взаимодействия при аутентификации — доказать верификатору подлинность предъявленного идентификатора. Классическим средством аутентификации субъекта являются парольные схе- мы. При этом для устранения последствий несанкционированного доступа про- тивника к информации, хранящейся в памяти компьютера верификатора, пере- даваться мо> ет не ам пар ль pw (passwor ) а го хеш-об а = h( w) (р с. 7. Рис. 7.2. Простейшая парольная схема аутентификации (вариант N'1) Функция h(pw) в этой ситуации может быть определена как h(pw) = Е „(lD), если длина пароля и длина ключа k функции зашифрования Е& t; одинако ы, ли 
ГЛАВА 7. МЕТОДЫ АЪТЕНТ11фИКА!~ИИ ИНфО[ЭМАЦИИ 1б5 h(pw) = Е„„щ(И), если длина пароля меньше длины ключа. Верификатор заранее вычисляет значе- ния h(pw) и для каждого идентификатора ID хранит значения q. Претендент, про- шедший идентификацию, вводит пароль ри ', верификатор, получив q'= Й(ри '), проверяет равенство q = q' и при его выполнении заключает, что был введен пра- вильный пароль, и разрешает доступ. Противник, даже узнав значение q, не смо- жет определить pw в силу вычислительной необратимости функции Ь(ри ). Однако рассмотренная схема не защищает от противника, который может пе- редавать информацию, подключаясь непосредственно к линии связи. В этой си- туации может помочь схема, показанная на рис. 7.3, в которой процедура вычис- ления q' = h(pw) возложена на верификатора. Рис. 7.3. Простейшая парольная схема аутентификации (вариант й 2) Обе рассмотренные схемы не защищают от атаки перехвата и noemopa, ко- гда противник записывает информацию, передаваемую претендентом, и органи- зует ее повторение для входа в систему. Для устранения последствий перехвата информации, передаваемой претендентом, или несанкционированного доступа противника к информации, хранящейся в памяти компьютера верификатора, может быть рекомендована схема, показанная на рис. 7.4, предполагающая ис- пользование двух хеш-функций h1 и й., причем результат работы второй из них зависит от неповторяющегося блока данных nrb. 
Криптографические методы защиты информации в компьютерных системАх и сетйх 1бб Рис. 7.4. Паропьная схема аутентификации, защищенная от перехвата и повтора Аутентификация субъекта может быть как односторонней, так и взаимной. В первом случае процедуру аутентификации проходит один субъект, во вто- poM — аутентифицируют друг друга два взаимодействующих субъекта, например связывающиеся между собой по линиям связи. Взаимная аутентификация не ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Ì ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
Гмм 7. мноды аутентификации информдции 1б7 ~сть простое объединение двух сеансов односторонней аутентификации, так как и последнем случае противник легко может осуществить атаку перехвата и по- втора, выдавая себя за верификатора перед претендентом и за претендента перед верификатором. Рис. 7.5. Механизм запрос-ответ и процедура рукопожатие Проверка подлинности предполагает применение неповторяющихся блоков данных, в качестве которых используются временные метки, механизм за- прос-ответ и процедура рукоиожитие (handshake). Использование меток вре- мени позволяет регистрировать время отправки конкретного сообщения, что да- ет возможность получателю определить, насколько "устарело" пришедшее со- общение, а значит, защититься от повтора. При использовании меток времени возникает проблема доиустимого времени задержки, связанная, во-первых, 
l68 Кри~ моголы защиты информлции в компььютерных систамлх и сетях с невозмо>кнос ью мгновен ой перед чи сообщен я а во-втор х с невозмо ностью абсолютной синхронизации хода часов получателя и отправителя. Ме- ханизм запрос-г>пг ет предполаг ет включе ие пользовате е в сообще для пользователя B запроса x„— некоторого случайного числа. Перед ответом пользователь В обязан выполнить над числом хл некоторую операцию, например вычислить хеш-образ h(x„). Получив ответ с правильным результатом вычисле- ний, пользователь А может быть уверен, что B — подлинный. Процедура руко- пожаг> ие заключае ся во взаим ой прове ке ключ й, используе ых субъект взаимодействия. Последние признают друг друга законными партнерами, если докажут друг другу, что обладают правильными ключами. 7.3. Симметричные методы аутентификации субъекта (тОл 1~-~в}' 2) С, получив сообщение, формирует сеансовый ключ kAg для взаимодействия субъектов А и В и посылает А зашифрованное сообщение ЕлгШ~в ~лв Евг(ггтл ~лв)) содержащее сеансовый ключ для работы с В и шифровку, которая по сути яв- ляется разрешением для А на работу с В; 3) субъект А, расшифровав полученное сообщение, определяет ключ kA& t и р решение Esc(lDA 4в), которое он расшифровать не может, так как не знает ключа Йвг, после этого А отправляет В сообщение (Елв(Шл, хл), E>QI A, 4в содержащее зашифрованный запрос x„и разрешение, полученное от С; 4) В, прочитав шифровку Eâñ(IDA kA~) Аутентификация субъекта может осуществляться с использованием как сим- метричных, так и несимметричных криптоалгоритмов. В системах с большим числом пользователей применение симметричных методов требует введения в сеанс связи доверенной стороны, с которой разделяют секретные ключи все пользователи системы. На рис. 7.6 показана схема процедуры взаимной аутен- тификации субъектов А и В с использованием третьей, доверенной стороны— субъекта С, обладающего секретными ключами йлс и k~L- соответственно для взаимодействия с А и В. Последовательность шагов процедуры следующая: 1) субъект А, который хочет взаимодействовать с субъектом В, посылает С со- общение, содержащее идентификаторы субъектов запрашиваемого взаимо- действия 
169 Гддвд 7. Мноды дутснтификдции информации узнает идентификатор субъекта взаимодействия и сеансовый ключ k» для работы с ним и читает запрос xA., после этого B формирует ответ на запрос h(xA) и отправляет А сообщение EAs(1D~ h(xA)); 5) субъект А, получив сообщение, расшифровывает его и проверяет ответ В; в случае положительного результата проверки процесс аутентификации ус- пешно завершается. бдв(1Рд, x„), 6в (1Рд, Мдв)) Рис. 7.6. Схема симметричной аутентификации с третьей, доверенной стороной 7.4. Схема Kerberos Решение задачи аутентификации в современных информационных системах, представляющих собой совокупность реализованных на различных аппаратно- программных платформах территориально разнесенных компонентов, в соответ- ствии с технологией клиент/сервер заключается в использовании специального сервера аутентификации. В настоящее время на роль фактического стандарта 
I 70 Криптографичгскиг мгтоды защиты информации 8 компьютгрнык систгмак и сктпк сервера аутентификации претендует Kerberos, продукт, разработанный в Масса- чусетском технологическом институте (MIT) в середине 80-х гг. и претерпевший с тех пор ряд принципиальных изменений. Широкому распространению Kerberos способствовало то, что его версия, реализованная в MIT, является сво- бодно распространяемым продуктом. Программные средства, выполняющие ау- тентификацию по схеме Kerberos, разработаны для всех популярных OC. Под- держка службы Kerberos предусмотрена в некоторых современных сетевых OC. Схема Kerberos является типичным примером реализации симметричных мето- дов аутентификации. Система (рис. 7.7) предусматривает взаимодействие между тремя программ- ными компонентами — клиентом С, сервером Kerberos и прикладным сервером S. ПО сервера Kerberos разделено по своим функциям на две части: сервер ау- тентификации — AS (Authentication Server) и сервер выдачи разрешений (бипе- тов) — TGS (Ticket Granting Server). Клиент С вЂ” это компьютер, на котором уста- новлено клиентское ПО, способное участвовать во взаимодействии по протоко- лу Kerberos и на котором зарегистрирован какой-либо пользователь. В некото- рых случаях прикладной сервер может являться клиентом некоторого другого сервера, например сервер печати может пользоваться услугами файлового сер- вера. Сервер S — субъект, предоставляющий ресурсы сетевым клиентам. Клиент С, который хочет обратиться к прикладному серверу для получения его услуг, должен получить разрешение от AS. Разрешение — это зашифрованная информация, которую клиент передает серверу S или серверу TGS. Разрешение позволяет серверу убедиться в подлинности клиента. Все разрешения, кроме первого, клиент получает от сервера TGS. Первое разрешение, разрешение на доступ к самому TGS, клиент получает от сервера AS. Разрешение — это шифров- ка, полученная на секретном ключе, известном только серверу S и серверу Kerberos; поэтому первый, получив разрешение, может быть уверен, что оно по- ступило именно от сервера Kerberos. Разрешения являются многоразовыми, имеющими определенный срок жизни (несколько часов). Когда этот срок исте- кает, клиент должен вновь пройти процедуру аутентификации. При установле- нии каждого соединения используется временная метка, поэтому в сети должна действовать служба единого времени. Необходимость в сервере TGS объясняет- ся стремлением сократить число сообщений, зашифрованных с использованием секретного ключа клиента, которому требуются услуги нескольких серверов. Именно поэтому сервер Kerberos "раздваивается" на сервер AS, с которым кли- ент взаимодействует при помощи секретного ключа kzzs, и сервер TGS, c кото- рым клиент осуществляет дальнейшее взаимодействие при помощи только сеан- совых ключей kcpos. Комирометация сеансового ключа, имеющего очень корот- кое время жизни, — вещь значительно менее опасная, чем раскрытие секретного ключа. 
Гмвц 7. Методы аутвнтификвции информации 171 Рис. 7.7. Схема Kerberos:1 — nc, IDc, 1Ртт' 2 — Ес тоЯстоь 1Ртоь nc, ltc~s). Тсты' Тстт = Едотт(1Рс. 1Ртт. "стоь nc ltcrcs)' 3 — Естт(1Рь 1Ртоь nc tscras) Тстов: Ecs(A(tsc~)) Процесс аутентификации состоит из пяти (односторонняя аутентификация) или шести (взаимная аутентификация) шагов: 1) клиент С посылает серверу аутентификации сообщение, содержащее иденти- фикаторы клиента IDc и требуемого сервера выдачи разрешений IDqcs, отве- чающего за представление соответствующей услуги, а также информацию ттс, предназначенную для идентификации конкретного запроса: время, свой сете- вой адрес и т. и.; 2) сервер аутентификации осуществляет поиск в базе данных Kerberos по иден- тификатору клиента и идентификатору услуги, находит соответствующие ключи keys и k~srcs формирует сеансовый ключ kcras для взаимодействия клиента и сервера выдачи разрешений. После этого сервер AS посылает ответ клиенту. Этот ответ содержит две шифровки. Первая, полученная на секрет- ном ключе клиента kc~s, содер> ит сеансо ый к юч kc ~s ля раб т с сер ром выдачи разрешений, идентификатор последнего IDrcs и срок жизни Itc res разрешения клиенту на работу с сервером TGS. Вторая шифровка, получен- 
172 КриптогpA(f)HvEcKNE методы злтциты информлции в компьютерных системлх и cFTAx ная на ключе kAs jos, — это разрешение Тсг~~ (ticket-granting ticket) клиенту на взаимодействие с сервером TGS. В состав второй шифровки, которую клиент пРочесть не может, так как не знает ключа kAs pcs, входЯт идентификатоРы 1О~ и ID> s, сеансо ый к юч kc o и с ок жи ни эт го разреше ия 1~с.та 3) получив сообщение, клиент расшифровывает первую его половину на ключе kcAS, ni>a~ed& t;~eT o MeT ~ »c. знает сеа совы ключ k то5 сРок жизни шения на работу с сервером TGS. Таким образом, в результате обмена сооб- щениями с сервером AS клиент получает разрешение на работу с сервером TGS. Затем клиент посылает запрос серверу выдачи разрешений. Сообщение для сервера TGS включает в себя две шифровки. Первая, полученная на сеан- совом ключе kcras. включает в себя идентификаторы !О~ и !О~, идентифика- тор запроса п~ и временную метку tsczos. Вторая — это "запечатанное" клю- чом Клктси разрешение Тг,тс~', 4) сервер выдачи разрешений расшифровывает разрешение Tcros, узнает сеан- совый ключ kczos, с помощью которого читает первую часть пришедшего со- общения, и проверяет идентификатор п~ и временную метку tscrzs. Удосто- верившись в подлинности клиента, сервер TGS вырабатывает сеансовый ключ kcs для взаимодействия клиента C и сервера S. На знании этого ключа и будет основываться в будущем взаимная аутентификация C u S. После этого отправляет сообщение клиенту, содержащее зашифрованные на ключе kcros сеансовый ключ и срок жизни разрешения клиенту на работу с сервером, а также само это разрешение Т~5, зашифрованное на секретном ключе ks < 5) клиент, получив сообщение, расшифровывает первую его часть, из которой извлекает сеансовый ключ Йгд для работы с сервером S и срок жизни разре- шения на взаимодействие с сервером S. Само "запечатанное" ключом kc&lt разрешение Т~~ клиент прочесть не может. Таким образом, в результате об- мена с сервером выдачи разрешений клиент получает разрешение на даль- нейшее взаимодействие уже с прикладным сервером. Наконец, клиент посы- лает серверу S сообщение, содержащее зашифрованные на сеансовом ключе kcs свой идентификатор IDc, идентификатор»ñ и временную метку tscs, а также разрешение Т~~, полученное от сервера TGS; 6) приняв сообщение от клиента и "распечатав" разрешение Tcs, целевой сервер узнает сеансовый ключ kcs и с его помощью проводит аутентификацию кли- ента, проверяя идентификатор пг и временную метку tscs. Ответ сервера кли- енту посылается в том случае, когда требуется взаимная аутентификация. От- вет прикладного сервера в этом случае содержит зашифрованный на ключе kcs результат преобразования h(tscs) метки tscs. Сервер Kerberos имеет доступ к базе данных, содержащей идентификаторы и секретные ключи субъектов. Запись каждого пользователя и каждого приклад- ного сервера в базе данных Kerberos содержит следующие компоненты: е идентификатор субъекта; секретный ключ субъекта; 
17) nasa 7. Методы Аутентификдции информдции дату истечения срока действия секретного ключа; максимальный срок жизни разрешений, выдаваемых субъекту; номер версии секретного ключа субъекта; © дату последней модификации записи; е другую служебную информацию. 7.5. Несимметричные методы аутентификации субъекта Использование криптосистем с открытым ключом позволяет отказаться от серверов аутентификации, однако в системе должен существовать сервер, вы- дающий сертификаты на используемые субъектами взаимодействия открытые ключи. Сертификатом принято называть электронный документ, удостоверяю- щий принадле>кно ть данн го открыт го кл ча данн му субъек у, ин че гово аутентичность ключа. 7.5.1. Протокол Диффи-Хэппмана Несимметричные методы аутентификации могут быть основаны на использо- вании механизма электронной подписи. Классическим примером несимметрич- ной аутентификации может служить скелга биффи — Хэллмана (рис. 7.8), пред- ставляющая собой совокупность процедур выработки общего секретного ключа и взаимной аутентификации субъектов взаимодействия. Пусть и — примитивный элемент поля Галуа GF(p), где р — простое число. Абонент А владеет парой функций: E„— открытой функцией зашифрования и D„— закрытой функцией расшифрования. Абонент В владеет парой функций: Ea — открытой функцией зашифрования и Dg — закрытой функцией расшифрования. Тогда последова- тельность взаимной аутентификации состоит из трех шагов. Секретные ключи субъектов шифруются мастер-ключом Kerberos. Когда сек- ретный ключ изменяется нормальным образом, т. е. не в результате компроме- тации, то старый ключ следует сохранять до тех пор, пока остаются годными билеты, выданные с его помощью, так как возмо> на ситуац я, ко да о ин су ект имеет несколько активных ключей. Субъекту, обладающему несколькими активными ключами, соответствует несколько записей в базе данных. При вы- даче разрешений и при начальной аутентификации в сервере AS всегда исполь- зуется .самый свежий ключ. Помимо серверов AS u TGS в системе имеется объект, отвечающий за управ- ление базой данных, называемый дггспепгчег&gt ом б зы данг ык Kerbe os Ђ” (Database Manager), а также сервер распространения клгочей Kerberos — KDS (Кеу Distribution Server). 
Криптографичвскив методы защиты информации в компьютгрных системах и сгтвх 174 Рис. 7.8. Схема несимметричной аутентификации Диффи - Хэггггмана Схема аутентификации Диффи - Хэплмана: 2. Абонент В вырабатывает случайное число хв, вычисляепг 1. Абонент А вырабагггываепг случайное число хА и отггравляет абоненту В со- общение и""mod р. 
175 паеА 7. МетО~ь~ А~г~нгифи~дции NH~peaqnn а""тогг р, на своем секретном клгоче создает подпггсь 0л(а"'mod р, а'"mod р) сообщения (а""пгой р, а'"mod р). Зальем В вычисляет сеансовый ключ ~Ав = а""'"mod р, зашифровывает подпись на эгпом ключе и оптравляет А сообщение ~ ((0' " mod р, а' " mod р) . а"" mod р, Е,в 3. Абонент А вычисляет сеансовый клгоч kA~ = а' ' "mod р, с помощью своего секретного ключа создает ггодпись DA((o"'mod р, а'"mod р) сообщения "'mod р, а'"mod р, зашифровывает ее на ключе kA& t и отправля г В сообще Е„н О,(а" mod р,а"'цтой р) . Если проверка подписи В абонентом A завершгглась успешно, т. е. А убедтся в справедливоспги равенства Е~ DA~ Е„~ Da а" mod р, а"" mod р = а" mod р, а"' mod р, он может быть уверен в подлинности абоненпга В. Если проверка подписи А або- нентом В завершилась успешно, пг. е. В убедгглся в справедливости равенства E„D„B Е„в О, а"'mod р,а""mod р = а"'mod р,а'"mod р, он, в свого очередь, может быть уверен в подлинноспги абонента А. 7.5.2. Протокол Шнорра Одним из наиболее эффективных протоколов аутентификации является про- токол К. Шнорра. Пусть р и q — простые числа, такие, что q делит (р — 1). Шнорр предлагал использовать р разрядностью не менее 512 битов и q разряд- ностью не менее 140 битов. Пусть g e У„такое, что g~ = l(mori р), g 4 l. Протокол Шнорра (рис. 7.9) основан на отсутствии эффективных алгоритмов нахождения х e Z, по заданному значению y=g modp при известных р, q u g. Свойство нулевого разглашения знаний для схемы Шнорра пока не доказано. 
176 Криптографичвскиг мгтоды защиты информации в компьютерных систгмах и сллх Рис. 7.9. Схема аутентификации Шнорра ~( sec rrl) g " mod p и публикует найденное значение в качестве своего открытого ключа kA~"""'. Схема аутентификации Шнорра l. Абонент А выбирает случайное число хА е У„, вычисляет у, = g""mod p и посылает уА абоненту B. 2. Абонент B выбирает случайное 1-разрядное число хв'(хв E (О, 1, ..., (2' — 1))) и посылает его абоненту А. 3. Абоненпг А вычисляет s =хА+ kA хв(тоа'q) и посылает s абоненту В. 4. Абоненпг B проверяет соотношение и, если оно выполняется, признает подпинность абонента А, в противном случае — отвергает. В качестве своего секретного ключа kA"'"""~ абонент А выбирает случайное число из Z,. Затем он вычисляет 
177 Гмм 7. Методы дутентификвции информации Противник, знающий только открытый ключ ЙА""'и'"~, р. q и 8 может пройти ау- тентификацию только с пренебрежимо малой вероятностью 2", зависящей от па- раметра t. Противник может действовать так. Он выбирает случайным образом хв е {О, 1, ..., (2 — 1)) и s c 7.. Затем он вычисляет 7.5.3. Протокол Фиата - Шамира Рассмотрим простейшую схему аутентификации с нулевым разглашением знаний. Подобные протоколы используются интеллектуальными картами. Лич- ность владельца карты признается подлинной, если претендент доказывает свое знание секретного ключа. Дггя реализации схемы необходим центр доверия, который выбирает и публи- кует целое число вида n = pq, где р и q — простые числа, которые держатся в сек- рете. Предположим, абонент А является доказывающим, абонент  — проверяю- щим. Абонент А (или центр доверия) формирует открытый и секретный ключи: ° выбирает пг случайных чисел л, c Z„, г = 1, т, и объявляет их секретным клю- чом (k~'"'"' ); ° вычисляет т чисел v;, удовлетворяющих условию v ' =s; modn, и объявляет их открытым ключом (k>~"'""" Протокол аутентификации Э. Фиата и А. Шамира состоит в t-кратном повто- рении следующих шагов. Схема Фиата - Шамира: 1. Абоненпг А выбирает случайное чггсло х с Z„, вычисляет 2 уд =хд modn и посылает его В. 2. Абонент В выбирает случайную двоичную ггоследовательность b>b...b„ b с О, ) = 1, и посылает ее А. 3. Абонент А вычисляет у,,=х„s mo n b =1 и посылает его B. У 1 У~=g Йд" ) modP и посылает у'А абоненту В. Запрос хв, полученный от В на втором шаге, совпадет с х'в с вероятностью 2 ', и именно с такой вероятностью противник пройдет ау- тентификацию. Предлагая данную схему аутентификации, Шнорр рекомендовал использовать t разрядностью не менее 72 битов. 
)78 Криптографические методы защиты информации в компьютерных системах и сетях 4. Абонент В проверяет равенство y =(y') Qv,rnodn Абонент В принимает доказательство, если проверка закончилась успешно во всех 1 циклах. Вероятность обмана равна (1/2) '. 7.6. Аутентификация Объекта В процессе аутентификации объекта, иногда называемой аутентификацией источника данных, проверяется подлинность идентификатора, представленного с некоторыми данными. В отличие от аутентификации субъекта в этой ситуации претенденту не нужно быть активным участником процесса аутентификации. Данный тип аутентификации (рис. 7.10) по сути ничем не отличается от проце- дуры контроля целостности. Рис. 7.10. Схема аутентификации объекта Для аутентификации объекта применяется шифрование симметричным алго- ритмом, выработка имитоприставки или электронной подписи. Первые два вари- анта применяются в том случае, когда претендент и верификатор доверяют друг другу. Если необходимо иметь возможность доказательства подлинности иденти- фикатора третьей стороне (при условии, что верификатор не имеет возможности изменить массив данных р), например необходима юридическая значимость пе- ресылаемых электронных документов, требуется электронная подпись. 
ГЛАВА 3 Электронная подпись 8.1. Основные понятия Схемы контроля целостности, рассмотренные в гл. б, могут использоваться только при взаимодействии доверяющих друг другу сторон. Они принципиально не способны обеспечивать улаживание возникающих между ними противоречий и разногласий. Такая возможность появляется только при использовании одно- сторонних функций с секретом для формирования электронной или цифровой подписи. Протоколы или схемы электронной подписи являются основным крип- тографическим средством обеспечения аутентичности информации: ° с помощью электронной' подписи получатель докул~ента может доказать, что он принадлежит отправителю, при этол~ автор подписи не сможет ос- порить факт отправки подписанного документа; ° электронную подпись невозможно подделать; только абонент, чья подпись cmoum на документе, мог подписать данный документ; ° электронная подпись является неотьемлемой частью документа, перенести ее на другой документ нельзя; ° ни пропгивник, ни получатель не могут изменить документ, оставив данный факт незамеченным; ° любой пользователь, имеюи~ий образец подписи, может удостовериться в подлинности документа. Для повышения надежности схемы электронной подписи, например для про- тиводействия атакам перехвата и повтора сообщений, фальсификации времени отправки сообщений, ее можно сделать зависимой от неповторяющегося блока данных nrb. Схема электронной подписи включает в себя: параметр безопасности и, в качестве которого может выступать длина под- писи, длина подписываемых сообщений и т. п.; пространство исходных сообщений; ° максимальное число подписей (signature bound), которые могут быть получе- ны в данной схеме без замены секретной информации; ° ~»p»~ 0 генерации ключей — полиномиальный (от и) вероятностный алго- ритм, формирующий по заданному параметру и пару у. (юле!) у (риЬй:)., &l ;A & где k~ — секретный ключ подписывающего (абонента A); k~~""""~ — соот- ветствующий открытый ключ проверяющего (абонента 3); 
180 Криптографические матовы защиты информации в компьютерных системах и сетях ° сигорипгм S формирования подписи сообщения — полиномиальный вероятно- стный алгоритм, вырабатывающий по заданным исходному сообщению р и секретному ключу k>""' "" подп с s ля сообще ия ° алгоритм V проверки (verification) подписи — полиномиальный вероятност- ный алгоритм, дающий на выходе при заданных сообщению р, открытому ключу Й,ттР"~"' и возможной подписи s' либо значение единице, когда подпись сообщения принимается, либо О, когда подпись отвергается. Подпись s = S,<ÄÄÄi p) называе ся допусти ой ля сообще ия р, е ли Л принимается алгоритмом V c вaеeр~оoiяiтTнHоoсcтTiь iю©, близкой к 1. Подделкой подписи со- обшения р называется нахождение противником, не имеющим секретного клю- ча подписывающего, допустимой подписи для этого сообщения. В общем случае неинтерактивный протокол электронной подписи имеет сле- дующий вид. Схема электронной подписи документаp.. 1. Отправитель А вычисляет (k (игнат) k (pull!le)) g( ) и посылает k„~"""~ получателю В, сохраняя kq+" "' в секрете. 2. Дтгя получения подписи документа р оигправитель А вычисляет у .жтс1 и посылает р и s получателю В. 3. Получатель В вычисляет , р - т. (publi& t Р ~ А и в зависимости om результата принимает гии отвергает подггись s сооб- щения р. В классической схеме электронной подписи предполагается, что подписы- вающий (абонент А) знает содержание документа р, который он подписывает; проверяющий (абонент В), зная открытый ключ проверки подписи, может про- верить правильность подписи в любое время без какого-либо разрешения или участия претендента А. При создании электронной подписи по классической схеме (рис. 8.1) претендент A выполняет такую последовательность действий: ° применяет к исходному сообщениго р хеш-фуикггггю h и формирует хеш- образ или дайджест (message digest) сообигеиия h(p); ° при необходимости дополняет хеш-образ до требуемой длины; ® вычисляет электронную подпись s с использованием тгесимметричного крип- 1 тоалгоритма 0» и секретного ключа создания подписгт: s = D„(Ext(h(p))). 
AABA 8. ЭЛЕКТ~ЮННАЯ ПОДПИСЬ 181 Хеш-функция является неотъемлемой частью схем электронной подписи. Применение медленных несимметричных криптоалгоритмов для преобразова- ния всего исходного сообщения р нерационально, поэтому для повышения бы- I стродействия схемы перед процедурой формирования подписи используется функция необратимого сжатия информации. Последовательность действий або- нента В, получившего подписанное сообщение, такова: ° дополняет в случае необходимости хеш-образ сообщения до нужной длины (на рис. 3.1 рассматривается случай, когда расширение Ext(h(p)) не требуется); ° применяет к полученной подписи s несимметричный криптоалгоритм Е~ с использованием открытого ключа проверки подписи и сравнивает получен- ное значение Eq(s) с найденным на предыдущем шаге Ext(h(p)); при положи- тельном результате сравнения подпись признается, в противном случае от- вергается. Рис. 8.1. Классическая схема создания и проверки злектронной подписи ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
182 КриптографиvEcKHE методы защиты информации в компыотвриых cHcTENIAK и снях 8.2. Хеш-функции Хеш-функцией называется преобразование h, превращающее информацион- ную последовательность р произвольной длины в информационную последова- тельность фиксированной длины h(p). К функции h(p) предъявляются 3 основ- ных требования: ° результат работы хеш-функции должен зависеть от всех двоичных символов исходного сообщения, а также от их взаимного расположения, т. е. Ь(р) должна быть чувствительна к любым изменениям входной информационной последовательности; ° хеш-функция должна быть стойкой в смысле обращения; ° хеш-функция должна быть стойкой в смысле нахолсдения коллизий. Иначе говоря, задача нахождения последовательности р по заданному хеш- образу Ь(р)и задача нахождения для заданной последовательности р другой по- следовательности р', р' Ф р, такой, что h(p ) = h(p), должны быть вычислитель- но неразрешимы. Области использования хеш-фуннций: ° защита паролей при их передаче и хранении; формирование контрольных кодов MDC; ° получение сжатого образа сообщения перед формированием электронной подписи; ° оперативный контроль хода программ (concurrent checking of program flow). Наиболее известные алгоритмы получения хеш-образов сообщений — MD5, SHA, RIPEMD, TIGER. MD5 — представитель семейства алгоритмов вычисления хеш-функций MD (Message Digest Algorithm), предложенного P. Ривестом; разработан в 1991 г.; преобразует информационную последовательность произвольной длины в хеш- образ разрядностью 128 бит. RIPEMD — разработан в рамках европейского проекта RIPE (Race Integrity Primitives Evaluation); является модификацией алгоритма MD4; преобразует ин- формационную последовательность произвольной длины в хеш-образ разрядно- стью 128 (RIPEMD-128) или 160 бит (RIPEMD-160). TIGER — разработан P. Андерсоном и 3. Бихэмом; предназначен для реализа- ции на 64-разрядных компьютерах; преобразует информационную последова- тельность произвольной длины в хеш-образ разрядностью 192 бита. 8.2.1. $есиге Hash Algorithm (ЯЯА) Алгоритм SHA является частью стандарта SHS (Secure Hash Standard), приня- того в 1993 г. Национальным институтом стандартов и технологий США (NIST) 
AABA 8. 3AEIGpOHHAA ПОДПИСЬ 183 и Агентством национальной безопасности США. SHA использует принципы, предложенные ранее P. Ривестом при разработке своих алгоритмов MD4 и MD5. Рассмотрим версию SHA-1, в которой осуществляется преобразование ин- формационной последовательности произвольной длины в хеш-образ разрядно- стью 160 бит. На первом этапе информационная последовательность дополняет- ся до длины, кратной 512 битам. Сначала информационная последовательность дополняется до длины на 64 двоичных разряда меньшей числа, кратного 512: к концу последовательности (сообщения) приписывается единица, а затем необ- ходимое количество нулей. После этого приписывается 64-разрядный код длины сообщения. Если длина исходного сообщения больше 2~, используются только 64 младших разряда этого кода. Пусть после дополнения получена информаци- онная последовательность р = р,р ...р,....р,„,i =1,т, р, =512. На вход ~-го основного цикла преобразования SHA; поступает ~-й блок ин- формационной последовательности и результат работы предыдущего цикла SHA; ~, т. е. SHA, =h(p,,SHA,,). Перед началом каждого цикла соответствующий блок расширяется до 80 слов по 32 разряда в каждом. Расширение происходит следующим образом. Пусть W1W2 ° W16 суть исходный блок, ®1®2 " ' ®80 суть расширенный блок, при этом й,, =w,для ~=1,16; w, = Яо1(и,, 9 w,, 0+ w, «0+ и,, ) для ~ = 17, 80, где Rot — операция циклического сдвига на один разряд влево. Перед началом первого цикла инициализируются пять 32-разрядных пере- менных A = 6745230111, B = EFCDAB89h, С = 98ВАЭСРЕЬ, D = 1032547611, Е = СЗР2Е11. ОЬ, при этом стартовый вектор хеширования (синхропосылка) есть результат конка- тенации этих переменных, т. е. БНАо = (А, В, С, D, Е) Конкатенация новых значений этих переменных, полученных в конце ~-го цикла, объявляется результатом работы цикла SHA;. Схема алгоритма SHA пока- зана на рис. 8.2. В начале каждого цикла создаются копии входных переменных АА = А, BB = B, СС = С, DD = D, ЕЕ = Е. 
184 Криптографические методы защиты информации в KolllnbloTEpHblx системАх и сетйх Рис. 8.2. Схема алгоритма SHA Затем выполняется 80 шагов алгоритма, на каждом из которых происходит выполнение следующих операций (рис. 8.3): Temp = Rol A+ f, (B, С, D)+ E+ р,, + с,; С = Rol'OB; А = Temp, где Rol" — операция циклического сдвига на и разрядов влево; fj — шаговая функция; р„"-/-е словоi-го блока р;; с, — шаговая константа, т'=1,80, т' =1,т. 
AABA 8. 3hfIGPOHHAA ПОДПИСЬ Рис. 8.3. Схема одного шага алгоритма SHA: Ж вЂ” операция сложения по модулю 2" В первом раунде (при ~ =1, 20) используются функция /;.(Х, Y,z) = XY v XZ и константа с, = 5A827999h; во втором раунде (при ~ = 21,40) используются функция y(x, к,z) =хе ко+z и константа с, = 6ED9EBA1h; в третьем раунде (при j = 41, 60) используются функция У(Х, Y,Z)=XZvXYvZY и константа с, = 8F1BBCDCh; в четвертом раунде (при ~ = 61, 80) используются функция у(х,1,Z) =хо+ ко+z и константа с, = СА62С1Р6Ь. Цикл завершается сложением по модулю 2 ~ полученных значений А, В, С, D и Е соответственно с АА, ВВ, СС, DD и ЕЕ: А = А + АА, B = B+ BB, С = С+ СС, D = D+ DD, Е = Е+ ЕЕ; конкатенация полученных значений А, В, С, D и Е является результатом работы основного цикла. В настоящее время существуют версии алгоритма SHA-256, SHA-384, SHA-512. 
166 Криптогрдфичаскис методы защиты информации в компьюткриых системдх и сктх 8.2.2. Хеш-функции на основе симметричных блочных криптоалгоритмов При использовании для построения h(p) симметричных блочных криптоал- горитмов стойкость хеш-функции гарантируется стойкостью применяемого блочного шифра. Пусть Н,. = Е„( р,. О+ Н, ) О+ р, 9 Н,,; и, =е„(р)ю р,юн H, = Е„(р, ЮН,,)8) р,. 8.2.3. Отечественный стандарт на функцию хеширования (ГОСТ P 34.11-94) В основе данной хеш-функции лежит алгоритм блочного шифрования ГОСТ 28147 — 89. Функция преобразует информационную последовательность произ- вольной длины в хеш-образ разрядностью 256 бит. Пусть р — входная информационная последовательность длиной ~р1 После- довательность разбивается на 256-разрядные блоки. Последний неполный блок дополняется до требуемого размера. Добавляются два 256-разрядных блока, со- держащие код длины последовательности и контрольную сумму. Каждый блок р; полученной расширенной последовательности Ext(p) рассматривается как результат конкатенации четырех 64-разрядных двоичных наборов: р;=(А;, B;, C;, D). Тогда процесс вычисления хеш-образа h(p) может быть описан следующим образом: GOST,. = h( р,, GOST,, ), где GOST; — результат т'-го цикла преобразования; GOSTp — 256-разрядный стар- товый вектор хеширования, на выбор которого ограничений не накладывается; ~ =1, т. Алгоритм вычисления GOST, включает в себя 3 шага: генерацию четырех 256-разрядных ключей k;p;, k~g, Й;с, k;p для зашифрования в режиме простой замены 64-разрядных частей i-го блока; ЮМУ Ф\Ф Юйау ° ~Ф ° ~МУ р = р,р,...р,...р„„т =1,т, суть последовательность, состоящая из блоков, размер которых равен размеру ключа блочного шифра. Блоки р суть результат расширения блоков исходного сообщения меньшей длины (см, например, схему получения кода MDC в гл. 6). Наиболее надежные схемы получаются при использовании для вычисления те- кущего хеш-значения Н; функции зашифрования Ет, где ключ k — это предыду- щее хеш-значение H; &l ;, х тя извес ны схе ы в кото ы в качес в k использу ся либо очередной блок сообщения р;, либо Н; 1 S р;. Наиболее известны сле- дующие схемы формирования хеш-образа h(p) = H,„: Н,. = Е„(р,.)6Э р,.; 
Гмвд 8. Элвароннм подпись 187 ° зашифрование частей блока р; с исиользованием алгоритма ГОСТ 28147 — 89; ° иеремешивание результата зашифрования. Пусть с =с =0256; 1вОв1иОм1иОв p8~8(~8p8 pR~8)~ ~Rp8)4 где а" — конкатенация п экземпляров двоичного набора а. Заданы два преобра- зования для 256-разрядных блоков Х = (А, В, С, D) = (Ьз~, ..., Ь2, bt), где b; — байты блока: ° ~ А(Х) = (C 0+ D, А, В, С); Р(х) — (Ь (32& t; ° Ь 2 Ь 1 где (p(i+ 1+ 4(k — 1)) = 8i + k, ж = О, 3, k = 1, 8. Тогда алгоритм генерации секретных ключей имеет вид, показанный на рис. 8.4. Рис. 8.4. ГОСТ P 34Л1-94. Алгоритм генерации секретных ключей 
188 Криптографические методы з1тщиты информации в компьютерных системдх и снвх На следующем шаге части блока подвергаются зашифрованию на получен- ных ключах: с, = Е(р,) =(E„ (~,), E, (В,), Е„ (С,), Е„ (В,)). Результат цикла преобразования формируется после шага перемешивания. Задано преобразование 256-разрядного блока (тР16i ° "i W2 W1) где w; — 16-разрядные слова блока: Т(Х) = (w1 О+ w2 О+ трз Ю и'4 О+ в1з О+ w16, W16,, трз, W2). Результат цикла преобразования: GOST, = h(p,, GOST,, ) = Т" GOS T,, 0+ T р, 0+ T'2 (c, ) Пусть р — часть последовательности Ext(p), еще не прошедшая процедуру ~ф я' ю я' хеширования, р ~ — 256-разрядный код длины (в битах) последовательности р, L — 256-разрядный код длины обработанной последовательности, Sum — 256- разрядная контрольная сумма. Тогда алгоритм вычисления хеш-образа h(p) бу- ~ ° р = Ехр1р 1=(o, р ); Sum=Sum+ p (той2 ); GOST = УР', GOST); GOST = h(L, GOST); GOST = h(Sum, GOST), кеш-образ сообщения Ь(р) = GOST; 3) Представггв информационную последовапгельность р в виде р =(р,,pR), р, =256; вычисляем: GOST = (р, GOST); L = L + 256(mod 22'6); Sum = Sum + pq(mod 2~ ); перекодим к шагу 2. дет иметь вид: 1) р = р, GOST = GOSTp, L = О, Sum = О; 2) проверяем условие ~р ~ & t; 2 6; ри положитель ом результаг ге прове ки пе ходим к шагу 3, в пропгивном случае вычисляем: L= L+ ip i(mod 2 '6); 
ГЛАНА 8. 3AEIGPOHHA5I ПОДПИСЬ 169 8.3. Протоколы электронной подписи 8.3.1. Схема электронной подписи RSA Криптосистема с открытым ключом RSA часто используется не только для шифрования, но и для построения схемы электронной подписи. Пусть Ед(к) = к' mod n суть открытая функция зашифрования, а г.д(к) = x' mod n суть секретная функция расшифрования. Схема эпентронной подписи RSA: 1. Абонент А (претендент) вычисляет кеш-образ h(p) сообщения р. 2. Абонент А зашифровывает полученное значение lг(р) на своем сегрепгиом ключе d, вычисляя подпись s = (h(p))' mod n, и отггравляепг абоненту В пару документ-ггодыись (р, s). 3. Абонент В (вериг~эикатор) расшифровывает s на открытом ключе е omnpa- вителя, т. е. вычисляет s" mod n. 4. Абонент В вычисляепг кеш-образ h(p) полученного сообщения и проверяет равенство h(p) = s" mod n. В случае положительного результата проверки ггодпись принимается, в про- пгивно.м случае — отвергаепгся. В качестве хеш-функции в схеме подписи RSA используются функции семей- ства MD. 8.3.2. Схема электронной подписи Шнорра В протоколе аутентификации Шнорра интерактивность требуется только для того, чтобы получить от верификатора В случайный запрос к&g ;. Е ли б у п тендента А был надежный источник случайности на замену ГПКл, пользующий- ся доверием В, то протокол можно было бы сделать неинтерактивным. А. Фиат и Шамир предложили способ преобразования схемы аутентификации в протокол электронной подписи. Если р — подписываемое сообщение, а Й вЂ” криптографи- ческая хеш-функция, вместо обращения к верификатору (получателю) претен- дент (отправитель) вычисляет h(p) и использует ее вместо запроса кв. Этот при- ем является универсальным, так как применим и к другим протоколам аутенти- фикации. 
l90 КриптогрАфические методы зАщиты информАции в компьютерных системАх и сетях Пусть р и q — простые числа, такие, что q делит (р — 1). Пусть g c У такое, ЧТО g~ = 1(mod р), g Ф l. Пусть хеш-функция h отображает пары значений (y„, р) на множество (0, 1, ..., (2' — 1) ). В качестве своего секретного ключа kAä""'""~ абонент А выбирает случайное число из У . Затем он вычисляет k(хесrrl) g ' modр и публикует найденное значение в качестве своего открытого ключа kA+"""'. Схема электронной подписи Шнорра: 1. Абонент А выбирает случайное число x~A C Уг, вычисляепг уА — — g"'mod p. 2. Абонент А вычисляет хг =h(yA p). 3. Абонент А вычисляет s = х1А + kA'"""" х2А(тоег q) и посылает сообигеиие р с подписью (хА, S) абоненту В. 4. Абоненпг В вычисляет и проверяет, выполняется ли равенство х2А — тг(уАю p). Если оно вьтолняется, B признает подлинноспгь подписи, в пропгивном слу- чае — отвергает. Стойкость приведенной схемы сильно зависит от свойств используемой хеш- функции. Если противник может по заданной паре (yA, р) находить другое со- общение р', р'a р, для которого h(yAч p) h(yAю р Ъ 8.3.3. Отечественный стандарт эпектронной подписи (ГОСТ P 34.10-94) Пусть р и q — простые числа, такие, что Пусть g c У„такое, что g" = l(mod р), g Ф l. он может осуществить экзистенциальную подделку подписи. Для этого он после перехвата сообщения р и подписи (хА, s) должен найти указанное выше р', и тогда пара (хгА, s) будет также подписью и для сообщения р'. 
19l ГЛАВА 8. ЭЛЕКТРЮННАЯ ЛОДПИСЬ Пусть хеш-функция h отображает множество сообщений на множество Z„. В качестве своего секретного ключа k>'"" "' абон н А выбир ет случай ое чи из Уг. Затем он вычисляет ~ (sec farl) mod p mod q и публикует найденное значение в качестве своего открытого ключа k> '" Схема элентронной подписи по ГОСТ P 34.10-94 1. Абонент А выбирает случайное секрегпное число х„с Уг, вычисляет y„— = (g" mod р) mod q. 2. Абонент А вычисляет s = (x„h(p)+ k„" " y„) mod q и посылает сообгцение р с подписью (yA, s) абоненту В. 3. Абонент В проверяет условия 0&lt y> q,O и если оба они выполняются, переходит к шагу 4, в пропгивном случае под- пись отвергается. 4. Абонент В вычисляет w = (h(p)) mod q и проверяет, выполняется ли равенство '"" Й~~""""'3 '' тоН р той о = y„ Если оно выполняется, В признает подлинность подписи, в противном слу- чае — отвергает. Примечания: 1. Если y„— = О или s = О, формируегпся новое значение х& t и п цесс генерации подписи начинается заново. 2. Если h(p) mod q = О, h(p) при- сваивается значение 1. 8.4. Классификация атак на схемы электронной ПОДПИСИ Стойкость схемы электронной подписи зависит от стойкости используемых криптоалгоритмов и хеш-функций и определяется относительно пары угроза- атака. Приведем классификацию атак на схемы электронной подписи: ° атака на основе известного открытого ключа (key-only attack) — самая сла- бая из атак, практически всегда доступная противнику; ° атака на основе известных подписанных сообщений (known-message attack)— в распоряжении противника имеется некоторое (полиномиальное от k) число 
192 Криптографические методы защиты информации в компьютерных системах и сетях пар (р, s), где р — некоторое сообщение, à s — допустимая подпись для него, при этом противник не может влиять на выбор р; ° простая атака с выбором подписанных сообщений (generic chosen-message at- tack) — противник имеет возможность выбрать некоторое количество подпи- санных сообщений, при этом открытый ключ он получает после этого выбора; ° направленная апгака с выбором сообщений (directed chosen-message attack)— выбирая подписанные сообщения, противник знает открытый ключ; ° адаптивная атака с выбором сообщений (adaptive chosen-message attack)— противник знает открытый ключ, выбор каждого следующего подписанного сообщения он может делать на основе знания допустимой подписи предыду- щего выбранного сообщения. ° экзистенциальная подделка (existential forgery) — создание противником под- писи для какого-нибудь, возможно бессмысленного, сообщения т', отлично- го от перехваченного; ° селективная подделка (selective forgery) — создание подписи для заранее вы- бранного сообщения; ® универсальная подделка (universal forgery) — нахождение эффективного алго- ритма формирования подписи, функционально эквивалентного S; ° полное раскрытие (total break) — вычисление секретного ключа, возможно отличного от k>~"'"" ~, соответствующ го открыт му кл чу k~ "' ', то д возможность формировать подписи для любых сообщений. Наиболее надежными являются схемы, стойкие против самой слабой из угроз на основе самой сильной из атак, т. е. против экзистенциальной подделки на ос- нове атаки с выбором подписанных сообщений. Справедливо следующее утвер- ждение. Схемы электронной подписи, стойкие против экзистенциальной под- делки на основе атаки с выбором подписанных сообщений, существугот тогда и пюлько тогда, когда существуют односпгоронние функг1ии (4, 10J. 8.5. Процедура разрешения споров Для практического применения схем электронной подписи помимо алгорит- мов формирования подписи и ее верификации требуется процедура арбитража, т. е. разрешения споров. Арбитраж необходим, когда один из абонентов, напри- мер В, предъявляет сообщение и подпись (р, s), утверждая, что эта пара сообще- ние-подпись была получена от абонента А, и А отказывается признавать эту подпись своей. С юридической точки зрения основанием для разрешения подоб- ных споров в суде является подписание (обычным образом) каждым пользовате- Каждая атака направлена на достижение определенной цели. Можно выде- лить следующие виды угроз для схем элекпгронной подписи (в порядке возраста- ния силы): 
ГЛАВА 8. ЗЛЕ ОРОННАЯ ПОДПИСЬ 19f лем при подключении к системе специального документа, в котором пользова- тель принимает все "правила игры", вплоть до судебной ответственности. При разборе дела в суде арбитр выступает в качестве эксперта, дающего заключение о подлинности электронной подписи [4]. Алгоритм арбитража: 1. Абонент В предъявляет арбитру электронный докуменпг и подпись. 2. Арбитр требует от абонента А предъявления своего секретного ключа. Ес- ли А отказывается, арбитр дает заключение, что подпись подлинная. 3. Арбитр выбирает из сертифицированного справочника открытый кггоч абонента А и проверяет его соответствие секретному ключу, предъявлен- ному А. Если они совпадают, арбипгр переходилг к шагу 5. 4. При обнаружении факта несоответслгвия ключей арбитр обращается в центр сертификации и требует предоставления заверенного абоненигом А доку- метпа, содержащего его открытый ключ. Если выясняется, что открытый ключ, взяпгый из сггравочника, не совпидает с указанным в документе, apoump признаепг подпись, предъявленнуго В, подлинной; при этом все издержки тико- го решения компенсируюпгся за счет цеигпра. Если открьтгые кгючи в спра- вочнике и документе совпадают, пг. е. абонент А предъявил некоррекпгный секретный ключ, арбитр признает подлинность электронной подписи. 5. Арбитр проверяет соотвепгствие друг другу подписи и докуиенгпа. При по- ложипгельном результате проверки подпись признается подлинной, в про- тивном случае — отвергается. Задача арбитража значительно сложнее, чем кажется на первый взгляд. Ар- битраж и решение споров в суде невозмо> н в следую их случа ° секретный ключ сформирован не самим абонентом А, а специальным цен- тром генерации ключей; ° аппаратура, на которой выполняется алгоритм генерации или проверки под- писи, содержит какие-либо элементы, не контролируемые пользователем ("черные ящики", защищенные участки памяти и т. и.). Наконец, возможны безвыходные ситуации, в которых арбитр не может при- нять никакого обоснованного решения. Например, абонент В предъявляет ь и утверждает, что это подпись под документом р. Абонент А признает, что это его подпись, но под документом р' е 'р, при этом выясняется, что хеш-образы этих документов совпадают, т. е. h(p) = h(p'). Арбитр понимает, что кто-то из двоих нашел коллизию для применяемой в схеме электронной подписи хеш- функции, и оказывается в патовой ситуации. Выход из положения возможен только в том случае, если заранее обговорен порядок разрешения спора в такой ситуации. 
l94 Криптографические методы защиты информАции в компьютерных системАх и сетпх 8.6. Особые схемы электронной подписи В некоторых ситуациях могут потребоваться схемы электронной подписи, отличные от рассмотренных классических схем. Известны следующие специ- альные схемы электронной подписи: ° схема подписи "вслепую", когда абонент А подписывает документ, не зная его содержимого; схема групповой подписи, которая позволяет верификатору убедиться в при- надлежности полученного сообщения некоторой группе претендентов, но кто именно из членов группы подписал документ, верификатор определить не В СОСТОЯНИИ; ° схема разделяемой подписи, которая формируется только при участии опреде- ленного количества участников протокола, иначе говоря, данная схема являет- ся объединением классической схемы подписи и схемы разделения секрета; ® схема конфиденциальной (неотвергаемой) ггодписи, которая не может быть проверена без участия сформировавшего ее участника протокола; схема неоспоримой подписи, в которой подделка подписи может быть доказана. 
ГЛАВА 9 Управление ключами Любая криптосистема основана на использовании ключевой информации, под которой понимается вся совокупность действующих в АСОРА ключей. По своему назначению последние делятся на ключи для шифрования ключей и ключи для шифрования данных. По времени жизни делятся на долговременные и крат- ковременные. Примером последних являются так называемые сеансовые ключи, действующие в течение только одного сеанса связи. В понятие управление клю- чами входит совокупность методов решения таких задач, как: ° генерация ключей; ° распределение ключей; ° хранение ключей; ° замена ключей; ° депонирование ключей; ° уничтожение ключей. Правильное решение всех перечисленных задач имеет огромное значение, так как в большинстве случаев противнику гораздо проще провести атаку на ключе- вую подсистему или на конкретную реализацию криптоалгоритма, а не на сам этот алгоритм криптографической защиты. Использование стойкого алгоритма шифрования является необходимым, но далеко не достаточным условием по- строения надежной системы криптографической защиты информации. Исполь- зуемые в процессе информационного обмена ключи нуждаются в не менее на- дежной защите на всех стадиях своего жизненного цикла. 9.1. Разрядность клича К ключам для симметричных и асимметричных криптосистем предъявляются различные требования. Этот факт следует учитывать при построении гибридных криптосистем. В настоящее время надежными считаются ключи разрядностью не менее 80 бит для систем с секретным ключом и не менее 768 бит для систем с открытым ключом, стойкость которых определяется сложностью решения за- дачи факторизации больших чисел (например, RSA). В распоряжении противника, атакующего криптосистему, всегда имеются две возможности: случайное угадывание ключа и полный перебор по всему ключе- вому пространству. Вероятность успеха и в том и в другом случае зависит от разрядности ключа. В табл. 9.1 приведены длины ключей симметричных и асимметричных систем, обеспечивающие одинаковую стойкость к атаке полного перебора и решению задачи факторизации соответственно. 
196 Криптографические мгтоды эдщиты информдции в компьютерных системах и сетях Таблица 9.1. Длины ключей для криптосистем с секретным и открытым ключами, бит Примечание. На практике в гибридных криптосистемах долговременный ключ для асимметричного алгоритма выбирают более стойким, чем сеансовый ключ для симметричного. Если пропгивник обладает неограниченными финансовыми и пгехническими возможностями, для того чтобы узнать ключ, ему необходимо лишь потра- типгь достаточное количество денег. В случае противника с ограниченными возможностями при выборе разрядности ключа учитывают следующие сообра- жения: ° сложность атаки полного перебора; ° требуемое быстродействие криптоалгоритма в тех случаях, когда увеличение размера ключа увеличивает время работы операций шифрования; ° время жизни защищаемой информации и ее ценность; ° возможности противника. Если технические возможности противника известны, сложность атаки путем полного перебора по всему ключевому пространству оценить достаточно про- сто. Например, при разрядности ключа симметричной криптосистемы, равной 64 битам, объем ключевого пространства равен 2' . Компьютер, который может перебирать 10' ключей в секунду, потратит на проверку всех возмо>к ых клю более 5 тыс. лет. Современная вычислительная техника позволяет за время по- рядка нескольких дней при финансовых затратах порядка нескольких сотен ты- сяч долларов находить методом полного перебора 56-разрядные ключи симмет- ричных криптосистем. В [38] сообщается, что международной группе исследователей удалось вскрыть шифр RSA с ключом длиной 512 бит. Именно такой ключ используется 'для защиты Интернет-транзакций, а также в шифрах многих коммерческих бан- ков. Интересно также отметить, что 512 двоичных разрядов — это максимальная длина ключа, которую правительство США разрешает использовать в экспорти- руемых программных продуктах. Работа по подбору двух простых сомножите- лей числа, содержащего 155 десятичных цифр, велась в течение 7 месяцев с привлечением ресурсов параллельно работающих 292 компьютеров, находя- щихся в 11 различных географических точках. В это количество входят 160 ра- бочих станций SGI и Sun, работающих на тактовых частотах 175-400 МГц, 8 компьютеров Origin 2000 SGI, работающих на частоте 250 МГц, 120 ПК с про- цессорами Pentium II (350-450 МГц) и 4 процессора, работающих на частоте 500 
Гмм 9. Управление ключдми 197 МГц, производства DigitaVCompaq. Общие затраты вычислительных ресурсов составили около 8 тыс. M1PS-лет. Взломанный нод RSA: RSA — 155 = 1094173864157052742180970732204035761200373294544920 5990913842131476349984288934784717997257891267332497 625752899781833797076537244027146743531593354333897 = 1026395928297411057720541965739916759007165678080380 66803341933521790711307779 1066034883801684548209272203600128786792079585759892 91522270608237193062808643. 9.2. Генерация хлвчей ° программная генерация, предполагающая вычисление очередного псевдослу- чайного числа как функции текущего времени, последовательности симво- лов, введенных пользователем, особенностей его клавиатурного почерка ИТ. П.; ® программная генерация, основанная на моделировании качественного гене- ратора псевдослучайных кодов с равномерным законом распределения; ° аппаратная генерация с использованием качественного ГПК; аппаратная генерация с использованием генераторов случайных последова- тельностей, построенных на основе физических генераторов шума и качест- венных ГПК. Согласно принципу Кирхгофа, стойкость криптоалгоритма определяется сек- ретностью ключа. Это означает, что, если для генерации ключей используется криптографически слабый алгоритм, независимо от используемого шифра вся система будет нестойкой. Качественный ключ, предназначенный для использо- вания в рамках симметричной криптосистемы, представляет собой случайный двоичный набор. Если требуется ключ разрядностью и, в процессе его генерации с одинаковой вероятностью должен получаться любой из 2" возможных кодов. Генерация ключей для асимметричных криптосистем — процедура более слож- ная, так как ключи, применяемые в таких системах, должны обладать опреде- ленными математическими свойствами. Например, в случае системы RSA мо- дуль шифрования есть произведение двух больших простых чисел. Для генерации ключевой информации, предназначенной для использования в рамках симметричной криптосистемы, используются следующие методы (в порядке возрастания качества): 
198 Крилтогрхфичкскик методы защиты информации в комльюткрных системах и снях Рис. 9.1. Схема генерации ключей в стандарте ANSI Х9.17 9.3. Неоднородное хличевое пространство Для защиты от несанкционированного использования криптографического оборудования, которое противник не в состоянии вскрыть с целью исследования алгоритма, формируется неоднородное ключевое пространство (рис. 9.2), имею- щее следующие особенности: закрытие информации с использованием стойкого криптоалгоритма Ет,. имеет место только при использовании ключей специального вида; Невысокое качество программных методов формирования объясняется в пер- вую очередь возможностью атаки на конкретную реализацию генератора и не- обходимостью защиты от разрушающих программных воздействий. На рис. 9.1 показана схема генерации сеансовых ключей в стандарте ANSI Х9.17, где T; — временная отметка; Ет, — функция зашифрования DES; k — ключ; Vo — секретная синхропосылка; R; — сеансовый ключ. Очевидно, что данная схе- ма может применяться совместно с любым другим блочным шифром. Очеред- ной сеансовый ключ формируется в соответствии с уравнением Я; = Е„(Е,(Т,) O+ V;). Новое значение Vgyf определяется следующим образом: V;,i — — Ет,(Ет,.(Т;) O+ R;). 
l99 Глам 9. Управление ключами "правильный" (стойкий) ключ k разрядности nq (~Ц = nq) состоит из двух час- тей: собственно ключа k разрядности и„. (~Ц = n,.) и некоторого кода фикси- рованной длины Л = n& t; Ђ и ., полученн г в результ те преобразова ия к k с использованием некоторой криптографической функции F, т. е. k=(k, F(k)), JF(k))=Л; Рис. 9.2. Принцип работы криптомодуля при использовании неоднородного ключевого пространства ° вероятность случайно получить стойкий ключ пренебрежимо мала и равна 2 ~; ° если поступивший на вход криптомодуля ключ не удовлетворяет указанным условиям, для шифрования информации применяется существенно менее стойкий алгоритм Е~. 
200 Критттографические методы защиты информации в компьютерных системАх и сетттх 9.4. Хранение млючей Секретные ключи не должны храниться в памяти в явном виде, допускающем их считывание. Любая информация об используемых ключах должна храниться в зашифрованном виде, а значит, в защищенной системе должна иметь место иерархия ключей: либо двухуровневая (ключи шифрования ключей — ключи шифрования данных), либо трехуровневая (главный, или мастер-ключ, — ключи шифрования ключей — ключи шифрования данных). Учитывая, что такое разде- ление функций необходимо для обеспечения максимальной безопасности, каж- дый из указанных типов ключей, различающихся по последствиям компромета- ции, времени жизни, а иногда и по способам формирования, должен использо- ваться только по своему прямому назначению. На самом нижнем уровне иерар- хии находятся ключи шифрования данных, или сеансовые ключи, которые ис- пользуются для шифрования пересылаемых сообщений или аутентификацион- ной информации. Для защиты сеансовых ключей при их хранении и передаче используются ключи следующего уровня — ключи шифрования ключей. На верхнем уровне иерархии располагается мастер-ключ, используемый для защи- ты ключей шифрования ключей. Обычно в каждом компьютере используется один мастер-ключ. Учитывая главенствующую роль в иерархии мастер-ключа, используемого в течение длительного времени, его защите уделяется особое внимание: ° мастер-ключ хранится в защищенном от считывания, записи и разрушающих воздействий модуле системы защиты; ° мастер-ключ распространяется неэлектронным способом, исключающим его компрометацию; ° в системе должен существовать способ проверки аутентичности мастер- ключа. Один из способов аутентификации мастер-ключа показан на рис. 9.3. В памя- ти компьютера хранится пара (р, с), где р — некоторый массив данных, с = Ет,.(р) — результат его зашифрования на мастер-ключе k„,. Всякий раз, когда требуется проверка аутентичности мастер-ключа, берется код р из памяти и по- дается на вход криптомодуля. Полученная с выхода последнего шифрограмма с' сравнивается с шифрограммой, хранящейся в памяти. При положительном ре- зультате сравнения аутентичность мастер-ключа считается установленной. При генерации сеансовых ключей код с выхода генератора ПСП рассматри- вается как шифрограмма E<(k .) сеансов го кл ча Й„получен а с использова ем мастер-ключа k, и поэтому может храниться в том виде, в котором он был получен (рис. 9.4). При шифровании сообщения на вход криптомодуля подается шифрограмма Ее(й,.) и сообщение р. Криптомодуль сначала "восстанавливает" сеансовый ключ, а затем с его помощью шифрует сообщение. 
Гюм 9. Упр~вмниа ключдми 20l Рис. 9.3. Схема аутентификации мастер-ключа Проще всего хранить ключи криптосистемы с одним пользователем. В распо- ряжении последнего имеются следующие варианты в порядке возрастания на- дежности: ° запоминание пароля pw и в случае необходимости автоматическое получение из него ключа k с использованием хеш-функции h(x) по формуле k = h(pw); запоминание начального заполнения качественного ГПК, формирующего ключ; ° использование пластикового ключа с размещенным на нем ПЗУ (ROM-key) или интеллектуальной карточки. Следует помнить, что в первых двух случаях объем ключевого пространства зависит не только от длины пароля или ключевой фразы, но и от ограничения на вид используемых символов. В табл. 9.2 приведено количество возможных клю- чей при использовании 8-символьной ключевой фразы и время полного перебо- ра при скорости перебора 10 ключей в секунду в зависимости от ограничений на используемые символы. Также следует помнить о возможности проведения противником так называемой атаки со словарем, включающим в себя наиболее вероятные ключевые слова. Пароли и символьные строки начального заполне- ния ГПК следует выбирать случайным образом, а не на основе лишь критерия простоты запоминания. 
202 КриптогрАфичесхие методы зАщиты ииформАции в KQMAbloTEpHblx системАх и сетях Pwc. 9.4. Схема защиты сеансового ключа Таблица 9.2. Количество возможных ключей и время их полного перебора при различных ограничениях на используемые символы В последнем случае ни сам ключ, ни исходная информация, необходимая для его получения, пользователю неизвестна, а значит, он не может и скомпромети- ровать ее. Использование ROM-key, имеющего тот же вид, какой имеет привыч- ный ключ от входной двери, позволяет пользователю чисто интуитивно избегать многих ошибок, связанных с хранением криптографических ключей. 
Гмм 9. Управление ключами 20) 9.5. Распределение миючей Распределение ключей между участниками информационного обмена в сети реализуется двумя способами (рис. 9.5): ° прямым обменом сеансовыми ключами между пользователями сети. Рис. 9.5. Возможные варианты построения схемы распределения ключей: а — прямой обмен между пользователями в сети (схема типа "точка-точка"); б — схемы с использованием центра распределения ключей (ЦРК); в — схемы с использованием центра трансляции ключей (ЦТК); А, В, С- участники информационного обмена, k — ключ Недостатком первого подхода является возможность злоупотреблений со стороны центра, которому известно, кому и какие ключи распределены. Во вто- ром случае проблема заключается в необходимости проведения более качест- ° использованием одного или нескольких центров распределения или трансля- ции ключей; 
204 Криптогрдфичаскик методы зкщиты информации в компьютерных системах и снях венной, чем в первом случае, процедуры аутентификации для проверки подлин- ности участников сеанса взаимодействия и достоверности самого сеанса. При- мером первого подхода является схема Kerberos < л. ), приме ом второ схема Диффи — Хэллмана < л. Схемы, показанные на рис. 9.5, 6 и в, предполагают, что абоненты А и В предварительно разделили знание своих секретных ключей с центром С. Схемы с ЦРК предполагают, что именно последний формирует сеансовые ключи. Схе- мы, показанные на рис. 9.5, в, отличаются от предыдущего варианта тем, что ЦТК обеспечивает только перешифрование полученной ключевой информации. В двухключевых асимметричных криптосистемах существует опасность подмены открытого ключа одного или нескольких участников информационно- го обмена. Необходимость защиты открытых ключей от подделки является "ахиллесовой пятой" всей технологии. Пусть, например, противник W, имеющий пару ключей & т. (public) т. (ге~ re()~ ~W ~ &l подменил своим открытым ключом открытый ключ k„~"~"' абонента А. В ре- зультате у противника появляются следующие возможности: Ф он может читать все сообщения, адресованные А, так как обладает секретным ключом k>' "' из фальши ой п ры ключ е он может снова зашифровать расшифрованное им сообщение настоящим клю- чом k„~" '"' и отправить его абоненту А, при этом никто ничего не заметит; ® он может формировать от имени А электронную подпись, которая будет ка- заться подлинной, так как все для ее проверки будут использовать фальши- ВЫЙ КЛЮЧ. Учитывая вышеизложенное, одна из важнейших функций центра доверия— сергггификация открытых ключей взаимодействующих абонентов. Например, сертификат с„открытого ключа абонента А суть шифрограмма, полученная на секретном ключе центра распределения С, которая содер> ит ме ку врем ни время действия сертификата lt, идентификатор 1DA и открытый ключ k< '" " ), т. с„= Ос ts, lt, 1О„, k„'""""' где D( — функция шифрования с использованием секретного ключа k (""""'). В самом общем случае функциями центра доверия могут являться: ° генерация, хранение, распределение и контроль времени жизни ключей; ® сертификация ключей; ° аутентификация участников информационного обмена; ° аудит; ° служба единого времени; ° нотариальная служба; служба депонирования ключей. 
Гювд 9. Упрдвмниа ключдми 205 k1 k,. Рис. 9.6. Процедура модификации ключей 9.6. Время жизни ключей Любой ключ должен использоваться в течение ограниченного отрезка време- ни, длительность которого зависит: ° от частоты использования ключей (ключи щифрования ключей, например, используются гораздо реже ключей шифрования данных); ° величины ущерба от компрометации ключа, которая зависит, в частности, от ценности защищаемой информации; объема и характера защищаемой информации (например, при шифровании случайным образом сформированных ключей закрытию подвергается ин- формации, о содержимом которой противнику заранее ничего не известно). При определении времени жизни ключа учитываются следующие соображения: ® чем дольше используется ключ, тем больше вероятность его компрометации; ° чем дольше используется ключ, тем больший потенциальный ущерб может нанести его компрометация; чем больший объем информации, зашифрованной на одном ключе, перехва- тывает противник, тем легче проводить атаку на ключ; ° при длительном использовании ключа у противника появляется дополни- тельный стимул потратить на его вскрытие значительные ресурсы, так как выгода в случае успеха оправдает все затраты. Для уменьшения количества сеансов пересылки ключей применяют процеду- ру модификации ключей, которая основана на получении нового ключа путем хеширования старого (рис. 9.6). Если правило смены ключей соблюдается и от- правителем и получателем, то в каждый момент времени они имеют одинаковый ключ. Постоянная смена ключа затрудняет противнику решение задачи раскры- тия информации. При использовании такого приема следует помнить, что вся ключевая последовательность будет скомпрометирована, если противнику ста- нет известен хотя бы один из ранее использовавшихся старых ключей. О 
206 Криптографические методы мтциты информации в компьютерных системах и сетйх 9.7. Протокол управления миючами SKIP Разработанный в 1994 г. протокол SKIP (Simple Кеу management for Internet Protocol) предназначен для решения проблемы безопасности в Интернете, по- зволяя с регулируемой степенью надежности защищать трафик всех пользовате- лей и прикладных систем в условиях полной прозрачности средств защиты. SKIP основан на использовании двухключевой криптосистемы и схемы Диф- фи — Хэллмана. Каждый узел сети снабжают секретным и открытым ключами. Пусть р — простое, и — примитивный элемент поля GF(p). Тогда секретный ключ т'-го узла суть случайное число х; c GF(p); открытый ключ т'-го узла у; — результат действия односторонней функции F(x) = йmod р, т. е. у,. = tn'"' mod p. Разделяемый секретный ключ k;, двух узлов т' и ~ вычисляется следующим об- разом: k,, = у," mod р =(0"''"' mod р (на стороне узлаi); k,, = у,. ' mod ð = и ' ' mod р (на стороне узла /). Для закрытия конкретного пакета узел т', адресующий свой трафик узлу т', вы- рабатывает пакетный ключ k„, шифрует с его помощью исходный пакет, поме- щает его в блок данных SKIP-пакета (рис. 9.7). Пакетный ключ шифруется с по- мощью вычисленного разделяемого секрета k;,, после чего также записывается в пакет, который снабжается SKIP-заголовком, идентичным заголовку IP-пакета с некоторыми дополнительными полями. В них содержится информация об ис- пользуемых алгоритмах шифрования, так называемых k„- и k;,— àëãoðèòìàõ, и ре- жиме работы SKIP-протокола. Поскольку SKIP-заголовок аналогичен заголовку IP-пакета, все промежуточ- ное оборудование сети направляет этот пакет узлу j стандартным образом. Узел т', получив пакет и вычислив разделяемый секрет k;,, расшифровывает ключ k„, а с помощью последнего и весь пакет. SKIP-протокол характеризуется следующими особенностями: ° шифрует IP-пакеты независимо от приложений или процессов их форми- рующих; установленный в компьютер непосредственно над пакетным драй- вером, обрабатывает весь трафик, не накладывая ограничений ни на лежащее выше ПО, ни на физические каналы; ° для организации защищенного взаимодействия не требует дополнительного информационного обмена за исключением однократного запроса открытого ключа партнера по связи; ° разделяемый секрет используется только для шифрования небольшого пакет- ного ключа; 
207 Гюм 9. Упрдвление ключдми е независим от систем шифрования; пользователь может выбирать любой из предлагаемых алгоритмов шифрования или применять свой собственный; ° протокол вносит в поток данных минимальную избыточность порядка еди- ниц процентов; е обеспечивает 3 режима работы с исходными пакетами — шифрование с ин- капсуляцией (рис. 9.7); с аутентификацией; с шифрованием и аутентифика- цией. В режиме аутентификации к незашифрованным данным добавляется рассчи- танный с помощью пакетного ключа код аутентификации сообщений MAC. Этот режим может совмещаться с режимом шифрования на основе одного пакетного ключа или двух различных ключей — одного для шифрования, другого для ау- тентификации. Исходный IP-пакет Шифруется ключом k, Шифруется ключом k„.. Рис. 9.7. Протокол управления ключами SKIP. Шифрование с инкапсуляцией 
ГЛАВА 10 Поточные шифры 10.1. Синхронные поточные шифры В синхронных поточных шифрах гаммирующая последовательность форми- руется независимо от потока открытого текста при зашифровании и шифротек- ста при расшифровании. Функционирование генератора гаммы, разворачиваю- щего короткий случайный ключ k в длинную ПСП, в общем случае можно опи- сать следующим образом: ~,+! — — F(s„k); Y( — f(si k). где s, — состояние элементов памяти генератора гаммы в момент времени t; F — функция перехода; f' — функция выхода. Начальное заполнение sp может быть функцией от ключа и синхропосылки. Схемы двух основных режимов функционирования синхронных поточных шифров были показаны ранее на рис. 2.38 и 2.39. В режиме обратной связи по выходу OFB (рис. 2.38) выходная функция f не зависит от ключа и уравнения работы генератора гаммы имеют вид: s„) — — F(s„k); yi =f(s() В режиме счетчика (рис. 2.39) функция обратной связи F не зависит от клю- ча, но гарантированно обеспечивает прохождение генератора через все про- странство состояний (или большую его часть). Уравнения генератора гаммы в этой ситуации имеют вид s„i = F(s); Yi=Я~ &l Главное свойство синхронного паточного шифра — отсутствие эффекта раз- множения ошибок. При расшифровании неправильного бита искажается только соответствующий бит открытого текста. Это свойство ограничивает возмох&l ность обнаружения ошибки при расшифровании. Кроме этого, противник имеет возмох<но ть производ ть управляе ые измене ия шифротекс а, соверше точно зная, какие изменения в результате произойдут в соответствующем от- крытом тексте. При использовании синхронных поточных шифров необходимо согласование работы устройств на передающей и принимающей стороне, так как в случае потери или вставки элемента зашифрованной последовательности на принимающей стороне будет потеряна вся информация, начиная с того места, где сбилась синхронизация. Обычно синхронизация достигается либо вставкой 
209 Гмм 10. Поточные шифры специальных маркеров, либо переинициализацией передающего и принимающе- го устройств при некотором заранее согласованном условии [44]. Наиболее известные поточные шифры — А5, PIKE, GOAL, RC4, ORYX, WAKE, SEAL, TWOPRIME, SOBER, ISAAC, JEROBOAM, CHAMELEON, PANAMA, БО/.1ТАИЕ. 10.1.1. А5 А5 — поточный шифр, используемый в системах GSM (Group Special Mobile) для закрытия связи между абонентом и базовой станцией. Он является европей- ским стандартом для цифровых сотовых мобильных телефонов. А5 использует три LFSR длиной 19, 22 и 23 с прореженными многочленами обратной связи, т. е. с многочленами, имеющими небольшое число ненулевых коэффициентов. Выходом генератора гаммы является выход элемента сложения по модулю 2— М2, на входы которого поступают последовательности с выходов трех LFSR, начальное заполнение которых является секретным сеансовым ключом. Исполь- зуется управление синхронизацией LFSR (рис. 10.1). Для управления синхронизацией используются биты c&g ;, &g ; сз с в LFSR. В каждом такте сдвигаются как минимум два LFSR. Если c~ — — с = сз, сдвигаются все 3 регистра, в противном случае сдвигаются те 2 регистра i и J, для которых выполняется равенство c; = c,. Криптоанализ алгоритма показал, что для определения начального заполне- ния LFSR при известных 64 битах гаммы требуется перебор 2 вариантов. Кро- ме того около 40 fo ключей приводят к циклу, длина которого наименьшая изо всех возможных и равна (2 ' — 1) 4/3 бит [44]. 10.1.2. RC4 RC4 — поточный шифр с переменным размером ключа, разработанный Р. Ривестом. Алгоритм работает в режиме OFB, т. е. поток ключевой информа- ции не зависит от открытого текста. Используется 8-разрядный S-блок, таблица замен имеет размерность 8 х 256 и является перестановкой (зависящей от клю- ча) двоичных чисел от 0 до 255. Применяются два счетчика Q) и Qg c нулевым начальным состоянием (см. рис. 10.2). Рассмотрим процедуру генерации очередного байта гаммы. Пусть S; — содер- жимое ячейки с адресом i таблицы замен S-блока, у — очередной байт гаммы. 
210 Криптографические иетоды защиты иифориации в KQMnbloTEpHblx cHcTENAx и сник Рис. 10.1. Поточный шифр А5 Алгоритм RC4: 1. Такт работы ггервого счетчика: Q| = (Ql + 1) mod 28. 2. Такт работы второго счетчика: Д = (Дг + Я, ) mod 2~. 3. Ячейкгг таблицы замен S-блока с адресами Q| и Дг обмениваются своим со- держимым: Я ~-~ Я 4. Вычисление суммы содержимого ячеек таблицы замен S-блока с адресами Ql Т =(з, +Я, ) mod 2 . 
211 /NBA 10. Поючныи шифры 5. Считывание содерлсимого ячейки п1аблицы замен S-блока с адресом T: = ~т Рис. 10.2. Схема генератора псевдослучайных кодов RC4 Алгоритм инициализации таблицы замен8-блока: 1. Запись в каждую ячейку таблицы замен S-блока ее собственного адреса: %=0,255,S, =~. 2. Заполнение байтачи ключа другой 256-байтовой таблицы k = (k, }, ~ = О, 255. 3. Инициализация индекса~: ~ = О. 4. Перемешивание таблицы замен S-блока: % = О, 255, ! = (/+ S,. + k,. ) mod 28, S,. ~-~ S, Число состояний RC4 равно приблизительно 2" (256! х256). Таблица замен S-блока медленно изменяется при использовании, при этом счетчик Q~ обеспечивает изменение каждого элемента таблицы, а Д гарантиру- ет, что элементы таблицы изменяются случайным образом. 
212 Криптотрхфичсскив методы защиты информации в компьютерных системах и снях 1. 10.1.3. ORYX Поточный шифр ORYX предполагалось использовать для засекречивания данных, передаваемых в американских сетях сотовой мобильной связи. Как и в случае с алгоритмом А5, автор данного криптоалгоритма неизвестен, а сама схе- ма некоторое время держалась в секрете. В состав ГПК ORYX входят три 32-разрядных ~.ЕИ А, В и С, а также 8-разрядный S-блок с фиксированной таблицей замен размерностью 8 х 256. Ключом является начальное заполнение трех регистров LFSR. В экспортном ис- полнении применяется алгоритм разворачивания ключа, сокращающий ключе- вое пространство до размера, легко проверяемого при поиске ключа полным пе- ребором. Пусть S; — содер>ки ое яче ки табл цы за ен S-бл к с адре ом i; н, и CH — старшие байты LFSR А, В и C соответственно. Каждый байт гаммы у формируется следующим образом. Алгоритм ORYX: 1. Такт работы LFSR С. 2. Такт работы LFSR А, при этом используется один ггз двух ризличных много- членов в зависимости от значения бити LFSR C. 3. Такт или два такта работы LFSR В в зависимости от значения другого би- та LFSR C. 4. Вычисление гаммы: у = C„O+ S„O+ S, . Криптоанализ показал, что для вскрытия криптоалгоритма требуется 24 байта открытого текста и перебор 2" вариантов начального заполнения LFSR [44]. 10.1.4. CHANEI.EON Главная особенность поточного шифра CHAMELEON, разработанного P. Андерсоном, — высокая криптостойкость в сочетании со следующим необыч- ным для надежного шифра свойством: незначггтельные из,иенеггия в ключе вызы- виют такие же незначительные изменения в гамбие. Данное свойство очень по- лезно в ряде коммерческих приложений, например при защите интеллек1уаль- ной собственности в платном телевидении. В этой ситуации необходимо, чтобы для множества пользователей можно было транслировать один шифротект, ау каждого из пользователей имелись бы незначительно отличающиеся ключи расшифрования, которые давали бы незначительно отличающиеся открытые тексты. В результате применения такой схемы появляется возможность опреде- ления нарушителей, пытающихся незаконно тиражировать материал, предназна- ченный лишь для индивидуального использования. Криптосхема имеет двухступенчатую структуру (см. рис. 10.3). Первая сту- пень — генератор псевдослучайных 64-разрядных кодов. Вторая ступень— 
Гмм 10. IloTovHblE шифры 21) S-блок, таблица замен которого имеет объем 512 Кб и состоит из 2'6 64-разрядных слов. Ключевая информация — начальное заполнение ГПК и со- держимое таблицы замен. Пусть S-блок Рис. 10.3. Схема генератора CFQ_#_ELEON Q = 2~ А + 2' В + 2" C+ D суть — 64-разрядный код с выхода ГПК, который рассматривается как совокуп- ность четырех 16-разрядных слов А, В, С и D, иначе говоря, Q = (А, В, C 0); S;— содержимое ячейки таблицы замен S-блока с адресом ~. Тогда очередной эле- мент у 64-разрядной гаммы формируется следующим образом: f = Sw О+ ~в ~+~ Sc ~+~ Ь Таким образом, четыре 16-разрядных слова А, В, С и D c выхода ГПК исполь- зуются для выбора четырех 64-разрядных слов из таблицы замен, которые для получения 64-разрядного элемента гаммы суммируются по модулю 2. Результатом изменения 1 бита в ячейке таблицы замен является изменение около 4 бит на 512 Кб сформированной гаммы. Изменения находятся на тех же местах слова, что и измененные биты слова S;. Таким образом, при шифровании аудио- и видеосигналов можно сделать так, что знаки авторских прав будут по- являться в самых младших битах [44]. 
214 КриптотрАфические методы зАщиты информАции в KoMnbloTEpHblx системАх и сетях Алгоритм поточного шифрования SOLITAIRE (ПАСЬЯНС) предложен Б. Шнайером в 1999 г. [66]. Каждой букве р; исходного текста (рассматривается английский алфавит) ° с~ ° аЮ а~ау ° с~ ° Фаа p = р1p2...pð..p, i = 1, m, ставится в соответствие число от 0 до 25, например: А = 1, В = 2, C = 3 и т. д. Та- ким образом, можно записать р; C Zzq. Криптосхема генерирует ключевую по- следовательность (гамму) "( = '1т Д~" "(( "'1т„, т = 1, m y. E ~26 которая используется для шифрования стандартным образом, рассмотренным в гл. 1: с, =(р, +у,)mod 26; р, = (с, — у,, ) mod 26; т =1,Р2, где с = ст с~...с,...с,„, i = 1, т, с, с 7. ° "Трефы". Картам туз, двойка, ..., король соответствуют числа 1, 2, ..., 13, т. е. значение карты не меняется; ° "Бубны". Картам туз, двойка, ..., король соответствуют числа 14, 15, ..., 26, т. е. к значению карты прибавляется 13; 27,28, ...,39, ° "Черви". Картам туз, двойка, ..., король соответствуют числа т. е. к значению карты прибавляется 26; ® "Пики". Картам туз, двойка, ..., король соответствуют числа 40, к значению карты прибавляется 39; ° 'Джокеры". Джокерам А и В соответствует число 53. 41, ..., 52, т. е. Секретный ключ шифра — начальное состояние колоды карт. Возьмем в руки колоду карт и разложим карты лицевой стороной вверх. Джокер, расположен- ный левее, будем называть иервым джокером; джокер, расположенный правее— вторым джокером. суть зашифрованная последовательность. Ключевая последовательность формируется с использованием колоды карт, состоящей из 52 карт и двух джокеров. Существует 54!, или приблизительно 2,3 10", различных состояний колоды. Назовем одного джокера джокером А, другого — джокером В. Каждой карте следующим образом поставим в соответ- ствие числа от 1 до 53: 
215 Гмм 10. Поточные шифры Алгоритм генерации потока ключей: 1. Находим джокер А и перемещаем его циклически вправо через одну карту. Если джокер А является последней картой, перемещаем его за первую карту. 2. Находим джокер В и перемещаем его циклически вправо через две карты. Если джокер В является последней картой, перемещаем его за вторую кар- ту. Если джокер В является предпоследней картой, перемещаем его за пер- вую карту. расположенными правее второго джокера. 4. Возьмем последнюю (правую) карту в колоде и преобразуем ее в число. До- пустим, это число равно п. Меняем местами первые п карт со следующими 53 — п картами. Последняя карта остается на месте. Колода с последнии джокером после этого шага не меняет своего состояния. 5. Возьмем первуго (левую) карту в колоде и преобразуем ее в число. Допустим, это число п. Отсчипгаем от начала колоды п карт. Если карта с (п + 1)-м номером — джокер, возвращаемся к шагу 1 и начинаем все сначала. 6. Фиксируем число, соотвепгствующее карте с (п + 1)-м номером. Допустим, это число N. Элелгенпг гаммы вычисляется как N mod 26. Примечания: Пример 10.1. Рассмотрим сначала упрощенную ситуацию, когда колода со- стоит из карт 1, 2, ..., 8 и двух джокеров А и В. Предположим, состояние колоды карт имеет вид 615В234А857. Тогда последующие состояния колоды будут иметь вид: 615В2348А57. 61523В48А57. 57В48А61523. 48А615257ВЗ. 48А615257В 3. Шаг 1: Шаг 2: Шаг 3: Шаг 4: Шаг 5: 1. Джокеры и карты между ними на шаге 3 не двигаются, другие карты переме- щаются вокруг них. На шаге 3 колоду условно можно разделить на 3 секции: карты, расположенные левее первого джокера; карты, расположенные между джокерами, и карты, расположенные правее второго джокера. Если на шаге 3 первая секция пустая, после выполнения шага пустой оказывается третья сек- ция. Если на шаге 3 третья секция пустая, после выполнения шага пустой ока- зывается первая секция. Если на шаге 3 пустыми являются и первая и третья секции, колода после выполнения шага не изменит своего состояния. 2. Цель оставления последней карты на месте на шаге 4 — сделать шаг обрати- мым, что, как отмечает автор, является важным для анализа защищенности. 
2l6 Пример 10.2. Пусть начальное состояние колоды, состоящей из 52 карт и двух джокеров, имеет вид Тогда последующие состояния колоды будут иметь вид: Элемент гаммы: 4. Элемент гаммы: 23. Последующими элементами гаммы будут 10 24 8 25 18 6 4 33. В результате зашифрования с помощью полученной гаммы текста ААААА ААААА будет получена следующая шифрограмма: EXKYI ZSGEH. Ключом, как уже отмечалось, является порядок начального расположения карт. Возможны следующие варианты: ° начальное состояние колоды случайным образом формируется отправителем сообщения и передается получателю; ° отправитель и получатель для получения начального расположения карт в колоде используют согласованную ключевую фразу. Алгоритм генерации начального состояния по ключевой фразе следующий. Первоначально карты колоды в авторском варианте располагаются в порядке для игры в бридж. Предпоследней картой колоды является джокер А, а послед- ней картой колоды — джокер В: 1 2 3 4 5 б 7 ... 47 48 49 50 51 52 A В. Пусть k =k,k2...k,...k„, ~ =1, r, k, c Z,6, Шаг 1: Шаг 2: Шаг 3: Шаг 4: Шаг 5: Шаг 1: Шаг 2: Шаг 3: Шаг 4: Шаг 5: КриптогрАфические методы зАщиты информАции в компьютерных системАх и сетйх 1 2 3 4 5 6 7 ... 47 48 49 50 51 52 А В. 1 2 3 4 5 6 7 ... 47 48 49 50 51 52 В А. 1 В 2 3 4 5 6 ... 46 47 48 49 50 51 52 A. В 2 3 4 5 6 7 ... 47 48 49 50 51 52 А 1. 2 3 4 5 6 7 8 ... 48 49 50 51 52 А В 1. 2 3 4 5 б 7 8 ... 48 49 50 51 52 A В 1. 2 3 4 5 6 7 8 ... 48 49 50 51 52 В А 1. 2 3 4 5 б 7 8 ... 48 49 50 51 52 А 1 В. А 1 В 2 3 4 5 ... 45 46 47 48 49 50 51 52. 51 А 1 В 2 3 4 ... 44 45 46 47 48 49 50 52. 51 А 1 В 2 3 4 ... 44 45 46 47 48 49 50 52. 
217 I hABA 10. Поточные шифры суть ключевая фраза длиной r. Для каждого элемента k, ключевой фразы выпол- няются следующие шаги (шаги 1-4 совпадают с шагами 1-4 алгоритма форми- рования гаммы, шаг 5 — по сути повторение шага 4, где вместо последней карты в качестве числа отсчета используется k,). Алгоритм генерации начального состояния нриптосхемь1 по нло- чевой фразе: 1. Находим джокер А и перемещаем его циклически вправо через одну карпгу. Если джокер А является последней карпгой, перемещаем его за первую карту. 2. Находим джокер В и перемегиаем его циклически вправо через две карты. Если джокер В является последней картой, перемещаем его за впгорую кар- my. Если джокер В является предпоследней карпгой, перемещаем его за пер- вую карту. 3. Меняем местами карты, расположенные левее первого джокера, с картами, расположенными npasee второго джокера. 4. Возьмем последнгого (правую) карту в колоде и преобразуем ее в число. До- пустим, это число равно и. Меняем местами первые и карт со следующими 53 — n картами. Последняя карта остается на месте. Колода с последним джокером после этого шага не меняет своего состоянггя. 5. Меняем местами первые k, карт со следующими 54 — k, картами. Примечания: 1. Возможно использование двух последних элементов k, ~, k, ключа для опре- деления позиций джокеров: джокер А помещается после k, 1 карты, джокер  — после k,-й. 2. Автор криптосхемы рекомендует использовать ключевую фразу длиной не менее 80 символов. Криптосхему SOLITAIRE легко обобщить на случай произвольного числа "карт в колоде" и произвольной мощности входного алфавита. 10.2. Самосинхронизирующиеся поточные шифры Самосинхронизирующиеся поточные шифры благодаря свойству восстанав- ливать информацию после потери синхронизации — это наиболее распростра- ненный метод шифрования в дипломатических, военных и промышленных сис- темах связи. Наиболее распространенный режим функционирования самосин- хронизирующихся поточных шифров — режим обратной связи по шифротексту. В шифрах рассматриваемого типа каждый зашифрованный символ (бит при последовательной передаче) зависит от ключа k и только от последних гч' сим- волов шифротекста. Память разрядности N,„ïîòî÷íîãî шифра может быть реа- 
218 Криптографические мноды защиты информхции в компьютерных системдх и сетях лизована различными способами, простейший из них — использование N -разрядного регистра сдвига (рис. 10.4). Рис. 10.4. Общая схема самосинхронизирующегося паточного шифра Пусть Р;.— функция шифрования, G — функция, преобразующая на стадии инициализации секретный ключ К и синхропосылку S во внутренний ключ k и вектор инициализации IV регистра сдвига. Тогда уравнение работы криптос- хемы имеет вид (k, IV) =G(K,S), (с „„...со) = IV, Я, = F~(k,С, „...С,,), С =P O+Z,. Расшифрование символа закончится успешно, если последние N символов шифротекста были приняты правильно. Пусть N,. — разрядность символа, тогда одиночная ошибка в канале связи вызовет серию из N„,N, потенциально непра- вильно расшифрованных бит на принимающей стороне. Самосинхронизирую- щееся шифрование имеет смысл применять лишь тогда, когда вероятность бито- вых ошибок в двоичном канале без памяти значительно меньше величины (Ф„,М,) . Дополнительным достоинством рассматриваемой криптосхемы являет- ся возможность реализации поверх любой цифровой коммуникационной систе- мы [44, 65). Новым направлением является использование для построения самосинхрони- зирующихся поточных шифров последовательной и параллельной композиции простейших функций /шифрования. Параллельная композиция суть побитовый ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° б ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
AABA 10. Поточные шифры 219 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° XOR последовательностей с выходов двух блоков f, в последовательной компо- зиции выход одного блока/является входом другого. На рис. 10.5 показана схе- ма поточного шифра У. Маурера. Рис. 10.5. Схема Маурера Базовый компонент схемы — 3-битовый регистр сдвига с зависящей от ключа функцией f выхода. Четыре таких компонента образуют блок следующего уров- ня — пару параллельно соединенных цепочек из двух базовых компонентов. На следующем уровне 4 таких блока собраны в последовательную композицию. На двух следующих уровнях эта конструкция повторяется. Результирующая после- довательностная машина (ПМ) имеет входную память объемом 192 бита и 4 би- та-компонента на каждый бит памяти. Внутреннее состояние ПМ служит входом для зависящей от ключа функции шифрования F, Для задания конструкций бу- левых функций f ключ шифрования "разворачивается" в 256 байт, каждый из которых определяет таблицу истинности соответствующей функции. Основная идея данной конструкции — построение ПМ, количество элементов памяти которой превышает разрядность входной памяти. 
ГЛАВА 11 Стандарт криптографической защиты XXI века — Advanced Encryption Standard (АЕ8) 11.1. История конкурса на новый стандарт криптозащиты В 1997 г. национальный институт стандартов и технологий США (NIST) объ- явил о начале программы по принятию нового стандарта криптографической защиты — стандарта XXI в. для закрытия важной информации правительственно- го уровня на замену существующему с 1974 г. алгоритму DES, самому распро- страненному криптоалгоритму в мире. DES считается устаревшим по многим параметрам: длине ключа, удобству реализации на современных процессорах, быстродействию и др., за исключением самого главного — стойкости. За 25 лет интенсивного криптоанализа не было найдено методов вскрытия этого шифра, существенно отличающихся по эффективности от полного перебора по ключе- вому пространству. Требования к кандидатам были следующие: ° криптоалгоритм должен быть открыто опубликован; ° криптоалгоритм должен быть симметричным блочным шифром, допускаю- щим размеры ключей в 128, 192 и 256 бит; криптоалгоритм должен быть предназначен как для аппаратной, так и для программной реализации; ° криптоалгоритм не должен быть запатентован, в противном случае патентные права должны быть аннулированы; ° криптоалгоритм подвергается изучению по следующим параметрам: стойко- сти, стоимости, гггбкости, реализуемости в smart-картах. Стойкость. Это самый важный критерий в оценке алгоритма. Оценивались: способность шифра противостоять различным методам криптоанализа, стати- стическая безопасность и относительная защищенность по сравнению с другими кандидатами. Учитывалась стойкость к атаке методом полного перебора с уче- том прогнозируемого роста вычислительных мощностей. Спгоимость. Не менее важный критерий, учитывая одну из основных целей NIST, — широкая область использования и доступность AES. Стоимость зависит от вычислительной эффективности (в первую очередь быстродействия) на раз- личных платформах, удобства программной и аппаратной реализации, низких 
[лдвл 11. Стандарт криптогрдфическои защиты ХХ! векд — AdvawcEd Енспурпон Sxawdand (AES) 221 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° требований к памяти, простоты (простые алгоритмы легче реализовывать, они более прозрачны для анализа). Гибкость. Гибкость включает способность алгоритма обрабатывать ключи больше оговоренного минимума (128 бит), надежность и эффективность выпол- нения в разных средах, возможность реализации других криптографических функций: комбинированного шифрования, хеширования и т. д. Другими словами, AES должен быть существенно более эффективным с точ- ки зрения практической реализации (в первую очередь скорости шифрования и формирования ключей), иметь больший запас прочности, чем TripleDES, при этом не уступая ему в стойкости. Важная область использования AES в будущем — smart-карты, при этом глав- ной проблемой является небольшой объем доступной памяти. NIST исходил из допущения, что некоторые дешевые карты могут иметь всего 256 байт RAM (для вычисляемых данных) и 2000 ROM (для хранения алгоритмов и констант). Су- ществует два основных метода формирования раундовых ключей: ° вычисление на начальном этапе работы криптоалгоритма и хранение в памяти; ° вычисление раундовых ключей "на лету". Ясно, что второй вариант уменьшает затраты RAM, и поэтому наличие такой возможности в криптоалгоритме является его несомненным достоинством. На конкурс были приняты 15 алгоритмов, разработанных криптографами 12 стран — Австралии, Бельгии, Великобритании, Германии, Израиля, Канады, Кос- та-Рики, Норвегии, США, Франции, Юх< ой Ко е и Япон В финал конкурса вышли следующие алгоритмы: MARS, TWOFISH и RC6 (США), RIJNDAEL (Бельгия), SERPENT (Великобритания, Израиль, Норвегия). По своей структуре TWOFISH является классическим шифром Фейстеля; MARS и RC6 можно отнести к модифицированным шифрам Фейстеля, в них использу- ется новая малоизученная операция циклического "прокручивания" битов слова на число позиций, изменяющихся в зависимости от шифруемых данных и сек- ретного ключа; RIJNDAEL u SERPENT являются классическими SP-сетями. MARS u TWOFISH имеют самую сложную конструкцию, RIJNDAEL и RC6 — са- мую простую. Финалисты будут описаны по единой схеме, данной в документе NIST. Сна- чала описываются обнаруженные "слабости" алгоритма (если таковые имеются), затем преимущества и, наконец, недостатки. MARS выставлен на конкурс фирмой IBM, одним из авторов шифра является Д. Копперсмит, участник разработки DES. В алгоритме не обнаружено слабо- стей в защите. Преимущества: ° высокий уровень защищенности; ° высокая эффективность на 32-разрядных платформах, особенно поддержи- вающих операции умножения и циклического'сдвига; потенциально поддерживает размер ключа больше 256 бит. 
222 КриптогрдфиvEcKHE методы мщиты информАции в Koulll loTEpul Ix cucTEMAx u cETIIx Недостатки: сложность алгоритма затрудняет анализ его надежности; снижение эффективности на платформах без необходимых операций; ° сложность защиты от временного анализа и анализа мощности. RC6, предложенный фирмой RSA ЬаЬ, одним из авторов является P. Ривест. В алгоритме не обнаружено слабостей в защите. Преимущества: ° высокая эффективность на 32-битовых платформах, особенно поддерживаю- щих операции умножения и циклических сдвигов; Ф Э простая структура алгоритма упрощает анализ его надежности; наличие хорошо изученного предшественника — RC5; быстрая процедура формирования ключа; потенциально поддерживает размер ключа больше 256 бит; длина ключа и число раундов могут быть переменными. Недостатки: относительно низкий уровень защищенности; снижение эффективности на платформах, не имеющих необходимых операций; сложность защиты от временного анализа и анализа мощности; невозможность генерации раундовых ключей "на лету". ЯИИОАЕ1 большинством участников конкурса назван как лучший выбор, ес- ли будет отвергнут их собственный шифр. Основан на шифре SQUARE тех же авторов. В алгоритме не обнаружено слабостей в защите. Преимущества: ° высокая эффективность на любых платформах; высокий уровень защищенности; хорошо подходит для реализации в smart-картах из-за низких требований к памяти; быстрая процедура формирования ключа; хорошая поддержка параллелизма на уровне инструкций; поддержка разных длин ключа с шагом 32 бита. Недостатки: е уязвим к анализу мощности. SERPENT — разработка профессиональных криптоаналитиков P. Андерсона, Э. Бихэма и Л. Кнудсена. Создав шифр, успешно противостоящий всем извест- 
Гмм 11. Сткидкрт криптотрдфичвскоя защиты XXI вва — Advanced Еисвурт1ои Ьтвийв4 (AES) 223 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Þ ° ° ° ° ° ° ° ° ° ° ° ° ° ° Þ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Þ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Þ ° ° ° ° ° ° ным на сегодня атакам, разработчики затем удвоили количество его раундов. В алгоритме не обнаружено слабостей в защите. Преимущества: ° высокий уровень защищенности; ° хорошо подходит для реализации в smart-картах из-за низких требований к памяти. Недостатки: ° самый медленный алгоритм среди финалистов; ° уязвим к анализу мощности. TWOFISH основан на широко используемом шифре BLOWFISH; один из ав- торов разработки — Б. Шнайер. Главная особенность шифра — изменяющиеся в зависимости от секретного ключа таблицы замен. В алгоритме не обнаружено слабостей в защите. Преимущества: ° высокий уровень защищенности; ° хорошо подходит для реализации в smart-картах из-за низких требований к памяти; ° высокая эффективность на любых платформах, в том числе на ожидаемых в будущем 64-разрядных архитектурах фирм Intel и Motorola; ° поддерживает вычисление раудовых ключей "на лету"; ® поддерживает распараллеливание на уровне инструкций; ° допускает произвольную длину ключа до 256 бит. Недостатки: ° особенности алгоритма затрудняют его анализ; ° высокая сложность алгоритма; ° применение операции сложения делает алгоритм уязвимым к анализу мощ- ности и временному анализу. В табл. 11.1 — 11.4 представлены сравнительные характеристики финалистов AES по данным работы [61]. 
221 Криптогркфические методы защиты информации в компьютерных системкх и сетях Таблица 11.1. Скорость шифрования (число процессорных циклов, требуемое для шифрования одного 128-разрядного блока с использованием 128-разрядного ключа) Таблица 11.2. Параллелизм и теоретическая производительность Таблица 11.3. Время формирования ключа при реализации на Си (число процессорных циклов при шифровании одного 128-разрядного блока с использованием 128-разрядного ключа) Таблица 11.4. Требуемая память при реализации на 3ava, байт В октябре 2000 г. конкурс завершился. Победителем был признан бельгий- ский шифр RIJNDAEL, как имеющий наилучшее сочетание стойкости, произво- дительности, эффективности реализации и гибкости. Его низкие требования к объему памяти делают его идеально подходящим для встроенных систем. Ав- торами шифра являются Joan Daemen u Vincent Rijmen, начальные буквы фами- лий которых и образуют название алгоритма — RIJNDAEL. 
аава 11. Стаидарт криптографической мщиты XXI века — А4чаисЫ Еислурпои Ьтаит1алс1 (AES) 225 ° ° ° ° ° ° Þ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 11.2. Блочный криптоалгоритм RIJNDAEL Материалы данного раздела в значительной степени основаны на авторском документе [60], представленном на конкурс AES. 11.2.1. Математические основы В криптоалгоритме некоторые операции выполняются над байтами, которые рассматриваются как элементы поля GF(2 ). 8 Элементами GF(2 ) являются двоичные многочлены степени N ( 8, которые 8 могут быть заданы строкой своих коэффициентов. Так, например, байту 01010111 ('57' в шестнадцатеричной форме) соответствует многочлен х +х +х +х+1. 6 4 2 Сложение в поле GF(2 ) — это обычная операция сложения многочленов с ис- 8 пользованием операции ХОР при приведении подобных членов; или операция поразрядного XOR, если элементы поля представлены в виде строки коэффици- ентов соответствующих многочленов. Например, '57' + '83' = 'D4', так как (х + х + х + х + 1) + (х' + х + 1) = х + х + х + х, ИЛИ 01010111 + 10000011 = 11010100. В конечном поле для любого ненулевого элемента а существует обратный аддитивный элемент -а, при этом а + (-а) = О. В GF(2') справедливо а + а = О, где нулевой элемент — это 00, т. е. каждый ненулевой элемент является своей собственной аддитивной инверсией. В конечном поле для любого ненулевого элемента а существует обратный мультипликативный элемент а ', при этом аа ' = 1. Умножение в поле GF(2 )— это обычная операция умножения многочленов со взятием результата по моду- лю некоторого неприводимого двоичного многочлена (p(x) восьмой степени и с использованием операции XOR при приведении подобных членов. В RIJNDAEL выбран тр(х) = х' + х' + х' + х + 1 неприводимый полинам показателя 51. Диаграмма состояний соответствующего ему устройства (рис. 11.1) имеет 5 кодовых колец по 51 состоянию в каждом и один вырожденный тривиальный цикл, соответствующий состоянию '00', пере- ходящему самому в себя. Умножение в GF(2 ) проще выполнять, рассматривая 8 ненулевые элементы поля как степени некоторого примитивного элемента и. Определим структуру устройства (генератора элементов поля), позволяющего поставить в соответствие каждому ненулевому элементу поля соответствующую степень примитивного элемента. 
226 Криптографические методы мщиты информации в компьютерных системах и сетпх Рис. 11.1. LFSR, соответствующий характеристическому многочлену (p(x)=x +х +х +х+1 Имеем (p(x+1) =(х+1) +(х+1) +(х+1) +(х+1)+ 1= = (х + 1) + (х + 1) + (х + х + х + 1) + (х + 1) + 1 = =х +х +х +х + 1=(р(х). Многочлен ф(х) примитивный, а значит, соответствие между различными формами представления элементов GF(2 ) можно получить, моделируя работу в устройства, показанного на рис. 11.2: 00000001-'01'(и = 1) 00000011-'03'(и) 00000101- '05' (и') 00001111-'OF'(и') 00010001-'1Г(и ) 00110011-'33'(и') 01010101- '55' (иб) 11111111- ' FF' (è') 0 0011010 - '1А' (и') 0 0101110 - '2Е' (и ) ... 11110111- ' F7' (и ) 00000010-'02'(oP) 00000110-'06'(и" )... 1100 0111- ' С7' (и~'~ ) 01010010-'52'(и~') 11110110 - ' Fá' (и254). Рмс. 11.2. Генератор элементов поля GF(2') Работу данного устройства моделирует программа, приведенная ниже. 
Гмвл 11. Стлидарт криптогрлфичкской мщиты XXI вва — Адчтнсй Еислурт1ои Ьтлиддлд (AES) 227 ° ° ° ° ° ° ° Þ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ;Программа предназначена для запуска в отладчике в пошаговом режиме ;AL — состояние генератора .MODEL TINY . СОРЕ ORG ВЕЫ0: MOV MOV 100Н AL, 80Н СХ, 255 MOV AX, 4СООН INT 21Н DB 0Р8Н ;Вектор обратных связей BEGIN FB END Например, (х +х +х +х+ 1)(х +х+1) =х +х +х +х +х +х +х +х + 1= (х + х + 1) mod cp(x) или 98 80 178 е а значит, '57' '83' = 'СГ. В GF(2 ) справедливо а значит, ненулевые элементы m' и Ы(т' ф /) являются взаимно обратными тогда и только тогда, когда i+у =255. Например, т. е. '1Г 'В4' = 1 или (х + 1)(х +х +х +х) = 1. Умножая произвольный многочлен 7 б 5 4 3 2 a(x) = ~ттх + ~тбх + aux + a4x + азх + а2х + атх + ап нах, получим в общем случае многочлен восьмой степени 8 7 6 5 4 3 2 а7х +а~х + a5x +a4x + a3x + а2х + а)х + a~. Если ат —— О, мы сразу получаем результат умножения; если ат = 1, необходи- мо взять результат по модулю тв(х), что в рассматриваемой ситуации, очевидно, эквивалентно вычитанию из результата т1т(х). Таким образом, умножение а(х) на SТЕР: MOV RCR JNC XOR NEXT: XOR LOOP АН, AL AL,1 NEXT AL, FB AL, АН STEP ;AL = '01' ;Число циклов равно ;количеству ненулевых элементов поля ;копия "старого" состояния генератора ; AL — "новое" состояние генератора ;Если СХ не равно 0, переход ;на начало следующего такта работы генератора 
228 Криптографические мноды мщиты информвции в компьютерных систсмвх и санх х на байтовом уровне — это либо результат циклического сдвига в сторону стар- ших разрядов байта (Q7apaqa4Q3aqa~ap) если а, = О; либо поразрядный XOR результата циклического сдвига байта (Q7Q6Q5Q4Q3Q2alap) в сторону старших разрядов с вектором обратной связи '1В', если ат — — 1. Пусть xtime(a) суть операция умножения элемента поля а на х. Тогда умножение на х" можно осуществить путем и-кратного повторения операции xtime(a). Например, '57' '13' = 'FE', так как '57' '02' = xtime(57) = 'AE', '57' '04' = xtime(AE) = '47'; '57' 'ОЗ' = xtime(47) = 'ЗЕ'; '57' '10' = хйгтге(ЗЕ) = '07'; 1 '57'. '13' = '57' ('01'O+ '02'O+ '10') = '57'O+ 'АЕ O+ '07' = 'FE. Четырехбайтовому слов~ может быть поставлен в соответствие многочлен с коэффициентами из GF(2 ) степени не более трех. Сумма двух многочленов с коэффициентами из GF(2) — это обычная операция сложения многочленов 8 с приведением подобных членов в поле GF(2'). Таким образом, сложение двух 4-байтовых слов суть операция поразрядного XOR. Умножение — более сложная операция. Предположим, мы перемножаем два многочлена a(x) = Q3x + Q3x + a~x + ap v b(x) = box + Ьгх + Ьгх + Ьп. г .3 Результатом умножения с(х) = a(x)b(x) будет многочлен cp = apbp' с~ — — a~bp O+ apb~', cz = a&gt bp O+ a b~ O+ a с3 = Q3bp O+ Q3b~ O+ a~b O+ apb3', с4 = Q3b~ O+ a2b O+ а1Ь3', с3 = гг3Ьг O+ Ы73~ сб = а3Ь3. Для того чтобы результат умножения мог быть представлен 4-байтовым сло- вом, необходимо взять результат по модулю многочлена степени не более четы- рех. Авторы шифра выбрали многочлен ф(х) = х +1, 
I ивл 11. Стлндлрт криптогрлфичкскои мщиты ХХ! вва — А4члиск4 Еислурт1ои Ьтли4лл4 (AES) '229 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ЕЕЕ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° а ° для которого справедливо х' mod(p(x) = х Таким образом, результатом умножения двух многочленов d(x) = а(х) Э Ь(х) будет многочлен d(x) = dp + Нгх' + dqx + dp, где dp = apbp О+ азЬ1 О+ агЬг 8 аА' Л а1 = а1Ьо 9 М 9 аА 0+~ агЬз; А = агЬо О+ a~b& t; О+ а Ьг О+ а36 Нг —— a~bp 0+~ агЬ1 0+~ a ~b~ 0+~ аоЬг. В матричной форме это может быть записано следующим образом: dp Qp аз аг Q) bp b), "г b3 dg ао аз а~ а1 ао а~ а1 ар На рис. 11.3 показано устройство для одновременного умножения многочлена Ь(х) = bp + Ь.х' + box + bp на многочлен г а(х) =агх +агх + а~х+ао и деления на ф(х) =х +1. Рис. 11.3. Устройство для одновременного умножения и деления многочленов Уравнения работы блока умножения на '02' имеют вид: „'~О =.Р7; у~ —— xp Ю хт', 
2)0 Криптографические методы защиты информации в компьютариых системах и сетях уз=хг 9х7' У4 хз 9 х71 „~5 Х4~ .~6 — ~5~ У7 = Хб. Уравнения работы блока умножения на '03' имеют вид: Уо = х7 9 хо, у~ — — хо O+ х7 9 x), у„=xl 9х2, Уз х2 9 х7 9 Z3i У4 х3 9 х7 9 Z4i У5 х4 9 Z5i уб = «59ZG) ут =хь 9хь На получение результата (остатка от деления произведения а(х)Ь(х) íà ф(х)) требуется 4 такта. Подача на вход устройства при нулевом начальном состоянии последовательности байтов 1000 ('Oi' '00' '00' '00') вызывает такую последова- тельность переключений регистров: аца~ ага~ ~зЖФ~1мг ~г~зфф~1 ~~~г~ф~о Каждое состояние приведенной последовательности дает соответствующий столбец матрицы преобразования, обеспечивающего получение того же резуль- тата за один такт. Пусть Ь(х) = b3Z + Ь2х + Ь~х + Ьо. Умножению на х многочлена Ь(х) с коэффициентами из GF(2 ) по модулю s многочлена ф(х) = х +1, учитывая свойства последнего, соответствует циклический сдвиг байтов в пре- делах слова в сторону старшего байта, так как х Э Ь(х) = Ь.х' + Ь~х + Ьо« + Ьо. 
nasa 11. Стандарт криптогркфичкскои эящиты XXI вна — Адчдисет( Еиспурт)ои Ьтмдмд (AES) 231 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 11.2.2. Структура шифра RIJNDAEL — это итерационный блочный шифр, имеющий переменную длину блоков и различные длины ключей. Длина ключа и длина блока могут быть рав- ны независимо друг от друга 128, 192 или 256 битам. Промежуточные результаты преобразований, выполняемых в рамках крипто- алгоритма, называются состояниями (state). Состояние (рис. 11.4) можно пред- ставить в виде прямоугольного массива байтов. Этот массив имеет 4 строки, а число столбцов Nq равно длине блока, деленной на 32. Ключ шифрования также представлен в виде прямоугольного массива с че- тырьмя строками. Число столбцов Ж» равно длине ключа, деленной на 32. Рис. 11.4. Пример представления состояния (N» = 6) и ключа шифрования (N» = 4) В некоторых случаях ключ шифрования рассматривается как линейный мас- сив 4-байтовых слов. Слова состоят из 4 байт, которые находятся в одном столбце (при представлении в виде прямоугольного массива). Входные данные для шифра обозначаются как байты состояния в порядке апо, а|о, azp, а&gt о, о, а 1, ~, а 1, 4&g ; ... После заве шения де ствия шифра вы данные получаются из байтов состояния в том &gt ке поряд Число раундов М„зависит от значений NI, и N», как показано в табл. 11.5. Таблица 11.5. Число раундов N, как функция от длины ключа N» и длины блока Nb Раундовое преобразование. Раунд состоит из четырех различных преобразо- ваний. На псевдо-Си это выглядит следующим образом: с Round (State, RoundKey) ByteSub(State); // замена байтов ShiftRow(State); // сдвиг строк MixColumn(State); // перемешивание столбцов AddRoundKey(State, RoundKey); // добавление раундового ключа Последний раунд шифра немного отличается от остальных. Вот как он вы- ГЛЯДИТ: 
2)2 Криптографические мноды эдщиты информации в компьютерных системах и снях ByteSub(State); // замена байтов Shi ftRow(State); // сдвиг строк AddRoundKey(State, RoundKey); // добавление раундового ключа В приведенной записи функции (Round, ByteSub и т. д.) выполняют свои дейст- вия над массивами, указатели (т. е. State, RoundKey) на которые им передаются. Как можно заметить, последний цикл отличается от простого цикла только отсутствием перемешивания столбцов. Каждое из приведенных преобразований разобрано далее. Замена байтов (ByteSub). Преобразование ByteSub представляет собой нели- нейную замену байтов, выполняемую независимо с каждым байтом состояния. Таблицы замены S-блока являются инвертируемыми и построены из композиции таких двух преобразований, как: 1) получение обратного элемента относительно умножения в поле GF(2 ), нуле- вой элемент '00' переходит сам в себя; 2) применение преобразования над GF(2), определенного следующим образом: 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 У1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 х„ Уз 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 Х5 0 Другими словами, суть преобразования может быть описана уравнениями: у„= x„O+ х 0+ х, 0+ х, 0+ х,; у, = хо 0+х, 0+х 0+х 0+х; у, = xo O+ õ, O+ х, (B x„ O+ х,; у, = хо 0+х, O+х, 0+х, 0+х; у = хо 0+ х, 0+ х 0+ х, 0+ х; у5 xi O+ х O+ хт O+ х4 O+ х5 y6 — х2 0+ х3 О х4 О х5 О хб у, =х 0+x4 0+x О+х 0+x . ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Э ° ° ° ° ° ° Э ° ° ° ° ° ° ° ° 
nasa 11. Стандарт криотографичкскои тттщиты XXI вва — Адчаисй Еисаурт~ои Ьтмдмд (AES) 233 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub(State). Рис. 11.5 иллюстрирует применение преобразования ByteSub К СОСТОЯНИЮ. Рис. 11.5. ByteSub действует на каждый байт состояния Преобразование сдвига строк (ShiftRow). Последние 3 строки состояния цик- лически сдвигаются на различное число байтов. Строка 1 сдвигается на Cl байт, строка 2 — на С2 байт, и строка 3 — на С3 байт. Значения сдвигов Cl, С2 и СЗ за- висят от длины блока Nb. Их величины приведены в табл. 11.б. Таблица 11. б. Величина сдвига для разной длины блоков Операция сдвига последних трех строк состояния обозначена как ShiftRow (State). Рис. 11.6 показывает влияние преобразования на состояние. Рис. 11.6. ShiftRow действует на строки состояния Преобразование перемешивания столбцов (MixColumn). В этом преобразова- нии столбцы состояния рассматриваются как многочлены над GF(2 ) и умножа- 8 ются по модулю х + 1 на многочлен g(x), выглядящий следующим образом: g(x) = '03'х + '01'х + 'ОГх + '02'. Это может быть представлено в матричном виде следующим образом: b0 b, '02' '03' '01' '01' ао ! ! ! ! ! ! ! ! ~2 b3 ! ! ! ! ! ! ! ! а '03' '01' '01' '02' аз 
2)4 КРИПтОГРафИЧЕСКИЕ МЕТОДЫ ЗАЩИТЫ ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ СИСТЕМАХ И СЕТЯХ Применение этой операции ко всем четырем столбцам состояния обозначено как MixColumn(State). Рис. 11.7 демонстрирует применение преобразования MixColumn к столбцу состояния. Рис. 11.7. MixColumn действует на столбцы состояния Добавление раундового ключа. В данной операции раундовый ключ добавля- ется к состоянию посредством простого поразрядного XOR. Раундовый ключ вырабатывается из ключа шифрования посредством алгоритма выработки клю- чей (key schedule). Длина циклового ключа равна длине блока Nl,. Преобразова- ние, содержащее добавление посредством XOR раундового ключа к состоянию (рис. 11.8), обозначено как AddRoundKey(State, RoundKey). 03 04 05 02 05 03 01 01 02 01 02 k10 k11 k,2 13 14 10 b111 13 14 12 а12 013 14 25 23 24 21 22 20 Ь21 Ь22 23 24 Ь2ь 20 22 23 24 а„ 25 20 32 33 34 35 31 32 33 34 35 30 31 30 30 33 34 35 ~32 Рис. 11.8. При добавлении ключа раундовый ключ складывается посредством операции XOR с состоянием Алгоритм выработки ключей (Key Schedule). Раундовые ключи получаются из ключа шифрования посредством алгоритма выработки ключей. Он содер> ит компонента: расширение ключа (Кеу Expansion) и выбор раундового ключа (Round Кеу Selection). Основополагающие принципы алгоритма выглядят сле- дующим образом: ° общее число битов раундовых ключей равно длине блока, умноженной на число раундов, плюс 1 (например, для длины блока 128 бит и 10 циклов тре- буется 1408 бит циклового ключа); ° ключ шифрования расширяется в расширенньш ключ (Expanded Key); ° раундовые ключи берутся из расширенного ключа следующим образом: пер- вый раундовый ключ содержит первые Nb слов, второй — следующие Nb слов ИТ. Д. Расширение ключа (Кеу Expansion). Расширенный ключ представляет собой линейный массив 4-байтовых слов и обозначен как W[Ng(N„+ 1)]. 
Гмпд 11. Сткндкрт криптогрдфичкской эящиты XXI векд — Advanced Енспуртюн Ьтлндмд (AES) 2) 5 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Первые Nq слов содержат ключ шифрования. Все остальные слова определя- ются рекурсивно из слов с меньшими индексами. Алгоритм выработки ключей зависит от величины Ит,. Ниже приведена версия для Ng, равного или меньшего шести, и версия для Ит,. большего шести. Для lVq (б имеем: r KeyExpansi on (Ci pherKey, W) for (i = 0; i ( Nk; i++) W[i] = CipherKey(i]; for (3 = Nk; 3 & t; Nb*(Nr& t 1); j W(j] = Х[3'-Nk] " SubByte( Roti ( Х[3'-1] ) ) " Rcon[j/Nk]; for (i = 1; i ( Nk йй i+j ( Nb*(Nr> ); i Х[1+3] = W(i &g ;j - k] Х[~+3'- Как можно заметить, первые Мт,. слов заполняются ключом шифрования. Каж- дое последующее слово W[i] получается посредством XOR предыдущего слова W[i — 1] и слова íà lVq позиций ранее W[i — Ит,]. Для слов, позиция которых кратна Nq, перед XOR применяется преобразование к й~[т' — 1], а затем еще прибавляется раундовая константа. Преобразование содержит циклический сдвиг байтов в слове, обозначенный как Roti, затем следует SubByte — замена байтов. Для Ит, & t б име r KeyExpan si on (Ci pher Key, Х) for (i=0; i(Nk; i++) W[i]=CipherKey[i]; for (j=Nk; j <Nb*(Nr& t 1); j W[j ] = W(j -Nk] " SubByte (Roti (W(j -1]) ) " Rcon [j /Nk]; for (i=1; i&lt 4; i +) W[i j = W(i&gt j-Nk] W( W[j &gt 4 = W[j&gt 4 Nk] " SubBy e(W[j for (i=5; i(Nk; i++) W(i&gt j = W[i&l ;j-Я] W(i Отличие от ранее рассмотренной схемы состоит в применении SubByte для каждого четвертого байта из N&l Раундовая константа не зависит от Ng и определяется следующим образом: Rcon[i] = (RC[i], '00', '00', '00'), где RC[i] C GF(2 ), причем RC[0] = '01' = 1, RC[i] = xtime(Rcon[t — 1]) = х'. Выбор раундового ключа. Раундовый ключ i получается из слов массива ра- ундового ключа от W[Nq i] и до W[Nq (г + 1)], как показано на рис. 11.9. Примечание. Алгоритм выработки ключей можно осуществлять и без исполь- зования массива W[N>( V + 1 ]. ля реализац й в кото ых существе но тре вание к занимаемой памяти, цикловые ключи могут вычисляться "на лету" по- средством использования буфера из И~. 
2)б Криптогрдфичсскик мноды эащиты информации в компьютерных системах и сетях ;'4~:.:: :;::т; 6 7 0 1 2 3 9 10 11 13 Рис. 11.9. Расширение ключа и выбор раундового ключа для Nb = 6 и _#_„= 4 Криптоалгоритм. Шифр Rij ndael состоит: ° из начального добавления раундового ключа; ° N„- 1 раундов; ® заключительного раунда. На псевдо-Си это выглядит следующим образом: r Иj ndael (State, CipherKey) KeyExpansion (CipherKey, ExpandedKey); // Расширение ключа AddRoundKey(State, ExpandedKey); // Добавление раундового ключа For ( i=1; ~(Иг; i») Round(State,ÅõðàndådKåó+NÜ*i); // раунды FinalRound(State, ЕхрапстестКеу+ИЬ*Иг); // заключительный раунд Если предварительно выполнена процедура расширения ключа, то Rijndael будет выглядеть следующим образом: r Rijndael (State, CipherKey) AddRoundKey(State, ExpandedKey) For ( i=1 ; i(Иг ; i ++) Round(State,ÅõðàïdådÊåó+ÈÜ*i); Fi nal Round (S ta te, ЕхрапстестКеу+ИЬ*Иг); Расширенный ключ должен всегда получаться из ключа шифрования и нико- гда не указывается напрямую. Нет никаких ограничений на выбор ключа шиф- рования. ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° O ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° г 
ГЛАВА 12 Проблемы и перспективы развития криптографических петодов защиты 12.1. Криптосистема на основе эллиптических уравнений Эллиптическая кривая суть математический объект, который может быть оп- ределен над любым полем. В криптографии обычно используются конечные поля. Для точек на эллиптической кривой вводится операция сложения, которая играет ту же роль, что и операция умножения в криптосистемах RSA и эль-Гамаля. Многочисленные исследования показали, что криптосистемы на основе эл- липтических кривых превосходят другие системы с открытым ключом по двум ва>к ым параметр м: степ ни защищенно т в расч те на каж ый ит кл и быстродействию при программной и аппаратной реализации. 12.1.1. Математические основы pynnou G называется множество элементов а, р, у, ..., обладающее следую- щими свойствами. 1. Для элементов множества G определена некоторая оиерания двух перемен- ных, записываемая в виде а + P = у или в виде ар = у; в первом случае опера- цию условно называют сложением, во втором — уиножением. 2. На множестве G выполняются следующие законы: ° в результате применения операции к двум любым элементам группы также получается элемент группы (свойство замкнутости); ° для любых трех элементов группы справедливо (а + P) + у = а + (P + у), если операция является сложением, или (аД)у = а(Ду), если операция является ум- ножением (ассоциативный закон); ° в группе существует единичный элемент, который обозначается как 0 для сло- жения, при этом для любого элемента а группы справедливо О + а = а + О = а, или как 1 для умножения, при этом для любого элемента а группы справед- ливо 1а = а1 = а; ° каждый элемент а группы обладает обратным эиементом, который обозна- чается как ( — а) для сложения, при этом а+ ( — а) = ( — а) + а = О, или как а для умножения, при этом аа ' = а 'а = 1. 
Криптографические мноды защиты информации 8 компьютерных системах и снах Если для любых элементов а, р группы выполняется коммутативный закон, т. е. справедливо равенство а + P = а + P для сложения или ар = ар для умноже- ния, группа называется колаиутативной или абелевой. Число элементов группы называется порядком группы. Множество Z„âñåõ ненулевых элементов поля GF(p) образует абелеву группу порядка р — 1. Абелева группа относительно операции сложения называется аддитивнои абелевой группой, абелева группа относительно операции умножения называется мультипликативной абелевой группой. Некоторое подмножество группы G называется подгруппой, если оно удовле- творяет всем свойствам группы. Конечная группа, которая состоит из степеней 1, g, g~, g,... одного из ее эле- ментов g, называется циклической группой. При этом наименьшее целое число е, такое, что g" = 1, называется порядком элемента g. 12.1.2. Группа точек эллиптической кривой Рассмотрим эллиптическую кривую Е, соответствующую уравнению у +у =х — х (рис. 12.1). На этой кривой лежат только четыре точки, координаты которых являются целыми числами. Это точки А(0, О), B(I, — 1), С(1, 0) и D(0, — 1). о ° Рис. 12.1. Группа из пяти точек эллиптической кривой Е, соответствующей уравнению у'+ у = хз — х'. 0 — бесконечно удаленная точка Для определения операции сложения на группе точек эллиптической кривой будем считать, что: ° на плоскости существует бесконечно удаленная точка ОсЕ, в которой схо- дятся все вертикальные прямые; 
1~8А 12. Проблемы и перспектияы рлзвития криптогрлфичкских мнодов элщиты 2)9 е касательная к кривой пересекает точку касания P 2 раза (это допущение ста- новится понятным, если вспомнить, что касательная PR суть предельное по- ложение секущей PM (рис. 12.2) при стремлении точки М к точке P). Рис. 12.2. Касательная к эллиптической кривой Теперь можно сформулировать правила сложения точек P, Q c Е: ° проведем прямую линию через точки P и g, найдем третью точку S пересе- чения этой прямой с кривой Е; ° проведем через точку S вертикальную прямую до пересечения с кривой Е в точке Т; ° искомая сумма равна Р + Q = Т(рис. 12.3). о ° r Рис. 12.3. Сложение точек на эллиптической кривой Р+ Q = Т Применив это правило к группе точек G = (А, B, C, D, О), получим: A+A =B,À+B=Ñ,A+C=D,A+D=0, 
Криптографичкскик мноды защиты ииформАции в компьютерных системдх и сетих ИЛИ 2А = B, ЗА = С, 4А = D, 5А = О, 6А = А (рис. 12.4). Для любых точек P, Q c G справедливо P + Q = Q + P. Для любой точки P C G справедливо P + О = Р; иными словами, точка О суть аддитивный еди- ничный элемент группы G. Рис. 12.4. Аддитивная абелева группа {А, В, С, D, О } на эллиптической кривой 12.1.3. Эиииптичесная нривая над GF(p) В реальных криптосистемах используется уравнение у =х + ax+ b, где а, b c GF(p),4а + 27b~е О (mod р), p & t 3 Ђ” прост е. Гру па E(GF( )) сост изо всех точек (x, у); х, у c GF(p), удовлетворяющих уравнению, и бесконечно удаленной точки О. Определенная над точками из E(GF(p)) операция сложения алгебраически может быть описана следующим образом. Пусть P = (х~, ут) и Q = (х, у ). Тогда P + Q = (хз, уз), где хз = Х" — х1 — х2, уз = Х(х~ — хз — у~). ',если Р~Д; Х2 Х1 3х, +а ,если P=Q. У1 
аава 12. Проблемы и пкрспвктивы развития криптографических мнодов защиты 241 Пример 12.1. Пусть р = 5, а = b = 1, 4а + 27b = 4 + 4 = 8 е О. Рассмотрим эл- липтическую кривую E: у = х' + х + 1 (рис. 12.5). E(GF(5}) состоит из следующих точек (рис. 12.6): P = (О, 1), 2Р =(4, 2), 3P = (2, 1), 4Р = (3, 4), 5Р = (3, 1), 6Р =(2,4),7P= (4,3), 8Р=(0,4),9P= О, при этом 10Р=Р. Рис. 12.5. Эллиптическая кривая, соответствующая уравнению у' = x'+ x+ 1. Число Х суть угловой коэффициент секущей, проведенной через точки P = (хг, уг) и Q = (x&g ;, у ). р Q секу ая превращае с в касательн ю, и объясняется наличие двух формул для вычисления Х. Для любой точки P C E(GF(p)) справедливо Р+ О = О+ P = P. Если P = (x,y) C E(GF(p)), то (х, у)+ (х, — у) = О. Точка (x, — у) e E(GF(p)) является об- ратным элементом по отношению к P и обозначается — Р. Задача, которую вынужден решать противник при использовании криптоси- стемы на базе эллиптических уравнений, своего рода задача "дискретного лога- рифмирования на эллиптической кривой", формулируется следующим образом. Даны точки P и g на эллиппгической кривой порядка r, где r — число точек на кривой. Необходимо найти единственную точку х, такую, что P =xQ. 
242 Криптографические методы защиты информации в KoMnbloTEpHblx cHcTEMAx u cENx ° О 9Р Рис. 12.6. Аддитивная группа Е(2,) Пример 12.2. Пусть р = 23. Рассмотрим ту же эллиптическую кривую E: у =х +х+1. E(GF(p)) состоит из точки О, а также из следующих точек: (О, 1); (О, 22); (1, 7); (1, 16); (3, 1О); (3, 13); (4, О); (5, 4); (5, 19); (6, 4); (б, 19); (7, 11); (7, 12); (9, 7); (9, 16); (11, 3); (11, 20); (12, 4); (12, 19); (13, 7); (13, 16); (17, 3); (17, 20); (18, 3); (18, 20); (19, 5); (19, 18). Пусть P = (3, 10) и Q = (9, 7). Найдем P + Q и 2Р. Пусть P + Q = (хз, уз), тогда 7 — 10 1 = — — =11; 9 — 3 2 хз —— 121 — 3 — 9 = -б = 17 уз = 11(3 + 6) — 10 = 89 = 20 Таким образом, P + Q = (17, 20). 2P = P + P = (хз, уз), тогда 39+1 1 20 4 «з = 36 — 6= 30=7' уз = 6(3 — 7) — 10 = — 24 — 10 = — 11 = 12. 
Глава 12. Проблемы и перспективы развития криптографических методов защиты 24) Таким образом, 2P = (7, 12) (рис. 127). Примечание. Все операции выполнялись по модулю 23. 22 20 18 16 14 12 10 0 2 4 6 8 10 12 14 16 18 20 22 Рис. 12.7. Аддитивная группа Е(Лез) 12.1.4. Алгоритм электронной подписи на основе эллиптических кривых ECDSA Алгоритм ECDSA (Elliptic Сигче Digest Signature Algorithm) принят в качестве стандартов ANSI X9F1 и IEEE Р1363. В Германии ECDSA является государст- венным стандартом. В России ведется разработка ГОСТа на основе ECDSA. Алгоритм генерации ключей: 1. Выбираем эллиптическую кривую Е, определенную на Уя. Число точек в Е(У. ) должно делиться на большое целое и. 2. Выбирает точку Ре Е(У ) порядка и. 3. Выбираем случайное число d C [1, и — 1]. 4. Вычисляеле Q = dP. 5. Секретным ключом объявляем d, открытым — (E, P, и, 0). Алгоритм формирования подписи под сообщением р: 1. Выбираем случайное число k C [1, n — 1]. 2. Вычисляем kP = (хт, ут) 
244 Криптографические методы защиты информдции в компьютерных систвмдх и сетях r =x~ modn. Если r Ф О, переходим к шагу 3, в противном случае возвращаемся к шагу 1. 3. Вычисляем k mod n. 4. Вычисляем s = k '(h(p) + dr) mod n. Если s ~ О, переходим к шагу 5, в противном случае возвращаемся к шагу 1. 5. Подписью под сообщением р является пара целых чисел (r, s). Примечания: 1. В качестве хеш-функции 1г(х) на шаге 4 в стандартах ANSI X9F1 и IEEE P1363 используется SHA-1. 2. При r = О результат вычисления s не зависит от секретного ключа d. 3. При s = 0 необходимого для проверки подписи числа s ' mod n не существует. Алгоритм проверки подписи (r, s) сообщения р с помощью от- крытого ключа (E, Р, п, Q): 1. Если r и s — целые числа, принадлежащие к интервалу [1, и — 1], переходим к шагу 2, в противном случае результат проверки отрицательный (подпись отвергается). 2. Вычисляем w=s modn и Ь(р). 3. Вычисляем ит —— h(p) w mod n и2 — — rw mod n. 4. Вычисляем и|Р + иЮ = (хо Yp) v = хп mod n. 5. Подпись верна в том и только том случае, когда v = r. 12.2. Неотслеживаемость. Электронные деньги Уже достаточно давно банки и другие коммерческие структуры используют при проведении деловых операций электронный обмен данными — ЕИ (Elec- tronic Data Interchange) и электронный перевод денежных средств — EFT (Elec- tronic Funds Transfer). В современных платежных системах весь процесс от на- чала до конца происходит в электронной (цифровой) форме. При этом для обес- печения безопасности и признания законности (конфиденциальности пересы- 
Гаава 12. Пробавмы и пврспвктивы развития криптографических методов защиты 245 Рис. 12.8. Схема расчета по кредитной карте лаемых электронных документов, аутентификации участников информационно- го обмена) повсеместно используются криптосистемы с открытым ключом для шифрования и формирования электронной подписи. Учитывая, что традиционные денежные купюры суть не что иное, как защи- щенный от подделки документ, логичным представляется переход к использова- нию электронных денег. Защиту от подделки при этом может обеспечить элек- тронная подпись банка, которая, очевидно, имеет большую надежность, чем традиционные водяные знаки, металлические полосы и т. и. При осуществлении платежей с помощью популярной на западе кредитной карточки (рис. 12.8) всегда, когда владелец карточки с ее помощью делает по- купки, оплачивает налоги и т. д., где-то в базе данных делается отметка об этом событии. Соединив вместе эти в отдельности малозначимые данные, можно со- брать большое количество информации об отдельном человеке. При этом по- следний не в состоянии выяснить, кому и что известно о его частной жизни, не в состоянии управлять точностью этой информации или определять, кто может ее получать. Необходимо реализовать такую систему доступа к ресурсам и услу- гам, в которой одновременно с решением задач идентификации, аутентифика- ции и авторизации претендента решена задача обеспечения анонимности по- следнего. Обычные бумажные деньги обладают всеми этими свойствами. Если запрашиваемым ресурсом является какой-либо товар, то наличие у покупателя достаточного количества купюр является доказательством его права на доступ к ресурсу. Хотя каждая из купюр имеет уникальный номер, отсле>кив ть куп по номерам практически невозможно. Итак, проблема состоит в том, чтобы сде- лать электронные платежи в такой же степени анонимными, как и расчет с по- мощью обычных денег. Иначе говоря, возникает задача обеспечения неотсле- живаемости электронных документов, и в частности электронных денег. 
246 Криптографичесяие мноды защиты информации В яомпыотеоных системах и снях Покупатель передает реквизиты карточки или платежной системе (ПС) на- прямую, или продавцу, который передает их ПС, которая отсылает запрос в процессинговый центр (ПЦ) традиционной платежной системы. ПЦ связыва- ется с центром авторизации банка-эмитента карточки, получает результат и пе- ресылает его ПС, которая, в свою очередь, пересылает результат покупателю и продавцу. Если разрешение получено, продавец выдает покупателю товар, а ПЦ сообщает расчетному банку (РБ) сведения о совершенной транзакции, после че- го средства со счета покупателя в банке-эмитенте перечисляются через РБ на счет продавца, находящийся в банке-эквайере. "Отцом" электронных денег с полным основанием можно назвать Д. Шаума, основателя и исполнительного директора фирмы DigiCash и одновременно при- знанного специалиста в области криптографии. DigiCash разработала и запатен- товала криптографическую технологию безопасных электронных платежей. Появилась информация о получении компанией MasterCard International разре- шения на использование этой технологии для создания ПО для кредитной кар- точки со встроенным микропроцессором, соответствующей стандарту электрон- ных платежей EMV (Еигорау, MasterCard, VISA). Электронные деньги — это всего лишь информация о реально существующих средствах. Можно дать следующее определение электронных денег [5]. Элек- тронные деньги суть бессрочные денежные обязательства банковской гии дру- гой коммерческой структуры, представленные в электронной форме, сопрово- ждаемые электронной подписью выдавшей их структуры и погашаемые в мо- мент предъявления обычными денежными средствами. Выглядит электронная купюра приблизительно так, как показано на рис. 12.9. Документ содержит номинал и номер купюры, а также подпись банка-эмитента, которая получена на его секретном ключе. При этом электронная подпись на- дежно защищает купюру от подделки, но совершенно не защищает от копиро- вания. Чтобы избежать превращения электронной купюры в "неразменный пя- так" (см.: Стругацкий А., Стругацкий Б. Понедельник начинается в субботу), банк-эмитент должен контролировать каждую сделку. Рис. 12.9. Электронная купюра 
Гллвл 12. Проблемы и перспективы рлзвитил криптографических методов мщиты 247 Рассмотрим процедуру осуществления платежей с использованием электрон- ных денег (рис. 12.10). Рис. 12.10. Схема расчета электронными деньгами. Покупатель перечисляет деньги в банк-эмитент либо напрямую, либо через банк — участник системы. Взамен покупатель получает электронные деньги. Получив их при оплате товара, продавец, проверив их подлинность, отдает товар, перечисляет электроннь1е деньги банку-эмитенту, а тот переводит обычные денежные средства на счет продавца. Клиент А (будущий покупатель), желающий получить определенную сумму электронных денег, посылает в банк-эмитент, в котором у него имеется счет, "полуфабрикат" электронной купюры, имеющий вид, аналогичный показанному на рис. 12.9. Только подписан этот документ самим клиентом А. Так как А явля- ется клиентом банка, там знают его открытый ключ, а значит, могут проверить подпись. Убедившись, что именно А заказал электронные деньги, банк удаляет его подпись, ставит свою, вычитает со счета А сумму, равную номиналу купюры и отсылает последнюю А. Получив электронную купюру, А может потратить ее сам, переслав (или пе- редав) ее в обмен на товар продавцу В| в магазине, принимающем электронные деньги, либо переслать (или передать) ее другому человеку Вз. Чтобы осущест- вить процесс передачи электронной купюры участники обмена А и В, а также банк-эмитент C должны одновременно находиться на связи. Перед передачей купюры В участник А подписывает ее своим секретным ключом. Получив купю- ру, В проверяет подпись, а затем, убедившись в ее подлинности, удаляет ее и ставит свою, после чего отправляет в банк-эмитент. Банк проверяет, не полу- чал ли он уже эту банкноту (защита от копирования!), т. е. ищет ее номер 
248 Криптогрдфичвскик мноды защиты информдции в компьютерных систвмдх и сетях в специальном списке купюр, предъявленных к оплате ранее. Если банкнотой никто раньше не пользовался, ее номер заносят в список использованных купюр (второй раз ее к оплате не примут!) и переводят сумму, равную номиналу элек- тронной купюры, на счет своего клиента В. Рассмотренная схема пока не обеспечивает неотслеживаемости электронных платежных средств, так как позволяет проследить за движением денег от А к В. Когда клиент А присылает заявку на электронную купюру достоинством, допус- тим, 100 долл., банк узнает номер купюры. В результате, когда эту купюру предъявляет к оплате клиент В, банк узнает, что А заплатил В 100 долл. Таким образом, при такой схеме не обеспечивается анонимность платежей, банк может составить полное досье на любого своего клиента: кто, сколько и кому платил, сколько и от кого получал. Для того чтобы сделать электронную купюру эквивалентной обычной бу- мажной того же номинала, Д. Шаум предложил протокол слепой подписи (blind signature). Суть ее можно проиллюстрировать следующей физической реализа- цией [34]. Заказывая электронную купюру, клиент А создает заготовку, в кото- рой указывает номинал и номер купюры. Затем запечатывает в конверт, изго- товленный из копирки, и отсылает в банк-эмитент. Банк подписывает конверт и возвращает его А. Разорвав конверт, А получает подписанную банком купюру. Если впоследствии эта купюра будет предъявлена банку, банк вынужден будет принять ее, так как на ней стоит его подпись. Банк, так же как и раньше, заносит ее номер в список купюр, предъявленных к оплате, но у него нет возможности узнать, от кого получена эта купюра. Когда банк ее подписывал, он не мог ви- деть ее номера. Рассмотрим пример слепой подписи по схеме RSA. Банк С выбирает два сек- ретных больших простых числа р и q, вычисляет их произведение n = pq, а также находит е и d — соответственно открытый kc~' " и секретный kc~'""'~ ключи бан- ка, такие, что ed = 1 mod (р — 1)(q — 1). Выбирается односторонняя функция f: Z„~ Z„. Числа и, е и функция/публикуются. При этом пара ключей (е, d) использует- ся банком для создания купюр одного фиксированного номинала. Для создания купюр другого номинала используется своя пара ключей. Протокол транзакции заказа электронной наличности (снятия со счета) с использованием слепой подписи: 1. Клиент А выбирает случайное число (no сути, номер купюры) х с Z„u вычис- ляет Ях). 2. Клиент А инициирует начало протокола слепой подписи, выбирая случайное число геХ r e О. Клиент А вычисляет у =Ях)г' mod n, 
249 Гаава 12. Проблемы и псрспнстивы развития криптографических мвтодов защиты 1 где r" — так называемый затемняющий множитель, и посылает заирос у абоненту С. 3. Банк C подписывает купюру, вычисляя у modn, и иосылает иолученное значение х rто и клиенту А. 4. Клиент А "снимает" действие затемняющего множителя и иолучает под- иисанную купюру х 'moc и, где S = X )BO П суть подпись банка С. Примечание. В полном протоколе используются дополнительно шаги форми- рования и проверки подписи клиента А на запросе у (рис. 12.11). Протокол транзакции платежа с использованием электронной КИЛИЧКОСТИ: 1. Покупатель А передает продавцу B электронную куиюру (x, s). 2. Продавец В посылает (х, s) банку С. 3. Банк С вычисляете) и проверяет свою подиись, убеждаясь в справедливо- сти равенства Ях) = s modn. 4. Банк С проверяепь, не была ли купюра с данным номером потрачена ранее, и, если нет, перечисляет на счет клиента В сумму, равную номиналу купюры, и уведомляет его об этом. Примечание. В полном протоколе используются дополнительно шаги форми- рования и проверки подписи клиента В на пересылаемом документе (х, s). Рассмотренная система платежей, требующая участия банка во всех транзакци- ях, называется централизованной. В отличие от последней автономная система платежей предполагает, что продавец B сам, без обращения к банку С, проверяет подлинность предъявленной покупателем А электронной наличности. Понятно, что в этом случае банк идет на определенный риск, так как используемые схемы обес- печивают обнаружение злоупотреблений со стороны А постфактум. Основная идея соответствующих протоколов — однозначно идентифицировать нарушителя. 
250 Криптогряфические методы защиты информдции в компьютерных систвмдх и снях ° ° ° ° ° Э ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° иент ГПК„ Номер купюры Запрос анк-эмитент Затемняющий множитель Хеш- ункция Формирование запроса Открытый ключ клиента А Открытый ключ банка С Электронная подпись банка С Снятиезатемня- ющегомножителя Секретный ключ клиента А Формирование подписи А Подписанный запрос Проверка подписи А Формирование подписи С Секретный ключ банка С 
Гмм 12. Г1роблемы и перспективы развития криптографических методов защиты Электронная Номер купюры подпись банка С Электронная купюра Электронная купюра Электронная купюра, подписанная клиентом В анк-эмитент Электронная подпись банка С Номер купюры Проверка номера купюры Перечисление на счет клиента В суммы, равной номиналу купюры Рыс. 12.11. Жизненный цикл электронных денег Открытый ключ клиента В Формирование подписи В Проверка подписи В Проверка подписи С иент (локулатель) иент (продавец) Закрытый ключ клиента В Секретный ключ банка С 
252 Криптографическая методы защиты информации в компьютерных системах и снлх 12.3. Использование односторонних функций с секретом для построения генераторов псевдослучайных кодов Рассмотрим, например, так называемый BBS-генератор, получивший свое на- звание в честь авторов Э. Блюм, М. Блюма и М. Шуба, основанный на крипто- системе Блюма [7]. Пусть р и q — два больших простых числа примерно одинакового размера, причем р = — 3 mod 4, q = 3 mod 4. Тогда число п = pq называется целым числом Блюма. Пусть Z„— множество це- лых положительных чисел меньших п, которые не делятся ни на р, ни íà q. Пусть QR„— подмножество Z„, состоящее из квадратичных вычетов по модулю п. Число элементов множества Е„равно (р — 1)(q — 1), причем в точности четвер- тую их часть составляют элементы подмножества QR„. Каждый элемент QR„ имеет ровно 4 различных квадратных корня в Z„, из них лишь один, называемый примитивным, принадлежит (И„. Пример 12.3. Если р = 19, q = 23, то имеем п = 437. Тогда 133 = 19 7 6 Z4„, 135 с Z~Ä, 139 с Лаз,; кроме того, учитывая, что не существует такого целого числа а, что а — = 135 mod 437, 24 = 139 mod 437, можно записать: 135 я QRq&gt q, 3 е QR4 Криптографически стойкие генераторы псевдослучайных кодов могут быть построены на основе односторонних функций с секретом. М. Блюм и C. Микали для обозначения основного требования к криптостойкому ГПК ввели понятие непредсказуемость (unpredictable), или непредикативность влево, — криптоана- литик, знающий логику работы такого генератора, имеющий возможность ана- лизировать его выходную последовательность, но не знающий используемого инициализирующего вектора (синхропосылки), для определения первого выра- ботанного бита не может предложить лучшего способа, чем подбрасывание жребия. Справедливы следующие утверждения: ° непредикативный влево zeaepamop является криптографически сильным; ° криптографически сильные генераторы существуют тогда и только тогда, когда существуют односторонние функции. 
253 Гмм 12. Г1роблемы и перспективы ркэвитив криптогрдфических мнодов защиты Квадратными корнями из 139 по модулю 437 являются числа 24, 185, 252 и 413, при этом 24 — является примитивным квадратным корнем, так как 47 = 24 mod 437. Задача определения примитивных квадратных корней по модулю числа п вы- числительно эквивалентна задаче разложения этого числа на множипгели. Та- ким образом, получаем кандидата на одностороннюю функцию с секретом, так как функция Ях) =х тоНгг эффективно вычисляется, а произвести обратное преобразование может лишь тот, кто знает секрет — разложение п на множители. Пусть п — целое число Блюма. Генератор Э. Блюм - М. Блюма - Шуба: 1. Выберем в качестве инициализирующего вектора случайное число xp C QR„. Для этого возьмем случайное число х, пгакое, что (х, n) = 1, и вычислим xp — х тоН(п. 2 2. Искомой последовательностью битов длиной и будет являться последова- тельиость BBS„(xp) = Ь„Ь,Ь ...b,...b,,г =0,(т — 1), где b; — младший бии числа х;, г х,„= х,, modn. Важным достоинством этого генератора является то, что при знании разло- жения п на множители он допускает прямое определение отдельных битов, кото- рые в нем вырабатываются. Имеем: г' х,. =xp modn. По теореме Эйлера, х~ " г " — = 1 тоН(п, а значит, Ях) = х" тоН(п. Генератор RSA: 1. Выберем в качестве инициализирующего векпгора случайное число xp E Z„. г' т(Р-1Хг-т) ~0 Ъ т. е. с помощью двух операций модульного возведения в степень, которые эф- фективно вычисляются, любое число х; может быть найдено исходя лишь из на- чального вектора хо и индекса г. Аналогичным образом можно построить ГПК на основе другой односторон- ней функции с секретом, например лежащей в основе криптосистемы RSA, т. е. на основе функции 
254 Криптографические методы защиты информации в компьютерных системах и сктих 2. Искомой последовательностью битов длиной m будет являться последови- жельиость RSA„(xo) = Ь Ь,Ь,...b,...b,„,, т' = О, (т — 1), где b; — младший бит числа х;, х,.„= х,. modn. 12.4. Вероятностное шифрование Одной из функций генераторов псевдослучайных кодов (ГПК) в системах криптографической защиты информации может быть внесение неопределенно- сти в работу средств защиты, например выбор элементов вероятностного про- странства R при вероятностном шифровании Е». PxR- С, где Е», k, P, C — соответственно функция зашифрования, секретный ключ, про- странство открытых текстов и пространство шифротекстов. Главная особен- ность вероятностного шифрования — один и тот же исходный текст может при- вести к появлению огромного числа различных шифротекстов. Термин вероятностное шифрование (Probabilistic Encryption) был введен Ш. Гольдвассер и С. Микали и ими же была предложена первая схема такого шифрования, основанная на использовании BBS-генератора в качестве источни- ка ключевой последовательности. Данная схема не обеспечивает секретности по отношению к атаке на основе выбранного шифротекста. Пусть исходное сообшение р суть т-разрядная битовая последовательность, хп — случайный квадратичный вычет по модулю и. Функция зашифрования по схеме Гольдвассер — Микали имеет вид с = (х, р O+ BBS„(xo) j при этом х включается в шифротекст для того, чтобы законный получатель мог его расшифровать. Простейший алгоритм расшифрования в этом случае может заключаться в восстановлении ПСП в обратном направлении в соответствии с рекуррентным уравнением mod и, х,= а затем в получении исходного текста по формуле р =сО+ВВЯ„(хо). Знание множителей р и q позволяет законному получателю сразу из х полу- чить хо, а затем формировать ПСП точно так же, как это делал отправитель. А,так ОРИк»т~ 'lbl~MÑ~éHM~XO N3 Xm. 1. С помощью обобщенного алгоритма Евклида вычисляем целые числа а и Ь, такие, что ар+ bq = 1. 
Гллвл 12. Проблемы и петтспективы рлзвития криптотрлфичкс тих методов тттщиты 255 2. Вычисляем р+1 И= 4 mod (р — 1); q+1 ~3 = — mod (q — 1); 4 и=(х modр) modр; v = (х mod q)~mod q; хо = (apv+ bqu) mod n. Таким образом, эффективность рассмотренной схемы выше эффективности схемы RSA. Более того, тщательный анализ BBS-генератора покюал, что после каждой операции модульного возведения в квадрат можно использовать при- близительно log2L младших битов числа х;, где L — разрядность модуля и. Схема одного из возможных вариантов вероятностного блочного шифрова- ния в режиме ECB показана на рис. 12.11, где на вход функции зашифрования Е» поступает "расширенный" блок р,, полученный в результате конкатенации бло- ка открытого текста р,. разрядности и и двоичного набора r; разрядности т с вы- хода ГПК. В результате зашифрования получается блок с; закрытого текста, раз- рядностью и + т. В результате при зашифровании одинаковых блоков на одном и том ключе получаются рюличные блоки шифротекста. При расшифровании часть r; блока, полученного на выходе функции D», просто отбрасывается. Рис. 12.12. Пример вероятностного шифрования: Е» и Р» — функции шифрования симметричной или асимметричной криптосистемы Можно выделить следующие достоинства вероятностного шифра: повышается надежность и расширяется область использования режима про- стой замены; 
256 Криптографичесиие методы защиты информации в KoMllbloTEpHblx cHcTEMAx и снях ° появляется принципиальная возможность увеличения времени жизни сеансо- ВЪ|Х КЛЮЧЕЙ; ° применение качественного ГПК позволяет при использовании симметричных криптосистем уменьшить число раундов шифрования, а значит, увеличить быстродействие криптоалгоритма; ° при использовании рассматриваемой схемы в криптосистемах с открытым ключом противник лишается возмо>кно ти вычисл ть значе ие функ шифрования интересующих его текстов и сравнивать их с перехваченным шифротекстом; ° отношение длин блока открытого текста р,'. и соответствующего ему элемента r; вероятностного пространства при использовании схемы на рис. 12.12 может выступать в качестве параметра безопасности. Недостаток у рассматриваемой схемы лишь один — шифротекст всегда длин- нее соответствующего ему открытого текста. 12.5. Стохастичесмие методы передачи данных 1-р Рис. 12.13. Двоичный симметричный канал с вероятностью ошибки р, О & t р & Задача состоит в том, чтобы передать информацию по каналу, изображенно- му на рис. 12.13, как можно быстрее и надежнее. Решение, предлагаемое теори- ей кодирования, состоит в том, чтобы передавать по каналу связи последова- тельности определенного вида, называемые кодовыми словами. Список всех до- пустимых кодовых слов называется кодом. Он известен и отправителю и полу- 12.5.1. Основные понятия теории кодирования Коды существуют для того, чтобы обнару>кив т и исправл ть оши к в ка лах связи с шумом. Предположим, мы передаем двоичную информацию по кана- лу, подверженному случайным ошибкам (рис. 12.13). Обычно при посылке О при- нимается также О, но иногда принимают и 1. Аналогично если пересылается 1, то на другой стороне обычно принимают 1 и в более редких случаях О. Например, будем считать, что в среднем один из каждых 100 символов будет ошибочным. Если на одном конце линии связи передан О, то в 99 случаях из 100 на другом конце линии будет принят О, но в одном случае из 100 на другом конце линии принимают 1. Аналогичная ситуация имеет место и при передаче 1. Таким обра- зом, можно утверждать, что с вероятностью р = 1/100 в канале произойдет ошиб- ка. Описанная модель называется двоичным симметричным каналом. 
Гмм 12. Г1робммы и перспективы рдзвитив криптографических методов защиты 257 чателю информации, которые сотрудничают друг с другом, для того чтобы ней- трализовать ошибки, возникающие при передаче сообщений. Сообщения представляются кодовыми словами. Всякий раз, когда требуется послать то или иное сообщение, в канал связи отправляется соответствующее кодовое слово, полученное на выходе кодирующего устройства — кодера. Полу- чатель принимает некий, возможно искаженный, вариант кодового слова, после чего декодирующее устройство — декодер должно определить, какое кодовое слово было послано, т. е. тем самым восстановить переданное сообщение. На рис. 12.14 показана простейшая кодирующая-декодирующая схема — кодек, когда передаче подлежат только сообщения "да" (1) и "нет" (О) и имеются только два соответствующих кодовых слова 11111 и 00000. Такой код, кодовые слова которого состоят из одного информационного двоичного символа и четырех из- быточных, можно назвать (5, 1)-кодом. В общем случае (и, k)-код — это код, со- стоящий из кодовых слов, которые включают в себя k информационных символов (не обязательно двоичных) и и — k избыточных или проверочных символов. Исходное сообщение "Нет" Отправленное кодовое слово 00000 Принятое кодовое слово 01000 Принятое сообщение "Нет" Источник информации Приемник информации Канал связи Декодер Кодер Рис. 12.14. Простейший код с исправлением ошибок, состоящий из двух кодовых слов 00000 й 11111 й = й1И2...й~ после кодирования превратилось в кодовое слово Х = Х1Х2...Х„, которое и отправляется в дискретный канал (ДК) связи. Так как в ДК возможны случайные ошибки, принятое слово / / / / Х xl Х2' ° 'Xn ) может отличаться от правильного. Пусть е =е,е ...е„,е, = х, О+х"di =1,п, суть вектор ошибок, причем е; = О, т. е. т'-й символ правильный, с вероятностью 1 — р; и е; = 1, т. е. г-й символ ошибочный, с вероятностью р. Таким образом, Предположим, что передается сообщение "нет", которому соответствует ко- довое слово 00000. В результате случайной ошибки в канале на принимающей стороне получено слово 01000. Декодер с учетом малой вероятности ошибок решает, что в действительности было передано кодовое слово 00000, соответст- вующее сообщению "нет". В общем случае декодер выбирает кодовое слово по критерию максимального правдоподобия, т. е. "наиболее близкое" к принятой последовательности О и 1. Рассмотрим общую схему системы передачи информации (рис. 12.15). Пусть двоичное сообщение 
258 Криптографические методы шщиты информации в KoMIII IoTEpHI lx системАх и сетпх описывая действия ДК, можно сказать, что он искажает кодовое слово х, при- бавляя к нему поразрядно по модулю 2 вектор ошибок е. Рис. 12.15. Система связи Расстоянием Хэмминга dist (х, у) между двумя словами х = х)х~...х~ и х = )~1У;)...)~„ называется число позиций, в которых они рюличаются. Например, dist (11100, 01001) = 3; dist (0312, 0011) = 2. Для любого кода одним из основных параметров является минимальное рас- стояние Хэмминга d между его любыми кодовыми словами и и v, т. е. d = min{dist(u, v)). Весом Хэмминга wt (х) слова х=х1х ...х„ называется число ненулевых х;. Например, wt (10110) = 3; wt (30123) = 4. Если ошибки происходят с вероятностью р, для некоторого фиксированного вектора ошибок v веса а справедливо P{e = v) =р'(1 — р)" Так как на практике р ( 1/2, то 1 — р ) р и (1-р)')p(1-p) ) ð'(1-р)'& t; ..... т. е. фиксированный вектор ошибок веса 1 более вероятен, чем фиксированный век- тор ошибок веса 2, и т. д. Поэтому принцип декодирования формулируется сле- дующим образом. Принятое сообщение х' декодируется в ближайшее в смысле расстояния Хэмминга кодовое слово, иначе говоря, выбирается вектор ошибок с наименьшим весом. А значит, код с минимальным расстоянием Хэмминга d может обнаруживать d — 1 ошибок или исправлять [(d — 1)/2] огаибок, где [х] — наибольшее целое число меньшее или равное х. Пусть а; — информационные символы, b; — проверочные символы. В линейных (и, k)-кодах избыточные (проверочные) символы выбираются таким образом, чтобы кодовые слова x = х1хг "x„= al ttã."Ì~Мг" b„z удовлетворяли уравнению 
Гмм 12. Г1роблвмы и перспективы раэвитип криптогрхфичвских мнодов защиты 259 х Х2 =Hx =О, где все операции осуществляются по модулю 2, а двоичная проверочная матри- ца Н рюмерности (n — k) x п имеет вид Н = [В~Е]. Здесь  — некоторая фиксированная матрица размерности (n — k) x k, а Е— единичная матрица размерности (и — k) х (п — k). Другими словами, линейный код с проверочной матрицей Н состоит изо всех векторов х таких, что Нх = О. Пример 12.4. (8, 4)-коду Хэмминга с дополнительной проверкой на четность и кодовым расстоянием d = 4 соответствует проверочная матрица 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 8,4 1 1 1 0 0 0 0 1 Сообщение а = а~агага4 кодируется в кодовое слово X = XÔ~Ì3X4XsX6X7XS = аФгаза4Ь)ЬгЬЗЬ4, проверочные пазряды которого выбираются таким образом, чтобы выполнялось уравнение Нх = О, т. е. проверочные соотношения имеют вид: s, = а, O+ a, O+ a4 0+ b, = 0; з =а, 0+a,O+a О+Ь =0; s, = а, 0+a О+а О+Ь, =0; s, = а, О+ а О+ а О+ Ь = О. 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 Последовательность s = s>sos gt;s4 назы ается синд омо . Она з висит ол конфигурации ошибок, а значит, анализ синдрома позволяет декодеру исправ- лять одиночные ошибки, так как каждая из них имеет собственные синдромы. Пусть х = Ga. Лорождающая матрица бв 1 данного кода, позволяющая по заданному сообщению сформировать кодовое слово, имеет вид 
2бО Криптографические методы защиты информдции в компьютерных системдх и сетях 12.5.2. Теория кодирования и криптография Итак, целью кодирования является внесение избыточности таким образом, чтобы даже при возникновении ошибок сообщение правильно восстанавлива- лось. При этом имеются ограничения на число исправляемых ошибок. Таким образом, теория кодирования и криптография преследуют противопо- ложные цели. При кодировании пытаются представить сообщение в таком виде, чтобы при его передаче было допустимо некоторое количество наиболее веро- ятных ошибок. В этом смысле можно считать, что при кодировании ясность со- общения повышается. При шифровании стремятся уменьшить ясность сообще- ния, т. е. сделать его непонятным для противника. В работе [48] отмечается важность задачи преобразования сообщения к виду, защищающему и от противника и от случайных ошибок в канале связи. При этом для решения этой задачи перед посылкой сообщения предлагается сначала зашифровать его, а потом закодировать. Обратный порядок операций, по мне- нию автора работы [48], не имеет смысла. Ошибочность такой точки зрения доказана С. А. Осмоловским в работе [41], где предлагаются стохастические (n, k, q)-коды с исправлением ошибок. Пред- ставляется, что на основе этих кодов будет возможно решение триединой задачи: вт криптозащиты данных; ° имитозащиты данных; ® защиты om случайных искажений в канале связи. 12.5.3. Стохастические (и, k, q) -коды Предлагаемая С. А. Осмоловским схема кодирования показана на рис. 12.1б, а. Двоичное сообщение разбивается на L-разрядные двоичные набо- ры — q-ичные символы, q = 2; nL-разрядная кодовая последовательность рас- L. сматривается как п-разрядный кодовый блок, состоящий из q-ичных символов, из которых k информационные, а и — k избыточные. Канал передачи данных со- держит блок кодирования, преобразующий исходный блок длиной k символов в кодовый блок длиной и символов, блок прямого стохастического преобразова- ния, реализующий функцию R (Random), двоичный дискретный канал, блок об- ратного стохастического преобразования, реализующий функцию R ', блок де- кодирования (блок обнаружения и исправления ошибок). Блоки R u R ' осущест- вляют преобразование каждого q-ичного символа, при этом результат преобра- зования не зависит от результатов преобразования других символов кодовой по- следовательности. Совокупность двух блоков стохастического преобразования, соединенных дискретным каналом связи, образует преобразованный канал связи — q-ичный сиыиетричньтй канал. ДК можно описать вектором ошибки е, преобразованный канал — преобразованным вектором ошибки Е= Е1Е ...Е„. Элемент Е& t; вект ра оши ок ра ен ну ю, е ли соответствую ий q-ич ый с вол не искажен, и равен единице в противном случае. Определяющую роль ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
261 Гмвд 12. Проблемы и перспективы рдзвитив криптогрдфичкских методов защиты в этой схеме играет блок обратного стохастического преобразования, задача которого при Е; = 1 обеспечить равновероятность всех q — 1 возможных иска- жений т-го выходного q-ичного символа. Преобразованный ДК ,.ттг~.,,.%..g . g,, Yy Стохастический кодер т Стохастический декодер Рмс. 12.16. Построение стохастического кодека:а — схема канала передачи данных; б — принцип обнаружения ошибок Блок кодирования совместно с блоком прямого стохастического преобразо- вания составляют стохастический кодер, а блок обратного стохастического преобразования совместно с блоком декодирования — стохастический декодер. В исходном ДК кодовые последовательности длиной L искажаются вектором ошибки е в соответствии с некоторым распределением ошибок, которое можно описать вероятностями Р, появления каждого из 2 — 1 образцов ошибки ер&g L т E [1, 2 — 1]. В реальных каналах связи, не использующих стохастическое пре- образование, вероятность ошибки большей кратности меньше вероятности ошибки меньшей кратности, т. е. Р; ) P, при wt(e< & t;) ( w 
262 Криптографические методы защиты информации в компьюткриых системах и снях В преобразованном ДК имеем преобразованные векторы ошибок е', при этом при е е О каждое из ненулевых значений е&lt ;> меепг м сто с авной вер спгью Р; '= 1/(2 — 1). Справедливы следующие утверждения [41]: в преобразованном канале утрачивается возможность обнаружения всех ошибок ДК с векторами е малой кратности, меньшей минимального кодово- го расстояния d; при L = п применение в q-ичном канале (q = 2") классических (n, k)-кодов бес- смысленно, так как вероятность необнаруженной ошибки не зависит от свойств кода, а определяется только числом избыточных разрядов; иными словами простая запись гта месте проверочных разрядов и — k нулей (рис. 12.16, б) дает тот же эффект, что и использование (n, k)-кода; если L & t; и, п, k)-к д, оперирую и с отрезк ми двоич ой последователь сти длиной L как с q-ичными символами (т7 = 2 ) где k — число информацион- ных символов, а (п — k) — число проверочных символов (рис. 12.17), обладает качественно новыми оригинальными свойствами, в частности всегда обна- руживает одиночную ошибку (искалсение одного q-ичного символа); ® вероятность ошибки в переданной получателю информации не зависит от кратности ошибки внутри q-ичного символа. Использование для проверки правильности приема кодового блока некоторо- го ненулевого эталона, значение которого не связано со значениями информаци- онных разрядов, может быть полезно при решении следующих задач [41]: дополнительной проверки правильности ранее принятого кодового блока, в котором имела место необнаруженная ошибка, если в качестве эталона ис- пользуется часть или функция от информационной последовательности пре- дыдущего блока; контроля целостности потока сообщений, если в качестве эталона использу- ется неповторяющийся блок данных nrb; кодового разделения информации, предназначенной для разных получателей, если каждый абонент использует свой эталон. 12.5.4. Стохастический блоковый (n, k, q)- код, исправляющий ошибки Стохастический (n, k, q)-код в отличие от большинства известных кодов по- зволяет обеспечить в рех< ме исправле ия ошиб е гаранпгированную (заданную) вероятность ошибки декодирования при изме- нении параметров дискретного канала; надежный отказ от декодирования при невозможности исправления ошибки. При этом имеется возможность управлять корректирующей способностью кода, а значит и связанным с ней быстродействием процедур кодирования/деко- дирования, за счет выбора в зависимости от параметров реального КД опти- мальной величины k/п. 
Гмм 12. Проблемы и перспективы рязвитив криптогряфических методов защиты 263 Исходный блок д-ичный символ, д 2' Избыточные разряды Информационные разряды Рис. 12.17. Принцип функционирования кодера стохастического (n, k, q)-кода: а — исходный блок а, состоящий из k информационных q-ичных символов; б — процедура кодирования и получения п-разрядного кодового блоках, состоящего из k информационных и (п — k) проверочных q-ичных символов;в — процедура прямого стохастического преобразования каждого q-ичного символа кодового блока Как было отмечено ранее, обратное стохастическое преобразование обладает тем свойством, что в результате действия функции R ' вектор ошибки канала е при длине преобразуемой последовательности, равной L, преобразуется с равной вероятностью в любую из 2 — 1 ненулевых последовательностей е'. В основу построения стохастических кодов с исправлением ошибок положен принцип локализации правильно принятой последовательности, использующий в том числе и некоторые положения современной теории линейных двоичных кодов. Пример 12.5. Возьмем рассмотренный в предыдущем примере двоичный (8, 4)-код Хэмминга с дополнительной проверкой на четность и кодовым рас- 
2б4 Криптографические методы мтциты информации в компьютерных системах и сетях 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 0 0 1 Воспользуемся правилом получения избыточных разрядов этого кода для ко- дирования 4-разрядного блока q-ичных символов а=а,а а,а,а,с 0,2 — 1,i =1,4, и правилом получения избыточных символов b j = 1, 4, b c [О, 2 — 1]: b~ = аг O+ аз ,0+ а4 Ь =а, 0+a, 0+a4 b, = а, 0+a, O+a4 Ь = а, 0+ а 0+ а,. Каждый избьггочный q-ичный символ получается в результате поразрядного суммирования по модулю 2 соответствующих q-ичных информационных символов. Каждый из восьми полученных q-ичных символов блока х! Х2 ~3~4 ~5~6~7х8 а!а2аза4М2ЬЭЬ4 подвергается после кодирования и до декодирования соответственно прямому и обратному стохастическому преобразованию. Запишем проверочные соотношения, задаваемые матрицей Н8 4, и все их ли- нейные комбинации: ~2 ®~3 Sa4 Sb) = 0 а, 9д 9а4 952 — 0 а~ Юа2 Юа4 ЮЬ3 = 0 а, Юа2 Юа ЮЬ4 — — 0 Юа2 @b) 962 =0 ®а ®b2 ®b3 = P ®д4 фb3 ®b4 — — P ®~3 ®~1 ®~3 — 0 ® ~4 ® ~! ® ~4 Юа4 ЮЬ2 ЮЬ4 = 0 Sb) ЮЬ2 963 — 0 961 ЮЬ2 ЮЬ4 0 ЮЬ Sb ЮЬ„= 0 еь,еь,еь, =О е а4 е b, е b2 S b2 е b4 = О. а, '-в 2 03 '-в 2 аЗ 01 1 Sa2 Sa3 стоянием d = 4, позволяющий при двоичной реализации одновременно исправ- лять одну ошибку и обнаруживать две: 
АА8А 12. Проблемы и nEpcllEKTHBbl ряэвития криптогряфических методов 3Ащиты 265 При декодировании проверяется выполнение приведенных 15 соотношений. Предположим, искажены символы х1(ат) и х1(а1). Тогда ни одно из первых че- тырех соотношений не выполнится, если только L-разрядные векторы ошибок е,' и е2 соответствующих символов не совпадут. Действительно, для первого соотношения имеем для третьего д, ф е~' ® д ф е2 ф ц4 ф g& t; — Ђ” ~ ® е ит. д. Однако выполнятся седьмое, одиннадцатое и двенадцатое соотношения, так как в них не входят искаженные символы а Юа ЮЬ3 ЮЬ =0; а ЮЬ, ЮЬ2ЮЬ3 =0; а3 ЮЬ Sb, Sb4 =О. Так как после выполнения трех приведенных проверочных соотношений входящие в них символы с некоторой вероятностью можно считать принятыми правильно, эти соотношения позволяют выявить правильность приема символов ХЗ ~4 3т5 3тб Х7 'т8 (т23 ~4 Ь1 Ь2 ЬЗ Ь4 )' Следовательно, все неискаженные символы выявлены как правильно приня- тые, или локализованы. Используемый (8, 4, q)-код позволяет исправлять два стирания, т. е. если из- вестно 6 правильных символов, то остальные символы можно исправить, выра- зив через правильно принятые символы. В рассматриваемом примере исправле- нию подлежат два "стирания" х~ аI и х2 а2, которые можно выразить через известные символы, например первого и второго соотношений: '22 '23 ® '24 ® bl а, =а3®а ЮЬ . Легко убедиться, что искажение двух любых символов не мешает локализа- ции остальных символов кода. Приведенный пример показывает, что существует возможность декодирова- ния без введения избыточности в каждый символ. Проверку соотношений кода можно рассматривать как наложение "маски" на символы кода. Если через эту маску "видны" только неискаженные символы, то соотношение выполняется и эти символы локализуются. Рассмотренный код позволяет исправлять два иска- женных q-ичных символа, что превышает исправляющую способность алгорит- ма максимального правдоподобия, исправляющего [(d — 1)/2)] ошибок. Это ка- жущееся противоречие объясняется тем, что фактически две ошибки исправля- ются только при условии e& t N е2 ( ля рассмотренн го пример ), ак то гаран ровано только исправление одной ошибки [41]. 
26б Криптографические методы защиты информации в KQMnbloTEpHblx системАх и снях Алгоритм декодирования стохастического блокового(п, k, q)- кода (исправления ошибок кратности1 d - 2): 1. Обратное стохастическое преобразование q-ичных символов. 2. Локализация неискаженных q-ичных символов с помощью 2" " — 1 провероч- ных соотношений (и, k)-кода. При локализации подсчитывается число N,. вы- полнившихся соотношений и число ггт локализованных символов. б 3. Проверка условий правильной локализации N, = 2' ' — 1, где t = п — Ц, & t d Ђ” 4. Стирание и восстановление нелокализованных символов. Примечания: 1. Проверочное соотношение считается правильно выполненным, если в него входят только неискаженные символы. 2. Символ считается локализованным, если он входит хотя оы в одно из выпол- нившихся соотношений. Рис. 12.18. Алгоритм декодирования (8, 4, q)-кода На рис. 12.18 показан алгоритм декодирования (8, 4, q)-кода, проверочная матрица которого соответствует коду Хэмминга с дополнительной проверкой на четность. 
Гмвй 12. Проблемы и nfpcnEKTHBbl рдзвития криптографических методов защиты 267 Становятся понятными сформулированные ранее требования к обратному сто- хастическому преобразованию. Учитывая, что в преобразованном ДК при е w О ка- ждое из ненулевых значений преобразованного вектора ошибки е~,.т 1разрядного символа имеет место с равной вероятностью P' ,= I/ 2 — 1, вероятность появления каждой ситуации, приводящей к ошибке декодирования, можно легко рассчи- тать, а значит, в любом конкретном случае появляется возможность обеспечить гарантированную верность приема информации. Например, если в ДК искажатот- ся три q-ичных символа х;, х,, х,„, к ошибке декодирования приводят ситуации 12.5.5. Крипто- и имитозащита при стохастическом кодировании Для решения задач крипта- и имитозащиты пересылаемых сообщений сто- хастическое преобразование должно обладать дополнительными свойствами, помимо тех, которые были упомянуты в разд. 12.5.3. Необходимые условия обеспечения секретности и аутентичности при стохас- тическом кодировании информации следующие: вт преобразование R должно быть криптостойким; ° преобразования R u R ' должны быть синхронными поточными криптоалго- ритмами с разрядностью, равной L; ° при использовании для генерации гаммы паточного шифра в блоке R ' строи- тельных блоков, аналогичных, например, рассмотренным в гл. 2 8-разрядным R-блокам, должен использоваться как минимум двухкратный режим (в пря- мом и обратном направлении) со сцеплением. 12.6. Контроль хода программ При решении задачи контроля правильности функционирования объектов и средств криптографической защиты можно выделить два подхода: структурный и алгоритмический (рис. 12.19). В первом случае объект рассматривается как совокупность типовых узлов: процессоров, блоков памяти, счетчиков, сумматоров и т. п. При этом задача сво- дится к проверке рассматриваемых структур традиционными методами. Во вто- ром случае объект представляется его алгоритмической моделью. Контроль в этом случае основан на проверке соответствия последовательности выработки управляющих сигналов или фактической очередности исполнения актов алго- ритма (выборки команд или микрокоманд (МК) очередности, устанавливаемой верно реализуемым алгоритмом. Подход, основанный на проверке правильности выполнения протяженных участков алгоритма, следует признать более перспек- тивным, хотя бы с той точки зрения, что он позволяет обнаруживать нарушения, вызванные не только случайными причинами, например сбоями или отказами 
2б8 Криптографические методы защиты информации в KoMllbloTEpHblx cHcTEMAx u cETAx аппаратуры, но и являющимися следствием умышленных деструктивных воз- действий. Методы оперативного контроля Структурн ые Алгоритмические Контроль состояний управления Контроль правильности выполнения соседних актов алгоритма Контроль правильности выполнения протяженных участков алгоритма Встраивание контрольных кодов в последовательность команд Использование блока памяти эталонных контрольных кодов Комбинированные методы Рис. 12.19. Классификация методов оперативного контроля Выделяют 4 типа алгоритмических дефектов: ° пропадание команды или МК; ° искажение команды или МК; е замена команды; ° неправильное вычисление очередного набора логических условий. Оборудование, осуществляющее контроль за ходом выполнения программы, в ряде работ именуется сторожевым процессором (Watchdog Processor). После- довательность действий при его использовании выглядит следующим образом: 1) сторожевой процессор обеспечивается некоторой избыточной информацией, характеризующей верное выполнение алгоритма; 2) в процессе решения реальной задачи сторожевой процессор собирает информа- цию о действительном ходе выполнения программы и сравнивает ее с заданной; 
I AABA 12. Проблемы и перспективы развития криптографических методов защиты 2б9 3) в случае несовпадения сторожевой процессор формирует сигнал ошибки, ко- торый может вызвать прерывание работы компьютерной системы и инициа- лизироватьь процедуру восстановления. Рхс. 12.20. Контроль хода программ с использованием сторожевого процессора Методы, контролирующие правильность выполнения соседних актов алго- ритма, в основном используются на микропрограммном уровне управления. Компьютер имеет два уровня управления: микропрограммный и программ- ный. Для каждого уровня управления существует свой алгоритм, определяющий последовательность появления управляющих сигналов. На микропрограммном уровне алгоритм управления представлен в виде микропрограммы, на про- граммном — в виде программы. Контроль с использованием сторожевого про- цессора также может выполняться как на микропрограммном, так и на про- граммном уровне. Говоря о методах контроля, основанных на проверке правильности выполне- ния алгоритма, прежде всего следует отметить необходимое условие их приме- нения: программа, реализующая алгоритм, не должна модифицироваться в ходе своего выполнения. В большинстве практических применений это условие вы- полняется. На начальном этапе сторожевой процессор обеспечивается избыточной ин- формацией. При этом должны быть даны ответы на вопросы: 1. каким должно быть проверяемое условие, т. е. соотношение, выполняемое при отсутствии алгоритмических дефектов? 2. на какой части алгоритма проверяется фактическое выполнение этого усло- вия: на участке из двух следующих друг за другом актов алгоритма или на более протяженном участке? 3. что представляет собой избыточная информация об алгоритме? 4. каким образом условие проверки и избыточная информация сообщаются сто- рожевому процессору? 
270 Криптографические маоды защиты информдции в компьютерных системдх и сатлх Контроль осуществляется по принципу "предшественник-последователь" для каждой пары последовательно выполняемых МК. Избыточная информация, по сути контрольный код, добавляется к слову каждой MK таким образом, чтобы при правильном выполнении алгоритма микропрограммы контрольный код по- следующей МК определялся контрольным кодом предыдущей МК и состоянием устройства управления. При контроле протяженных участков алгоритма последний разбивается на фрагменты, каждый из которых имеет один вход и один или несколько выходов. В любом случае основу каждого фрагмента составляют линейные участки, кото- рые определяются как максимальные наборы строго последовательных команд, имеющие одну точку входа и одну точку выхода. Выполнение этого набора ко- манд всегда начинается от точки входа и всегда заканчивается в точке выхода. Границы линейных участков (точки входа и точки выхода) определяются ко- мандами передачи управления, точками слияния ветвей алгоритма, а также сим- волическими блоками "начало" и "конец". В качестве характеристики последовательности актов линейного участка ал- горитма может использоваться: ° контрольная сумма; ° количество актов алгоритма; ° CRC-код; ° хеш-образ. Наибольший эффект дает использование CRC-кодов при защите от случайных искажений хода выполнения программы и операции хеширования при защите от умышленных искажений последовательности выполнения актов алгоритма. Характеристика последовательности актов алгоритма может получаться од- ним или несколькими из перечисленных способов: ° от последовательности кодов команд или МК; ° от последовательности кодов адресов команд или МК; ° от номеров актов алгоритма; ° от последовательности кодов в разрядах специального поля контрольных разрядов команды или МК; ° от последовательности сигналов условия. Проще всего при контроле протяженных участков алгоритма формировать условие проверки для каждого отдельного линейного участка, при этом избы- точная информация (эталонные контрольные коды), сообщаемая сторожевому процессору, также относится к каждому отдельному участку. При необходимости избыточная информация может относиться к некоторой последовательности линейных участков и содержать сведения о переходах меж- ду ними. Эти сведения могут представляться следующим образом: храниться в памяти сторожевого процессора; 
Гмм 12. Проблемы и перспективы рязвитил криптогрдфических методов здщиты 271 ° учитываться в эталонном контрольном коде; ° неявным образом задаваться в программе или микропрограмме. Все известные методы контроля протяженных участков алгоритма по спосо- бу сообщения избыточной информации сторожевому процессору можно разде- лить на 3 группы: ° методы, основанные на встраивании эталонных контрольных кодов в тело программы; ® методы, основанные на хранении эталонных контрольных кодов в памяти сторожевого процессора; ° комбинированные методы. Особенностями первой группы методов, предполагающих встраивание эта- лонных контрольных кодов (сигнатур) в последовательность слов команд участ- ка программы, являются: ° встраиваемый контрольный код становится частью линейного участка, т. е. участок удлиняется; ° в процессе выполнения контрольный код выдается на шину данных системы безо всякого участия сторожевого процессора, но тем не менее всегда им распознается; ° контрольный код, считанный из памяти команд на шину данных, либо вооб- ще не воспринимается контролируемым процессором, либо воспринимается, но не искажает результаты выполнения программы. Места встраивания эталонных контрольных кодов могут быть различны. Они могут быть встроены в начало участка и стать точками входа. Они также могут быть помещены в конец линейного участка и стать точкой выхода. Наконец, они могут оказаться где-то внутри линейного участка. Существует 3 основных способа встраивания сигнатур в тело программы. В процессорах с открытой системой команд есть возможность введения в нее дополнительной псевдокоманды, единственным назначением которой будет из- влечение из памяти на шину данных встроенной сигнатуры. Если такой возмо&gt ности нет, сторожевой процессор может сам обращаться в память после опреде- ленных команд за встроенной сигнатурой. Самый же простой выход в этой си- туации — использование избыточности любой существующей системы команд и выбор в качестве псевдокоманд редко используемых команд. Встроенная сигна- тура включается в эти команды либо как непосредственный операнд, либо как явный адрес или смещение и при выполнении команды выводится на шину дан- ных и воспринимается сторожевым процессором. Модификация уже отлаженной контролируемой программы, т. е. разбиение ее на участки, встраивание псевдокоманд в контрольные точки, определение сигнатур от кодов команд и включение их в псевдокоманды, осуществляется с помощью специального ПО. 
272 Криптогрдфические методы защиты информдции в KoMIII loTEpHI lx cHcTEMAx u cETIlx ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Контроль протяженных участков алгоритма, содержащих точки слияния вет- вей, требует встраивания в тело программы, помимо проверочных, еще и так называемых выравниваюишх сигнатур (рис. 12.21), обеспечивающих в точке слияния ветвей при правильной работе программы единое значение эталонного контрольного кода, так как значение правильной сигнатуры в точке слияния за- висит от того, по какой трассе выполнялась программа, и в общем случае сигна- туры, полученные при прохождении различных трасс, не совпадают. О Точка слияния ветвей Проверочная сигнатура Выравнивающая сигнатура Рис. 12.21. Проверочные и выравнивающие сигнатуры 
Гаава 12. Ilpo&l M l и перспек ивы разв тия криптографиче ких мет дов за 275 Методы второй группы основаны на сравнении сигнатур, сформированных из всех слов программы, предшествующих очередному и считанных ранее из памя- ти команд системы, с кодовым эталоном, извлекаемым из блока памяти сторо- жевого процессора. Если полученный контрольный код совпадает с эталонной сигнатурой, считанной из блока памяти сторожевого процессора по тому же ад- ресу, что и очередное слово программы, делается вывод, что программа испол- няется правильно (рис. 12.22), в противном случае формируется сигнал ошибки. Чтобы обеспечить контроль хода программ, имеющих точки слияния ветвей, и при этом обнаруживать неправильные переходы из одной такой точки в дру- гую, каждой из этих точек ставятся в соответствие коды-идентификаторы, кото- рые размещаются в блоке памяти сторожевого процессора по адресам, соответ- ствующим этим точкам. Выравнивание сигнатур до значения соответствующего идентификатора осуществляется аппаратурой сторожевого процессора.,Цосто- инствами этой группы методов являются отсутствие влияния на быстродействие контролируемой программы, а также обнаружение большинства нарушений хо- да программы уже в следующем машинном цикле. Рис. 12.22. Контроль хода выполнения программ: ... S Я,.Я,„... — последовательность команд (или актов алгоритма); h(S;) — эталонный контрольный код, зависящий от всего предшествующего поведения системы (трассы, по которой выполнялась программа); h'(S;) — реально полученный код свертки. При обнаружении несовпадения h(S;) и h'(S;) фиксируется факт нарушения хода выполнения программы. 
274 Криптографические мноды защиты информации в компьютерных системах и сетях Рис. 12.23. Схема сторожевого процессора Сторожевые процессоры являются неотъемлемой частью компьютерных сис- тем ответственного назначения, в которых необходимо оперативное обнаруже- ние любых нарушений в ходе выполнения программ. Представляется, что рас- смотренные методы перспективны и с точки зрения их использования совместно с криптографическими средствами для защиты от так называемых разрушающих программных воздействий [33]. ВМЕСТО ЗАКЛЮЧЕНИЯ Причины ненадежности криптосистем, или Почему криптография сложнее, чем кажется В настоящее время криптографические методы защиты используются в ин- формационных системах любой степени сложности и назначения. Криптографи- ческими методами защищается государственная тайна, обеспечивается закон- ность электронного документооборота, предотвращаются попытки мошенниче- ства в системах электронной торговли. Без криптографии обеспечить требуемую степень безопасности в современном компьютеризированном мире уже не пред- ставляется возможным. Со временем ее роль и значение обещают стать еще больше. Современная криптография предоставляет все необходимые алгоритмы, ме- тоды и средства, которые позволяют построить систему защиты, затраты на взлом которой таковы, что у противника с ограниченными финансовыми и тех- ническими возможностями для получения интересующей его информации оста- ются только две возможности — использование, во-первых, человеческого фак- тора, а во-вторых, особенностей конкретной реализации криптоалгоритмов На рис. 12.23 показана схема сторожевого процессора при использовании комбинированного подхода, основанного на встраивании выравнивающих ко-. манд в тело программы и использовании блока памяти эталонных CRC-кодов. 
Гаава 12. Пробаемы и перспективы развитил криптографических методов защиты 275 и криптопротоколов, которая чаще всего оставляет желать лучшего. Именно та- кой вывод можно сделать, анализируя примеры реальных успешных атак на крип- тосистемы. Известны лишь единичные случаи взлома с использованием исключи- тельно математических методов. В то же время различных примеров взлома ре- альных систем так много, что их анализом вынуждены заниматься целые компа- нии, наиболее известная из которых Counterpane Systems Брюса Шнайера. Система защиты в целом не может быть надежнее отдельных ее компонен- тов. Иными словами, для того чтобы преодолеть систему защиты, достаточно взломать или использовать для взлома самый ненадежный из ее компонентов. Чаще всего причинами ненадежности реальных систем криптографической за- щиты являются (рис. 12.24): ° человеческий фактор; ° особенности реализации. Самое ненадежное звено системы — человек. Типичные ошибки пользовате- лей, нарушающие безопасность всей системы защиты: ° предоставление своего секретного пароля коллегам по работе для решения неотложных задач во время отсугствия владельца пароля; повторное использование секретных паролей в несекретных системах; ° генерация паролей самими пользователями, выбор паролей по критерию удобства запоминания; ° несвоевременное информирование о компрометации ключевой информации, например об утере smart-карт. Получают распространение атаки типа отказа в обслуживании (denial of service), провоцирующие пользователя отключать "заедающую" систему защиты при решении неотложных задач. Можно выделить следующие причины ненадежности криптосистем, связан- ные с особенностями их реализации: ° применение нестойких криптоалгоритмов; ° неправильное применение криптоалгоритмов; ° ошибки в реализации криптоалгоритмов. В некоторых случаях, особенно в системах реального времени, применение стойких алгоритмов принципиально невозможно в силу их низкого быстродей- ствия и поэтому вынужденно используются менее стойкие, но быстрые крипто- алгоритмы. Многие качественные криптографические средства подпадают под действие экспортных ограничений, искусственно снижающих качество этих средств. На- пример, в США запрещен экспорт криптоалгоритмов с длиной ключа более 56 бит. Все программные средства, произведенные в США и легально экспорти- руемые за рубеж, обеспечивают ослабленную криптографическую защиту. Ана- логичная ситуация имеет место и в Европе. Так, например, существуют две вер- сии алгоритма паточного шифрования А5 — надежная А5/1 и существенно менее стойкая А5/2 для поставок в развивающиеся страны. 
276 КРИПТОГРАфИЧЕСХТТЕ МЕТОДЫ ЗАЩИТЫ ИнфОРМАЦИИ В КОМПЬЮТЕРНЫХ СИСТЕМАХ И СЕТЯХ Причины ненадежности криптосистем Особенности реализации Человеческий актор Применение нестойких криптоалгоритмов Низкое быстродействие стойких криптоалгоритмов Ошибки в реализации криптоалгоритмов Экспортные ограничения Неправильное применение криптоалгоритмов Использование собственных алгоритмов Программные ошибки Зависимость времени работы криптоалгоритма от исходных данных Некачественные процедуры генерации, хранения и распределения ключей Наличие "дыр" в ПО Некачественная процедура восстановления после сбоев Некачественная процедура инициализации ГПК Отсутствие защиты от разрушающих программных воздействий Некачественный ГПК Применение криптоалгоритма не по назначению Рис. 12.24. Причины ненадежности криптосистем Недостаточная длина ключа или недостаточный объем ключевого пространства Некачественные процедуры оперативного обнаружения несанкционированных действий и восстановления работоспособности системы защиты после их обнаружения 
I AA8A 12. Проблемы и IIEpcllEKINBbl рдзвитип криптографических методов защиты 277 Многие разработчики ПО включают в свои продукты собственные криптоал- горитмы, самонадеянно считая себя специалистами, забывая, что современная криптография основана на глубоких исследованиях в таких разделах математи- ки, как высшая алгебра, теория чисел, теория информации, теория сложности вычислений и др. Если разработчики делают ставку на собственные методы, шансы взломщиков, даже в случае полного отсутствия на начальном этапе ин- формации об использованном алгоритме, многократно возрастают. Основные ошибки при использовании криптоалгоритмов: недостаточная длина ключа, некачественная процедура управления ключами, некачественный генератор псевдослучайных кодов или неправильная его инициализация и, на- конец, использование криптоалгоритмов не по назначению, например хранение паролей в зашифрованном, а не в хешированном виде и использование на прак- тике модели доверительных отношений, отличной от той, в расчете на которую проектировалась система. Причина ненадежности криптосистем, связанная с ошибками в реализации криптоалгоритмов, в силу своей нетривиальности и многообразия требует от- дельного рассмотрения, поэтому ограничимся лишь кратким перечислением ос- новных проблем. Надежная система защиты должна уметь оперативно обнаруживать несанк- ционированные действия для минимизации возможного ущерба. В случае обна- ружения повреждений в системе должны включаться эффективные процедуры восстановления разрушенных элементов. Система не долхсна потерять живу- честь даже в случае проведения успешной атаки на нее. Причины наличия большинства "дыр", или "люков", в ПО, т. е. не описанных в документации возможностей работы с ним, очевидны. Прежде всего, забывчи- вость разработчиков, которые в процессе отладки продукта создают временные механизмы, облегчающие ее проведение, например за счет прямого доступа к отлаживаемым частям программы. По окончании отладки часть "дыр" убирает- ся, а о части разработчики благополучно забывают либо оставляют их созна- тельно, особенно в ранних версиях продукта, когда в будущем весьма вероятна его доработка. "Дыры" могут являться следствием применения технологии разработки про- грамм "сверху вниз", когда программист сразу приступает к написанию управ- ляющей программы, заменяя предполагаемые в будущем подпрограммы "за- глушками", имитирующими реальные подпрограммы или просто обозначающи- ми место их будущего подсоединения. Очень часто эти "заглушки" остаются в конечной версии программы. Либо опять же по причине забывчивости, либо в расчете на будущую модификацию продукта, либо, например, если в процессе разработки выясняется, что какая-то подпрограмма не нужна, а удалить "за- глушку" не представляется возможным. В случае обнаружения такой "заглушки" злоумышленник может воспользоваться ей для подключения к программе своей подпрограммы, работающей отнюдь не в интересах законного пользователя. Третий источник "дыр" — неправильная обработка (или ее отсутствие) каких- либо нестандартных ситуаций, которые могут иметь место при работе програм- 
278 КриптографиvEcKNE методы мщиты информации в компьютерных системах и сапх мы: неопределенный ввод, ошибки пользователей, сбои и т. п. В этом случае противник может искусственно вызвать в системе появление такой нестандартной ситуации, чтобы выполнить нужные ему действия. Например, он может вызвать аварийное завершение программы, работающей в привилегированном режиме, чтобы, перехватив управление, остаться в этом привилегированном режиме. Наконец, известны случаи, когда "люк" в ПО или аппаратуре — первый шаг к атаке системы безопасности. Разработчик умышленно оставляет его в конеч- ном продукте, чтобы в будущем, например, иметь возможность модифицировать информацию незаметно для законного пользователя, расшифровывать ее, не зная ключа, и т. и. Существуют программы, изначально предназначенные для разрушительных действий: это компьютерные вирусы, компьютерные черви и программы- закяадки, среди последних, в свою очередь, можно выделить логические бомбы, троянские кони и пр. С полным на то основанием они получили обобщенное название разрушающих программных воздействий (РПВ), которые могут вы- полнять одно или несколько из перечисленных действий, опасных для системы защиты: ° несанкционированное копирование и съем секретной информации; ° приведение в неработоспособное состояние или разрушение компонентов системы защиты; уничтожение или модификацию секретной информации; ° наблюдение за процессами обработки секретной информации и принципами функционирования средств защиты; ° постоянную или кратковременную (что опаснее) подмену или понижение стойкости используемых криптоалгоритмов; ° постоянное или кратковременное изменение степени защищенности секрет- ной информации; ° создание скрытых каналов передачи информации; ° инициирование ранее внедренных РПВ; ° инициирование режимов работы, увеличивающих объем остающихся после обработки фрагментов секретной информации. Еще более разнообразны пути внедрения РПВ. Можно выделить следующие средства, предназначенные для борьбы с РПВ и без которых любая программная реализация криптоалгоритма практически беззащитна: ° средства, препятствующие внедрению и средства выявления РПВ до исполь- зования программных продуктов по назначению; средства, обеспечивающие оперативное обнаружение РПВ в процессе реаль- ного функционирования ПО, изначально свободного от них; е средства удаления РПВ; ° средства определения факта наличия или отсутствия РПВ в добавляемом в систему ПО. 
Гмм 12. Пробпемы и перспективы ркзвитил криптографичвских методов вдщиты 279 Аппаратуру легче физически защитить от проникновения извне. Криптомо- дули могут помещаться в особые контейнеры, которые делают невозможным изменение алгоритма функционирования. Интегральные схемы могут покры- ваться специальным химическим составом, при этом любая попытка преодоле- ния защитного слоя приводит к самоуничтожению их внутренней логической структуры. Тем не менее известны случаи выявления и аппаратных закладок. Кроме того, возникает проблема защиты от экзотических атак, применимых к реализациям в smart-картах,— временного анализа и анализа потребляемой мощности. Эти атаки основаны на использовании того факта, что различные операции, выполняемые на микропроцессоре, требуют разного времени, а также приводят к разному потреблению мощности. Общая идея этих атак в том, что, анализируя временные характеристики алгоритма (время ответа) или потребле- ние мощности, мы можем составить картину выполнения различных операций и даже приблизительно вычислить их аргументы. Приблизительный анализ уяз- вимости различных операций с точки зрения временных характеристик дает следующие результаты: ° поиск по таблицам — неуязвим для временных атак; ° фиксированные сдвиги — неуязвимы для временных атак; ° булевы операции — неуязвимы для временных атак; ° сложение/вычитание — трудно защитить от временных атак; ° умножение/деление — наиболее уязвимые для временных атак операции. Стойкость к атакам такого рода, направленным не на криптоалгоритм, а на его реализацию, также надо учитывать. Защищенность по отношению к времен- ному анализу можно повысить путем введения дополнительных задержек. Более сложной является проблема защиты от анализа мощности, но ее можно решить несколькими путями. Это, во-первых, балансировка алгоритма (равномерное распределение различных операций по коду), во-вторых,— введение специаль- ных "шумовых" операций, или, наконец, просто выбор другой карты (микропро- цессора) [61]. С недавних пор получили распространение атаки на аппаратуру криптоси- стем, основанные на анализе электромагнитного излучения и других побочных источников информации. Получают распространение по сути "биологические" методы взлома, рассмат- ривающие криптосистемы как сложные объекты, определенным образом реаги- рующие на внешние раздражители. Атаки подобного рода основаны на анализе поведения системы после случайных или преднамеренных сбоев в работе. Несмотря на успехи современной криптографии, задача построения надеж- ной системы криптографической защиты комплексная, она значительно слож- нее, чем кажется на первый взгляд. Надежная система защиты может быть по- строена только с учетом всех перечисленных факторов [39, 45, 49, 67]. 
HPHJIOIEHHE 1 Неприводимые многовпены над GF(p), p — простое Примечания: 1. Многочлены заданы набором их коэффициентов аи ам i...à;...аг а~ ао, например набор 1021 соответствует многочлену x'+ 2х+1. 2. В скобках указан показатель многочлена, т. е. наименьшее положительное число е, при котором х' — 1 делится на данный многочлен без остатка. 3. Многочлены /' (х), для которых справедливо соотношение /' (х) = ах~/' х ', где а е GF(p), а w О, /'(х) — многочлен степени N, уже имеющийся в списке, не приводятся. Неприводимые многовпены над GF(2) N=8 N=S N=-1 N=2 N-- 3 N=4 6=5 N=6 11 (1) 111 (3) 1011 (7) 10011 (15) 11111 (5) 100101 (31) 101111 (31) 110111 (31) 1000011 (63) 1001001 (9) 1010111 (21) 1011011 (63) 1100111 (63) 10000011 (127) 10001001 (127) 10001111 (127) 10011101 (127) 10100111 (127) 10101011 (127) 10111111 (127) 11001011 (127) 11101111 (127) 100011011 (51) 100011101 (255) 100101011 (255) 100101101 (255) 100111001 (17) 100111111 (85) 101001101 (255) 101011111 (255) 101100011 (255) 101110111 (85) 101111011 (as) 110000111 (255) 110001011 (85) 110011111 (51) 111001111 (255) 111010111 (17) 
281 Il pHAOACEHHA Неприводимые многочпены над GF(3) 100021 (242) 100022 (121) 100112 (121) 100211 (242) 101011 (242) 101012 (121) 101102 (121) 101122 (121) 101201 (242) 101221 (242) 102112 (121) 102122 (11) 102211 (242) 102221 (22) 110012 (121) 110021 (242) 110111 (242) 110122 (121) 111121 (242) 111211 (242) 111212 (121) 120212 (121) 120221 (242) 121112 (121) N= 1 N=S N=2 N-=3 N=4 Неприводимые многочпены над GF(5) N-- 3 11 (2) 12 (4) 14 (1) 102 (8) 111 (3) 112 (24) 123 (24) 124 (12) 141 (6) N-=1 N=2 Неприводимые многочпены над GF(7) 1432 (342) 1434 (342) 1453 (171) 1461 (114) 1513 (171) 1532 (342) 1534 (342) 1552 (342) 1235 (171) 1245 (171) 1251 (114) 1261 (114) 1262 (342) 1264 (342) 1325 (171) 1334 (342) 1336 (19) 1341 (38) 1343 (171) 1352 (342) 1354 (342) 1413 (171) 1416 (19) 1425 (171) N=3 N-=1 N=2 11 (2) 12 (1) 101 (4) 112 (8) 1021 (26) 1022 (13) 1112 (13) 1121 (26) 10012 (80) 10022 (80) 10102 (16) 10111 (40) 10121 (40) 11021 (20) 11111 (5) 11122 (80) 12112 (80) 12121 (10) 11 (2) 12 (6) 13 (3) 16 (1) 101 (4) 102 (12) 113 (48) 114 (24) 116 (16) 123 (48) 125 (48) 131 (8) 136 (16) 141 (8) 145 (48) 152 (24) 1002 (18) 1003 (9) 1011 (114) 1016 (57) 1021 (38) 1026 (19) 1032 (342) 1035 (171) 1041 (114) 1046 (57) 1052 (342) 1055 (171) 1062 (342) 1065 (171) 1112 (342) 1115 (171) 1124 (342) 1126 (57) 1131 (38) 1135 (171) 1143 (171) 1146 (57) 1151 (114) 1152 (342) 1153 (171) 1154 (342) 1163 (171) 1165 (171) 1214 (342) 1216 (57) 1223 (171) 1226 (57) 1011 (62) 1014 (31) 1021 (62) 1024 (31) 1032 (124) 1033 (124) 1042 (124) 1043 (124) 1113 (124) 1114 (31) 1131 (62) 1134 (31) 1141 (62) 1143 (124) 1213 (124) 1214 (31) 1223 (124) 1312 (124) 1323 (124) 1341 (62) 
282 Криптографические методы защиты информации в KQMllbloTEpHblx cHcTEMAx u cETllx Неприводимые многочпены над GF(11) 11(2) N 2 147 (120) 12 (5) 148 (40) 13 (10) 149 (60) 15 (10) 151 (12) 17 (5) 152 (120) 1А (1) 153 (15) 157 (40) 15А (24) N~1 101 (4) 103 (20) 105 (20) 111 (3) 114 (60) 116 (40) 117 (120) 118 (120) 124 (30) 125 (60) 126 (120) 12А (24) 136 (120) 138 (120) 139 (15) 13А (8) 161 (12) 172 (120) 175 (30) 183 (60) 192 (40) 1А1 (6) 
ПРИЛОЖЕНИЕ 2 Лримитивные многочиены над GF(2) Примечание. Многочлены заданы индексами N, ~, О своих ненулевых коэф- фициентов, например строка 89 38 О соответствует многочлену х89 + х" +1. Примитивные многочлены вида Г+ х'+ 1, где N число Мерсенна 17 11 О 89380 521 363 О 17 120 127 64 О 521473 О 17 140 127 90 О 521 489 О 31180 127 97 О 607 334 О 31240 127 112 О 607 460 О 31 25 0 127 120 О 607 502 О 3128 О 521 353 О 1279 86! О 1279 1063 0 228! 1252 О 2281 !366 0 2281 1566 О 3217 2641 О 3217 3!50 О 1 О 210 310 410 520 610 710 86510 940 10 3 О 1120 127430 134310 134310 14 12 11 1 О 15 1 О 16 5 3 2 О 17 3 О 1870 !9 б 5 1 О 2030 21 2 О 22 1 О 23 5 О 2443 10 25 3 О 5027 26 1 О 26 8 7 1 О 51 16 15 1 О 27 8 7 1 О 52 3 0 28 3 О 53 16 15 1 О 2920 543736 1 О 30 16 15 1 О 55 24 О 31 3 О 562221 1 О 322827 1 О 57 7 О 33 13 О 58 !9 О 34 15 14 1 О 592221 1 0 3520 60!О 36 11 О 61 16 15 1 О 371210 2 О 625756 1 0 38 б 5 1 О 63 1 О 39 4 О 644310 402119 2 О 6518 О 41 3 О 66 10 9 1 О 42 23 22 1 О 67 10 9 1 О 43 б 5 1 О 68 9 0 442726 1 О 692927 2 О 4543 10 70!615 10 462120 1 О 71 6 0 47 5 О 725347 6 О 482827 1 О 7325 О 49 9 О 74 16 15 1 О 75 11 10 1 О 763635 1 О 773130 1 О 782019 1 0 79 9 О 803837 1 О 81 4 0 823835 3 О 834645 1 О 84 13 0 852827 1 0 86 13 12 1 0 87 13 О 887271 1 0 8938 О 90 19 18 1 0 918483 ! 0 92 !3 !2 1 О 9320 9421 0 95 11 О 964947 2 О 97 б О 98 11 О 
284 КРИПТОГРАФИЧЕСКИЕ МЕТОДЫ ЗАЩИТЫ И11фОРМАЦИИ В КОМПЬЮТЕРНЫХ СИСТЕМАХ И СЕТЯХ IIpMNMTMBHbTe многочлены вида Г+ x'+ 1, где i = 8, 16, 32, 64, 128 15 8 О 81 16 О 127 64 О 39 8 О 97 64 О 135 16 О 63 32 О 105 16 О 159 128 О 65 32 О 119 8 О 175 16 О 177 8 О 225 32 О 521 32 0 ezbt вида Г+ x'+ 1, Примитивные где (i, 2" — 1) 15 2 0 18 2 О го з о 23 5 О г390 2530 25 7 О 28 3 О 2890 28 13 О 33 1З О Зб 11 О 39 14 О 41 3 О 41 20 О 47 5 О 47 14 О 47 20 О 47 21 О 49 9 О 49 12 О 49 15 О 49 22 О 52 19 О 52 21 О 55 24 О 57 7 О 57 22 О 58 19 О .,60 11 О 63 5 О 63310 65 18 О мнОГОчл 68 9 О 68 33 0 71 б О 71 9 О 21 18 О 71200 21 35 О 73250 23 28 О 73 31 О 79 9 О 79 19 0 81 35 О 84 13 О 87 13 О 94 21 О 95 11 0 95 17 О 97 б 0 97 12 О 97 33 0 97 34 О 98 11 О 98 27 О 100 37 О Юз 9 О Ю313 О юз зоо 1ОЗ 31 О 105 17 О 105 37 О 105 43 О 105 52 О 106 15 0 108 31 О 111 10 О ill 49 О 113 9 0 113 15 0 113 30 О 118 33 О 118 45 О 119 38 0 121 18 О 129 5 О 129 31 0 129 46 0 13080 132 29 0 134 57 О 135 11 О 135 22 О 140 29 0 142 21 О 145 52 О 145 69 О 148 27 0 150 53 О 151 3 О 15190 151 15 О 151 31 О 151 39 О 151 43 О 151 45 О 151 51 О 151 63 0 151 66 О 151 67 О 151 70 О 159 31 О 159 34 О 159 40 О 161 18 0 161 39 0 161 60 О 170 23 0 172 7 0 174 13 О 175 6 0 175 18 О 175 57 О 177 22 О 177 88 О 128 87 О 183 56 О 194 87 О 198 65 0 201 14 0 201 17 О 201 59 О 201 79 0 202 55 0 207 43 О 212 105 О 218 11 О 218 15 0 218 71 0 218 83 О 
П pHAONEHHA 285 225 74 О 225 88 0 225 97 0 225 109 О 231 26 О 231 34 О 234 31 О 234 103 0 236 5 О 250 103 О 252 67 О 255 52 О 255 55 О 255 82 0 258 83 О 266 47 О 268 25 О 268 61 О 270 53 О 270 133 О 282 35 О 282 43 О 284 119 О 286 69 0 286 73 О 292 97 О 294 61 О 300 7 О 300 73 О 300 91 0 316 135 О 322 67 0 332 123 О 350 53 О 364 67 О 36629 О 378 43 О 378 107 О 380 47 О 390 89 О 396 25 О 396 109 О 396 169 О 396 175 О 404 189 О 412 147 О 428 105 О 436 165 О 460 61 0 462 73 О 475 15 О 476 141 0 484 105 О 508 109 О 524 167 О 532 37 О 540 179 О 540 211 О 564 163 О 588 151 0 588 253 О 708 278 0 708 301 0 756 119 О 756 349 О 780299 О 804 295 О 828 205 О 
ПРИЛОЖЕНИЕ 3 Примитивные многочпены над GF(2'}=(0,1,ш, ш'}, ш'+и+1=0, ш'=1и И(2'}=(0,1,ш,ш',шз,ш1,(aP,ш'}, ~ ~3+~ ~2+1 0 ~7 Примечания: 1. Многочлены заданы набором своих коэффициентов, например набор lolmo' соответствует многочлену х + х +ы+и', где и — примитивный элемент поля. 2. Многочлены f (х), для которых справедливо соотношение /' (.с) = а х~ /' х ', где а я GF(L), а w О, /'(х) — многочлен степени М, ух&l ;е имеющи с в спис не приводятся. GF(2 ) (N~ 10) (0110000001 mao) 10000001 GF(2 ) (Ка 8) 100001 (00) 1 и10 1 GF(2') (N 2) 3 6 3 1 (0 (0 1 (0® 1 2 2 2 3 2 5 (00) 1 (0 0) 1 0) 1 в11 в11 1 и и01 со10001 в110001 (o~ o) 1 0 0 0 0 1 в10100001 3 1001 в 11001 Q)100001 
IIPHJIOEEHHE 4 Поеочкые шифры AS/1, RC4, SOLITAIRE Исходные текстьс программ /' М/1. I * Copyright (С) 1998-1999: Mare Briceno, Ian Goldberg, and David Wagner * The source code below is optimized for instructional value and clarity. * Performance vill be terrible, but that' s not the point. * The algorithm is vritten in the С programming language to avoid ambiguities * inherent to the English language. Complain to the 9th Circuit of Appeals * if you have à problem with that. * This software may be export-controlled by US law. * This softvare is free for commercial and non-commercial use as long as * the follov'ng conditions are aheared to. * Copyright remains the authors' and as such any Copyright notices in * the code are not to be removed. * Redistribution and use in source and binary forms, with or vithout * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * THIS SOFTWARE IS PROVIDED ''AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEYiPLARY, OR CONSEQUENTIAL ' DAMAGES (INCLUDING, BUT NOT LIMITED ТО, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * The license and distribution terms for any publicly available version о." * derivative of this code cannot be changed. i.e. this code cannot s'mply be * copied and put under another distr.'bution license * [including the GNU Public License.] * Background: The Global System for Mobile communications is the most widely * deployed cellular telephony system in the world. GSM makes use of ' four core cryptographic algorithms, neither of which has been published by the GSM MOU. This failure to subject the algorithms to public review is all * the more puzzling given that over 100 million СЯИ ' subscribers are expected to rely on .йе claimed secur ty of the system. * * The four core GSM algorithms are: * A3 authentication algorithm * A5/1 "strong" over-the-air voice-privacy algorithm * А5/2 "veak" over-the-air voice-privacy algorithm * A8 voice-privacy key generation algorithm * In April of 1998, our group shoved that COMP128, the algorithm used by tne * overwhelming majority of GSM providers for both A3 and A8 
Криптографические мноды защиты информации в компьютерных системах и снях * functionality was fatally flawed and allowed for cloning of GSM mobile * phones. * Furthermore, we demonstrated that all A8 implementations we could locate, * including the few that did not use СОМР128 for key generation, had been * deliberately weakened by reducing the keyspace from 64 bits to 54 bits. * The remaining 10 bits are simply set to zero! * See http: //www.scard.org/gsm for additional information. * The question so far unanswered is if A5/1, the "stronger" of the two * widely deployed voice-privacy algorithm is at least as strong as the * key. Meaning: "Does А5/1 have à work factor of at least 54 bits"? * Absent à publicly available A5/1 reference implementation, this question * could not be answered. We hope that our reference implementation below, * which has been verified against official A5/1 test vectors, will provide " the cryptographic community with the base on which to construct the * answer to this important question. * Initial indications about the st ength of A5/1 are not encouraging. A variant of A5, while not А5/1 itself, has been estimated to have a * work factor of well below 54 bits. See ~М~р://)уа.сов/сгас1-а5.~Ма for * background information and references. * * With COMP128 broken and A5/1 published below, we will now turn our attention * to A5/2. The latter has been acknowledged by the GSM community to have * been specifically designed by intelligence agencies for lack of security. * We hope to publish A5/2 later this year. * -- Mare Briceno (marcgscard.org) * Voice.: +1 (925) 798-4042 */ finclude (stdio.h) /* Masks for the three shift registers */ fdefine R1MASK Ox07FFFF /* 19 bits, numbered 0..18 */ redefine R2MASK Ox3FFFFF /* 22 bits, numbered 0..21 */ redefine ВЗМАЯК Ox7FFFFF /* 23 bits, numbered 0..22 */ /* Middle bit of each of the three shift registers, for clock control */ redefine R1MID Ox000100 /* bit 8 */ redefine R2MID Ох000400 /* bit 10 */ redefine RÇMID Ох000400 /* bit 10 */ /* Feedback taps, for clocking the shift registers * These correspond to the primitive polynomials * x*19 + х"5 + х"2 + х + 1, x*22 + х + 1, * and x"23 + x"15 + x"2 + x + 1. */ redefine R1TAPS Ох072000 /* bits 18,17,16,13 */ fdefine R2TAPS Ох300000 /* bits 21,20 */ redefine RÇTAPS Ox700080 /* bits 22,21,20,7 */ /* Output taps, for output generation */ fdefine R1OUT Ox040000 /* bit 18 (the high bit) */ fdefine R20UT Ох200000 /* bit 21 (the high bit) */ redefine RÇOUT Ох400000 /* bit 22 (the high bit) */ typedef unsigned char byte; typedef unsigned long word; typedef word bit; /* Calculate the parity of а 32-bit word, i.e. the sum of its bits modulo 2 */ bit parity(word x) ( х "= x))16; x "= х))8; х "= x))4; x "= x))2; 
289 ll pNAO)KKHH$I х *= х> return х&am /* Clock one shift register */ word clockone(word reg, word mask, word taps) ( word t = reg & mp; t reg = (reg &l ;& t 1) & reg ~= parity(t) return reg; /* Look at the middle bits of Rl,R2,RÇ, take à vote, and * return the majority value of those 3 bits. */ bit majority() ( int sum; sum = parity(R1&R1 I ) + parity(R2&am ; 2MID) + parity(R3 if (sum &g ;= return 1; else return 0; /* Clock two or three of R1,R2,RÇ, with clock control * according to their middle bits. * Specifically, we clock Ri whenever Ri s middle bit * agrees with the majority value of the three middle bits.*/ void clock() { bit maj = majority(); if (((R1&R1MID) =0 == R1 = clockone(R1, R1MASK, R1TAPS); if (((R2&R2MID) =0 == R2 = clockone(R2, R2MASK, R2TAPS); if (((КЗЫЗМГР)!=О) == maj) RÇ = clockone(RÇ, RÇMASK, RÇTAPS); /* Clock all three of R1,R2,RÇ, ignoring their middle bits. * This is only used for key setup. */ void clockallthree() ( Rl = clockone(R1, R1MASK, R1TAPS); R2 = clockone(R2, R2MASK, R2TAPS); RÇ = clockone(RÇ, КЗМАЯК, RÇTAPS); /* Generate an output bit from the current state. * You grab à bit from each register via the output generation taps; * then you XOR the resulting three bits. */ bit getbit() ( return parity(R1&R10UT)"parity(R2&R20UT)"parity(ВЗ /* Do the A5/1 key setup. This routine accepts а 64-bit key and * а 22-bit frame number. */ void keysetup(byte key[8] word frame) ( ж bit keybit, framebit; /* Zero out the shift registers. */ R1 = R2 = RÇ = 0; /* Load the key into the shift registers, * LSB of first byte of key array first, * clocking each register once for every /* The three shift registers. They' re in global variables to make the code * easier to understand. * A better implementation would not use global variables. */ word R1, R2, RÇ; 
290 Криптографические методы защиты информации в компьютерных систквщ и сцпк * key bit loaded. (The usual clock * control rule is temporarily disabled.) "/ for (i=O; i(64; i») ( clockallthree(); /' always clock */ keybit = (key[i/8) » (i&amp 7 ) am ; 1 /* he -t bi key */ Rl "= keybit; R2 "= keybit; R3 "= keybit; /* Load the frame number into the shift * registers, LSB first, * clocking each register once for every * key bit loaded. (The usual clock * control rule is still disabled.) */ for (i=O; i(22; i») ( с1ос)са11three(); /* always clock "/ framebit = (frame » i) & mp 1 /* The -th bi of the f a Rl "= framebit; R2 "= framebit; R3 "= framebit:; /* Run the shift registers for 100 clocks * to mix the keying material and frame папЬег * together with output generation disabled, * so that there is sufficient avalanche. * We re-enable the majority-based clock control * rule from now on. */ for (i=O; i(100; 1») ( clcck(); /* Now the key is properly set up. */ /* Generate output. We generate 228 bits of * keystream output. The first 114 bits is for * the А-&g ;В fra e; he n xt 14 b ts is or * В-&g ;А fra e. ou alloc t а 15-b te buf * for each direction, and this function fills * it in. */ ~оЫ гоп(Ьу1е А~оВ1еуз~геав[], byte BtoAkeystream[]) ( int i; /* Zero out the output buffers. */ for (i=O; i(=113/8; i&gt AtoBkeystream[i] = BtoAkeystream[i] = 0; /* Generate 114 bits of keystream for the * А-&g ;В directi n. St re t, SB fir t. for (i=O; i(114; i») ( clock(); AtoBkeystream [i/8] ~ = getbit () (( (7- (i & mp 7 } / /* Generate 114 bits of keystream for the * В-&g ;А directi n. St re t, SB fir t. for (i=O; i(114; i») ( clock(); BtoAkeystream[i/8) ~= getbit() (( (7-(1&am ;7 /* Test the code by comparing it against * à known-good test vector. */ void test() ( byte key[8) = (Ох12, Ох23, Ох45, Ох67, ОХ89, ОХАВ, OxCD, OxEF}; word frame = Ox134; byte goodAtoB[15) = ( Ох53, Ох4Е, ОхАА, Ох58, Ox2F, ОхЕ8, Ох15, OxlA, ОхВб, ОхЕ1, Ох85, Ох5А, Ох72, ОХ8С, Ox00 }; 
291 П~иАОЖЕНиЯ byte goodBtoA[15] = ( Ох24, OxFD, Ox35, ОхА3, Ox5D, Ox5F, ОхВ6, Ох52, Ox6D, Ох32, OxF9, Ох06, OxDF, OxlA, OxCO !; byte AtoB[15), BtoA[15]; int i, failed=O; keysetup(key, frame); run(AtoB, BtoA); /* Compare against the test vector. */ for (i=O; < 5; i if (AtoB[i) != goodAtoB[i]) failed = 1; for (i=0; i< 5; if (BtoA[i) != goodBtoA[i]) failed = 1; /* Print some debugging output. */ printf( key: Ох ); for (i=O; i&lt 8; printf("Ф02Х", key[i)); printf("hn"); printf("frame number: Ox506X3n", (unsigned int) frame); printf("known good output:~n"); printf(" А-&gt В: Ох for (i=O; i< 5; printf("102Õ", goodAtoB[i]); printf(" В-&gt А: Ох for (i=O; i< 5; i printf("102Õ", goodBtoA[i)); printf("3n"); printf("observed output:(n"); printf(" А-&gt В: Ох for (i=O; i< 5; i printf("102Õ", AtoB[i]); printf(" В-&gt А: Ox for (i=O; i< 5; printf("'L02X", BtoA[i]); printf("(n"); if (' failed) ( printf ("Self-check succeeded: everything looks ok. 3n"); return; ) else ( /* Problems! The test vectors didn' t compare*/ printf("(nI don' t know why this broke; contact the authors.3n"); exit (1); ) int main(void) ( test(); return 0; ( ««*************************«**«******************* * RC4.pas — А binary compatible RC4 implementation * written by Dave Barton (davebarton9bigfoot.corn) * *****«*«**********«*****«*****«************«*«**** * Stream encryption * * Variable size key — up to 2048bit * *******«****«**************«*****«******«***«*«**« ) . unit RC4; interface uses Windows, Sysutils; type ° ° O ° ° ° ° ° ° ° ° ° ° ° O ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 9 ° ° ° 6 ° ° 6 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° й ° ° ° ° В ° ° ° Э ° ° ° ° ° ° ° ° ° ° ° 6 ° ° ° ° 9 ° ° ° ° ° ° ° é ° ° ° éÝ ° ° ° 6 ° ° ° ° ° 6 ° ° ° ° 
292 Криптографические методы защиты информации в компьютерных системдх и септх TRC4Data= record Кеу: array[0..255] of byte; OrgKey: array[0..255) of byte; end; ! ( current key ) ( original key ) function RC4SelfTest: boolean; ( performs à self test on this implementation ) procedure RC4Init(var Data: TRC4Data; Кеу: pointer; Len: integer); ( initializes the TRC4Data structure with the key information ) procedure RC4Burn(var Data: TRC4Data); ( erases all information about the key ) procedure RC4Crypt(var Data: TRC4Data; InData, OutData: pointer; Len: integer); ( encrypts/decrypts Len bytes of data ) procedure RC4Reset(var Data: TRC4Data); ( resets the key information ) (**ФФ************В*****************************************) implementation function RC4Se.' fTest; const InBlock: array[0..4] of byte= ($dc,$ee,$4c,$f9,$2c); OutBlock: array[0..4] of byte= ($fl,$38,$29,$c9,$de); Кеу: array[0..4] of byte= ($61,$8а,$63,$d2,$fb); var Block: array[0..4) of byte; Data: TRC4Data; begin RC4Init(Data,3Кеу,5); RC4Crypt(Data,3InBlock,3Block,5); Result:= СоврагеИев(3В1ос)с,30utBlock,5); RC4Reset(Data); RC4Crypt (Data, 3Block, 3Block, 5); Result:= Resu!.t and СоврагеИев(3В1ос)с,3InBlock,5); RC4Burn(Data); end; procedure RC4Init; var хКеу: array[0..255] of byte; j: nteger; t: byte; begin if (Len&l ;= О) or (L n&gt 256 raise Exception. Create('RC4: Invalid key length' ); for i:= 0 to 255 do begin Data.Key[i):= i; хКеу[i]:= PByte(integer(Кеу)+(i mod Len))"; end; ]:= 0; for i:= О to 255 do begin j:= (j>Data.Key[i]txKey[ ]) nd $ t:= Data.Key[i); Data.Key[i]:= Data.Key[j); Data.Key[j):= t; end; Move(Data.Кеу,Data.OrgKey,256); end; procedure RC4Burn; begin FillChar(Data,Sizeof(Data),$FF); end; procedure RC4Crypt; ° ° ° ° ° э ° ° ° ° ° ° ° ° ° э~В ° ° ° ° ° ° ° ° ° и ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ю.э ° ° ° ° ° ° ° ° ° ° ° э ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Ф ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
29) ll pHAONEHHQ procedure RC4Reset; begin Move(Data.OrgKey,Data.Кеу,256); end; end. /* RC4.Ü */ typedef struct rc4 key ( unsigned char state[256]; unsigned char х; unsigned char у; ) rc4 key; void prepare key(unsigned char *key data ptr,int key data len, rc4 key *key/; чоЯ rc4(unsigned char *buffer ptr,int buffer len,rc4 key * key); /* RC4.c */ ¹include "rc4.h" static void swap byte(unsigned char *а, unsigned char *b); void prepare key/unsigned char ~key data ptr, int key data 1еп, rc4 key 'key/ ( unsigned char swapByte; unsigned char indexl; unsigned char index2; unsigned char* state; short counter; state = 6key->state[ for(counter = 0; counter & t; 2 6; counter state[counter] = counter; key-&g ; = key-&g ; = index1 = 0; index2 = 0; for(counter = 0; counter & t; 2 6; counter f index2 = (key data ptr[indexl] + state[ccunter] + index2) Ь 256; swap byte(&state[count r), 6state[index indexl = (indexl + 1) t key data len; void rc4(unsigned char *buffer ptr, int buffer len, rc4 key *key) (" unsigned char x; var j: byte; k: integer; begin i!= 0 j:= 0; for k:= 0 to Len-1 do begin i:= (ill) and $FF; (j>Data.Key[ ]) nd $ t:= Data.Key[i]; Data.Key[i]:= Data.Êåó[~]; Data.Key[j]:= t; (Data.Key[i]tData.Key[j]) and $FF; PByteArray(OutData)[k]:= PByteArray(InData)[k] xor Data.Key[t]; end; end; 
294 unsigned char у; unsigned char* state; unsigned char xorIndex; short counter; x = key &gt у = key-&gt state = &key->st for(counter = 0; counter & t; buf er l n; coun er ( х= (х+1) Ф 256; у = (state[x] + у) Ф 256; swap byte(&state x], &st xorIndex = state[x] + (state[y]) Ф 256; buffer ptr[counter] "= state[xorIndex]; ) key-&g ; = key-&g ; = static void swap byte(unsigned char *а, unsigned char *Ь) ( unsigned char swapByte; swapByte = *а; *а = *b; *b = swapByte; /* The Solitaire encryption algorithm programmed in С. Programming by Lloyd Miller, Sept 2000 */ /* usage : to encrypt solitair -е key <plaint xt >cyph to decrypt solitair -d key <cyphert xt >pla void usage(void) ( fprintf(stderr, "usage:3n" 11 to to exit(EXIT FAILURE) ) int getalpha(void) ( int а; while (1) ( а = getchar(); finclude <stdio finclude <string f include <stdlib f include <unistd tinclude <assert finclude <ctype криптографические млады ввщиты информвции в компьютерных сист1вих и свтвх encryption" solitair -е key (plaintext >cyphertext decryption" soli air -d key <cyphert xt >plaintex 
npNAo)KKHNQ int findit(char deck, int val, int siz) ( int i = 0; while(siz--) ( if (*deck == val) return i; decks~; jhow; return -1; int step(char *deck) ( int c; int b; int а; char tmp[54]; do ( /* step 1 */ с = findit (deck, 53, 54); if (с & t; ( а=с+1; deck[c) = deck[a] ) else ( for (а = 53; а & t; 1; а deck[a) = deck[a — 1]; а=1; ) deck[a] = 53; /* step 2 */ Ь = f indit (deck, 54, 54); if (Ь & t; ( с=Ь+1; deck[b] = deck[c] if (а == с) a=b; b=c %1; deck [c] = deck [b); if (а == Ь) a=c; ) else ( с=b; Ь = Ь вЂ” 51; for (; с & t; Ь; с ( a =c; if (а == if (а &g return if (а &g return EOF) return 0; 'А' &a p &a p; a а; 'а' &a p &a p; а а — 'а' + 'А'; deck[c] = deck[c — 1); if (a == c - 1) 
296 deck [b] = 54; /* step 3 */ if (а &gt ( c= a; a=b; b=c; ) tmp [53) = deck [bit] с=0; while (Ь & t; tmp[ct&g ; = deck[bt Ь=а; while (deck[b] != tmp[53]) tmp[ctt] = deck[b»]; tmp[ci&g ; = tmp[5 Ь=О; while (Ь & t; tmp[ct&g ; = deck[bi assert(c == 54); /* step 4 */ b = tmp[53); if (Ь == 54) Ь = 53; deck[53) = tmp[53); /* step 5 */ а = deck[0] (а == 54) а = 53; а = deck[a]; ) while (а & t; 5 return (а — 1) В 26 t 1; int sumchar(int à, int Ь) ( return 'А' + (toupper(a) — 'A' + b + 26) Ф 26; int main (int argc, char **argv) ( а=О; for (c=b; deck [а++] for (c=0; deck [а~+] аззег (а == КриптогрАфические методы зАщиты информАции в KoMnbloTEpHblx системАх и сетях c & t; 3; c = tmp[c]; c & t; b; с = tmp[c]; 53); 
29У fl pHAONKHHQ char deck[54]; int i, j; int mode = 0; /* default mode is encode, non-zero is decode */ for (i = 0; i & t; 4; i deck[i] = i + 1; if (argc & t 1 && ar v[l] ( if(argv[1)[1] == 'd') ( mode = 1; ) else if (argv[1][1] == 'е') ( mode = 0; ) else usage(); ) else usage(); argc--; апач'+; /* do key */ while (argc-- & t; ( char *ар = *»argv; while (*ар) ( int c = *ар++; char tmp[53]; )= 'а' &a p &a p; c c — 'а' + 'А'; )= 'А' &a p &a p; с if (с с = if (с ( c-=с — "A" +1; step(deck); i = 0 for (j = c; j & t; 3; tmp[iit] = deck[j); for (j = 0; j & t; c; j tmp[i»] = deck[j]; for (j = 0; j & t; 3; deck[j] = tmp[j]; j=0; while ((i = getalpha()) != О) ( putchar(mode ? sumchar(i, -step(deck) ): sumchar(i, step.(deck) ) ); )»; if (j 15==0) ( if (j == 50) ( j =Ot putchar('3n'); ° ° Ф ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ЮЪ ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ( ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 'ю ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
298 ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° э ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° э ° ° ° ° ° ° ° ° ° ° ° ° ° в ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ) else putchar (' '); 1 = 'Х'; putchar(mode ? sumchar(i, -step(deck)) : sumchar(i, step(deck))); 1+1; printf("3n"); return EXIT SUCCESS; /* end of file */ )=) 45; if (j) while (j & t; ( Криптогрдфичкскиа мноды защиты информации в компьютерных системах и сетях 
ПРИЛОЖЕНИЕ 5 /' Rijndael Block Cipher — rijodael c Copyright (c) 1999 Mike Scott cl /02 rijndael.c bcc32 /02 rijndael.c (Microsoft C) (Borland C) Compiles and runs fine as à Ct& t; prog am al f include <std o. /* 8 bits */ /* 32 bits */ redefine BYTE unsigned char redefine WORD unsigned long /* rotates x one bit to the left */ ИеГine ROTL (х) (((х) > g ;7) ((х /* Rotates 32-bit word left by 1, 2 or 3 byte */ redefine ROTL8(х) (((х)<<8)!((х) f def ine КОТ? 16 (х) ( ( (х) <& t 1 ) ) ( (х) & redefine ROTL24(x) (((х) <& t 24) ((х /* Fixed Data */ static BYTE InCo[4]=(OxB,OxD,Oõ9,0xEj; /* Inverse Coefficients */ static BYTE fbsub[256]; static BYTE rbsub[256); static BYTE ptab[256),ltab[256); static WORD ftable[256); static WORD rtable[256); static WORD rco[30]; /* Parameter-dependent data */ int Nk,Nb,Nr; BYTE fi[24),ri[24]; WORD fkey[120); WORD rkey[120); static WORD pack(BYTE *b) ( /* pack bytes into а 32-bit Word */ return ((WORD)b[3] <& t;24) !((WOR )b[2] <<16) ((WO D)b[1) <& static void unpack(WORD а,BYTE *b) ( /* unpack bytes from à word */ b[0]=(BYTE)а; b[1]=(BYTE)(a>& b[2]=(BYTE)(а))16); b[3]=(BYTE)(a>&g Блочный шифр RlJNDAEL — победитель хонхурса AES. Исходный техст программы и тестовый пример 
static BYTE xtime(BYTE а) ( BYTE b; if (a&O 80) b=O else Ь=О; а<& а"=Ь; return а; static BYTE bmul(BYTE x,BYTE у) { /" x.у= AntiLog(Log(x) + Log(у)) */ if (x 56 у) return ptab[(ltab[x]tltab[y])~255]; else return 0; static WORD SubByte(WORD a) ( static BYTE product(WORD x,WORD y) { /* dot product of two 4-byte arrays */ BYTE xb[4],уЬ[4]; unpack(x,xb); unpack(у,yb) return bulul (xb [0], ób [0] ) "bmul (xb [1], уЬ [1] ) "bmu1 (xb [2], yb [2] ) "bmul (xb [3], уЬ [3] ); static WORD InvMixCol(WORD x) ( /* matrix Multiplication */ WORD y,m; BYTE b[4]; m=pack ( InCo); b[3]=product(m,x); m=ROTL24(m); b[2]=product(m,х); m=ROTL24(m); b[1]=product(m,x); m=ROTL24(m); b[0]=product(m,x); y=pack(b); return у; BYTE ByteSub(BYTE x) ( /* multiplicative inverse */ BYTE y=ptab[255-ltab[x]]; x=y; x=ROTL(x); у"=x; x=ROTL(x); у"=x; x=ROTL(x); у"=x; x=ROTL(x); у"=x; у"=Ox63; return у; void gentables(void) ( /* generate tables */ int i; BYTE у,b[4]; BYTE b[4]; unpack(а,b) b[0]=fbsub[b[0]]; b[1]=fbsub[b[1]]; b[2]=fbsub[b[2]]; Ь[3]=fbsub[b[3]]; return pack(b); Криптографические методы защиты информации в KoMIII loTEpHI,Ix системАх и сетях 
/' use 3 as primitive root to generate роыег and log tables */ ltab[0]=0; ptab[0]=1; ltab[1]=0; ptab[1]=3; ltab[3]=1; for (i=2;i<256; ( ptab [i] =ptab [i-1] х~1ве (ptab [i-1] ); ltab[ptab[i]]=i; /* affine transformation: — each bit is xored with itself shifted one bit */ fbsub[0]=ОхбЗ; rbsub[Ox63]=0; for (i=1;i<256;i ( y=ByteSub((BYTE)i); fbsub[i]=y; rbsub[y]=i; for (i=O,y=1;i<30;i ( rco[i]=y; y=xtime(у); ) /' calculate forward and reverse tables */ for (i=O;i<256; { y=fbsub[i]; Ь[3]=у"xtime(y); b[2;=y; b[1]=у; b[0]=xtime(у); f table [i] =pack (b) y=rbsub[i]; b [3] =bmul ( InCo [0], у); b [2] =bmul ( InCo [1], у); b [1] =bmul ( InCc [2], у); b [0] =bmul ( InCo [3], у); rtable [i] =pack (b); ) ) void gkey(int nb,int nk,cnar *key) { /' blocksize=32'nb bits. Key=32'nk bits */ /' currently nb,Ük = 4, б or 8 */ /' key comes as 4*Nk bytes */ /* Кеу Scheduler. Create expanded encryption key */ int i,j k,m,N; int C1,C2,С3; WORD CipherKey[8]; Nb=nb; Nk=nk; /* Nr is number of rounds */ if (Nb>= k) г б else Иг=бЮ)с; C1=1; if (ИЪ&lt 8 { C2 2; CÇ Ç else ( C2=3; C3=4; ) /* pre-calculate forward and reverse increments "/ for (m=j=O;j<nb;j+> ( fi[m]=(jiC1) bnb; fi [m~1]=(1+С2) 3nb; fi [пН-2]=(j> 3) ri[m]=(nbtj-С1) МЬ; ri [mal] = (nb+ j-C2) МЬ; 
302 ° °  ° e ° e ° ° ° ° ° ° ° ° e ° þ ° ° ° ° ° e ° э ° э ° 6 ° ° ° ° þ ° ° ° ° e ° ° e ° ô ° ° ° ° ° ° ° ° e ° ° ° ° ° ° ° ° ° e ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ri [m&gt 2 = ( b+ j- 3) 5 N=Nb* (Nrt 1 ) ° for (i=j=O;i<Nk;i>t ( CipherKey[i]=pack((BYTE ")&key[ ) for (i=0;i<Nk;i +) fkey[i]=CipherKey[ for (j=Nk,k=O;j<N;j+=Nk,k ( Й3сеу [ j ) =й)сеу [ j-Юс] "SubByte (ROTL24 (й)сеу [ j-1] ) ) "rco [k]; if (Я)с&lt ( for (1=1 i&lt Nk 6&amp (1+j) f key [i& t ] =f ey i< j Nk] f k y [i& /* now for the expanded decrypt key in reverse order */ for [j=O;j<Nb;j t] rkey[jtN-Nb]=fkey[ for (1=Nb; i<N- b; i&g ( k--й-ЯЬ-i;. for (j=O;j<Nb;j lt;>) rkey[k>j]=InvMixCol ) d'or (j=N-Nb; j&lt N; ») rkey[j-NiNb]=fkey[ /' There is an obvious time/space trade-off possible here. * Instead of just one ftable[], I could have 4, the other * 3 pre-rotated to save the ROTL8, ROTL16 and ROTL24 overhead / void encrypt(char *buff) ( int i,j,k,m; WORD а[8],b[8],*х, у,*t; for (i=j=O;i<Nb;i>+ ( a[i]=pack((BYTE ')&buff[ a[i]"=fkey[i]; k=Nb; x=a; y=b; /* State alternates between à and b */ for (i=1;i<Nr; ( /* Nr is number of rounds. May be odd. */ /* if Nb is fixed — unroll this next loop and hard-code in the values of fi[] */ for (m=j=O;j<Nb;jt< ( /* deal with each 32-bit element of the State */ /* This is the time-critical bit */ y[j]=fkey[k>t]"ftable[(BYTE)x[j ) else ( криптогрдфичаскиа методы защиты информации в KoMITI IoTEpHI Ix cHcTEMAx и сетях, for (i=1;i&l ;4 &&( 11еу [i& t ] =f ey i+ j- k) "й еу it j- if ((j&gt 4) lt;Я) fkey[j~4]=fkey[j gt;4-Nk] "SubByte( ke for (i=5; i&lt Nk &am ;6 (i& t; f key [it j ] =f key [it j-Nk] f key [i& t; j- 
)03 flppIAONEHHR ROTL8(ftable[(BYTE)(x[fi[m]]»8)])" ROTL16(ftaLle[(BYTE)(x[f'[m>'] »' 6)' ROTL24 ( f table [x [ f i [mt2] ] >& t; /* swap pointers */ t=x; x=y; y=t; /* Last Round — unroll if possible */ for (m=j=O;j<Nb;jib,mt ( у [1] =f key [k&gt ~ " (WO D) fb u [ (BY E ROTL8 ( (WORD) fbsub [ (BYTE) (x [ f i [m) ] »8) ] ) " ROTL16 ( (WORD) fbsub [ (BYTE) (x [й1 [m&gt 1 ] » 6 ] ROTL24 ( (WORD) fbsub [х [2i [пн2] ) »24] ); ) for (i=j=O;i<Nb;iii,j& ( unpack(y [i], (BYTE *) 6buf f [j] ); x[i]=y[i]=0; /* clean up stack */ } return; void decrypt(char *buff) ( int i, j,k,m; WORD a[8),b[8],*x,*у,"t; for (i=j=O;i<Nb;i +, 1+ ( a[i)=pack((BYTE *)5buff[j]); a[i)"=rkey[i]; k=Nb; x=a; y=b; /* State alternates between à and Ъ */ for (i=1;i<Nr;i ( /* Яг is number of rounds. May be odd. */ /* if ЯЬ is fixed — unroll this next loop and hard-code in the values of ri[] */ for (m=j=O;j<Nb;jt> ( /* This is the time-critical bit "/ y[j]=rkey[ktt]"rtable[(BYTE)x[j]]" ROTL8(rtable[(BYTE)(x[ri[m]1»8)])" ROTL16(rtable[(BYTE)(x[ri[m>1]]»16) ROTL24(rtable[x[ri[m>2]]»24 /* swap pointers */ t=x; x=y; y=t; /* Last Round — unroll if possible */ for (m=j=O;j<Nb;jt> ( у [ j ] =rkey [1++] " (WORD) rbsub [ (BYTE) х [ j ] ] " ROTL8 ((WORD) rbsub [ (BYTE) (x [ri [m) ] »8) ] )" ROTL16((WORD)rbsub[(BYTE)(x[ri[mt1]]»16)])" ROTL24((WORD)rbsubjx[ri[m+2]]»24]); ) for (i=j=O;i<Nb;i»,j+- ( unpack(y[i],(BYTE ")abuff[j]); x[i]=y[1]=0; /* clean up stack */ return; ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
)04 int main() ( /* test driver */ int i,nb,nk; char key[32]; сЬах block [32]; gentables (); for (i=0;i<32; «) key[i] key[0]=1; for (i=0; i<32;i i) block[i] for (nb=4;nb<=8;nba for (nk=4;nk<=8;nk+ printf ("(nBlock Size= И bits, Кеу Size= 1а bits3n",nb*32,nk" 32); gkey (nb, nk, key); printf("Plain= "); for (i=O;i<nb*4; ») printf("~02х",block[i printf("3n"); encrypt(block) printf("Encrypt= "); for (i=0;i<nb*4;i i) printf("50 x" (unsig ed char)block[i printf("3n"); decrypt(block) printf("Decrypt= "); for (i=O;i<nb*4;i t) printf("%02x",block[i printf("3n"); return 0; These test Лаче been provided by Paulo S. L. M. Barreto and Впал Gladman. 27th October 2000. Раи1о Barreto <paulo.barr t N terra.corn. Brian Gladman (Ьгд®gladman.uk.net& LEGEND FOR ENCRYPT (round number r = 0 to 10, 12 or 14) input: cipher input start: state at start of round[r] s box: state after s box substitution s row: state after shift row transformation m col: state after mix column transformation k sch: key schedule value for round[r] output: cipher output LEGEND FOR DECRYPT (round number r = 0 to 10, 12 or 14) KEY SCHEDULE FOR KEY XOR FOLLOWED BY INVERSE MIX COLUMN LEGEND FOR DECRYPT (round number r = 0 to 10, 12 or 14) KEY SCHEDULE FOR INVERSE MIX COLUMN FOLLOWED ВУ KEY XOR iinput: istart: is box: is гон: жрШ.: istart: is box: is гон: ik sch: ik add: ioutput: Криптографические ироды здщиты информации в компьютерных системах и снвх inverse cipher input state at start of round[rj state after inverse s box substitution state after inverse ski f t row trans f ormazd.ion key schedule value for round[r] state after key addition cipher оШрШ inverse cipher юрШ state at start of round[r] state after inverse s box substitution state after inverse shrift row transformation 
flpNA0NEÍИЯ im col: state after inverse mix со1аю transformation ik sch: key schedule value for round[r] ioutput: cipher output DECRYPT: round[ 0).iinput round[ 0].ik sch round[ 1].isKart round[ 1].is Ьох round[ 1].is row PLAINTEXT: KEY: ENCRYPT: round[ 0].юрШ round[ 0].k sch round[ 1].start round[ 1].s box round[ 1].s row round [ 1] .m col round[ 1].k sch round[ 2].start round[ 2].s box round[ 2].s row round[ 2] .m col round[ 2].k sch round[ 3].start round[ 3].s Ъох round[ 3].s row round[ 3].m col round[ 3].k sch round[ 4].start round[ 4].s Ъох round[ 4].s row round[ 4].m col round[ 4].k sch round[ 5].start round[ 5).s box round[ 5].s row round[ 5].m col round[ 5).k sch round[ 6].start round[ 6].s Ъох round[ 6].s row round [ 6] .m col round[ 6].k sch round[ 7].start round[ 7].s box round[ 7).s row round[ 7].m col round[ 7].k sch round[ 8].start round[ 8].s Ъох round[ 8].s row round [ 8] .m col round[ 8].k sch round[ 9].start round[ 9].s box round[ 9].s row round[ 9].m col round[ 9).k sch round[10].start round[10].s box round[10].s row round[10].k sch round[10].output 00112233445566778899aabbccddeeff 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 000102030405060708090aObOcOdOeOf 00102030405060708090aObOcOdOeOfO 63cab7040953d051cd60eOe7ba70e18c 6353e08c0960e104cd70b751bacadOe7 5f72641557f5bc92f7beÇb291db9f91a ббаа74йсИ2ай72йабааб7821ббаЬ7бйе 89d810e8855ace682d1843d8cb128fe4 а761са9Ь97Ье8Ь4568аб1аб11йс97369 a7bela6997ad739bd8c9ca451f618bál ff87968431d86a51645151fa773ad009 Ь692сйОЬ643с1ЬсЮ1Ье9Ьс50О6830ЬЗйе 4915598f55e5d7aOdaca94falfOa63f7 Çb59cb73fcd90ee05774222dc067fb68 Çbd92268fc74fb735767cbeOc0590e2d 4c9cleááf771f0762cÇf868e534df256 báff744ed2c2c9bfác590cbf0469bf41 fa636a2825b339c940668a3157244d17 2бйЪ02343йбб12сЫ09337ес75ЬЗбеЗЙО 2dád7ef 03f 33e334093602dd5bfb12c7 6385b79ffc538df997be478e7547d691 47f7f7bc95353e03f96c32bcfd058dfd 247240236966bÇfaáed2753288425bác 36400926f9336d2d9fb59d23c42c3950 36339d50f9b539269f2c092dc4406d23 f 4bcd45432e554d075 f ldác51dd03bÇc ÇcaaaÇe8a99f9deb50fÇaf57adf622aa c81677bc9b7ac93b25027992b0261996 e847f56514dadde23f77b64fe7f7d490 e8dab6901477d4653ff7f5e2e747dd4f 9816ee7400f87f556b2c049c8e5ad036 5e390f7df7a6929áa7553dc10aa31fáb c62fe109f75eedcÇcc79395d84f9cf5d b415f8016858552e4bb6124c5f998a4c Ь458124с68Ь68а014Ь99й82е5д15554с с57е1с159а9Ьб286205й4Ье098сб3439 14f9701ae35fe28c440adf4d4ea9c026 d1876cOf79c4300ab45594addááff41f Çe175076bálc04678df c2295 f áa8bf сО Çelc22cObáfcbf768da85067f6170495 baa03de7alf9b56ed5512cba5f414d23 47438735a41c65b9e016ba f 4aebf 7ad2 fdeÇbad205e5dOd73547964eflfe37fl 5411 f 4b56bd9700e96a0902 f albb9aal 54d990alába09ab596bbf40ea111702f e9f 74eec023020 f álbf 2cc f 2353c21c7 549932dlf08557681093ed9cbe2c974e bdáe7cÇdf 2b5779eOb61216e8b10b689 7a9f102789d5f50b2beffd9fÇdca4ea7 7ad5fda789ef4e272bca100bÇd9ff59f 1311167йе3944а17й307а78Ь462ЬЗОс5 69c4eOd86a7b0430d8cdb78070b4c55a 69c4eOd86a7b0430d8cdb78070b4c55a 13111d7fe3944a17f307a78b4d2b30c5 7аб5Иа789ей4е272Ьса100ЬЗб9йй591 bdb52189 f 261b63dOb107c 9e8báe776e bdáe7cÇdf 2b5779eOb61216e8b10b689 
306 DECRYPT: MODIFIED KEY SCHEDULE round[ 0].iinput 69с4е068ба7Ъ043068сбЬ78070Ь4с55а round [ 0] . ik sch 13111d7fe3944a17f307a78b4d2b30c5 round[ 1].isKart 7ad5fda789ef4e272bcalOObÇd9ff59f round[ 1].is box bdb52189f261b63dOb107c9e8báe776e round [ 1] . is row bdáe7cÇdf2b5779eOb61216e8b10bá89 round[ 1].im col 4773b91fй72й354361cb018ealeácй2с round[ 1].ik sch 13aa29be9c8faffáf770f58000f7bf03 round[ 2].isKart 54d990alába09ab596bbf40ea111702f round[ 2].is box fde596f1054737d235febad7fleÇd04e round[ 2].is row fdeÇbad205e5dOd73547964eflfe37fl round[ 2].im col 2d7e86a339d9393ee6570a1101904elá round[ 2]. ik sch 1362a4638f2586486bff5a76f7874a83 round [ 3] . isKart Çel c22cObáf cbf 768da85067 f 6170495 round [ 3] . is box dlc4941f 7955f 40fb46f 6c0ad68730ad round[ 3].is row d1876cOf79c4300ab45594addááff41f round[ 3].im col 39daee38f4fla82aaf432410c36d45b9 round[ 3]. ik sch 8d82fc749c47222be4dadc3e9c7810f5 round[ 4].isKart b458124c68b68a014b99f82e5f15554c round[ 4].is box сб5е39562779сй09ссй9е1с3842йе65б round[ 1).ik sch round[ 1].ik add :ound[ 2).isKart round[ 2].is box round[ 2].is row round[ 2].ik sch round[ 2].ik add round[ 3].istart round[ 3].is box round[ 3).is row round[ 3].ik sch round[ 3].ik add round[ 4].isKart round[ 4].is box round[ 4].is row round[ 4].ik sch round[ 4].ik add round[ 5].isKart round[ 5].is box round[ 5].is row round[ 5] .ik sch round[ 5].ik add round[ 6].isKart round[ 6].is box round[ 6].is row round[ 6].ik sch round[ 6].ik add round[ 7].isKart round[ 7].is box round[ 7].is row round[ 7].ik sch round[ 7].ik add round[ 8].isKart round[ 8].is Ъох round[ 8].is row round[ 8].ik sch round[ 8].ik add round[ 9].isKart round[ 9].is box round[ 9].is row round[ 9].ik sch round[ 9].ik add round[10).isKart гоигн3[10].is box round[10).is row гоиги3[10].ik sch round[10].ioutput Криптографические методы защиты информации в Kolllfll IOTEpHI lx системах и сетях 549932dlf08557681093ed9cbe2c974e e9f74eec023020fálbf2ccf2353c21c7 54d990alába09ab596bbf40ea111702f fde596f1054737d235f ebad7 f leÇd04e fdeÇbad205e5dOd73547964efl fe37 f1 47438735a41c65b9e016ba f 4aebf 7ad2 ЬааОЗбе7а1й9Ь56еб5512сЬа52414623 Зе1с22сОЬбйсЫ768ба85067161704 95 61с4941й7955240 ЮЬ4 бй бсОас168730ас1 б1876сОй79с4300аЬ4 5594асИ6622412 14f9701ae35fe28c440adf4d4ea9c026 c57elc159a9bd286f 05f 4be098c63439 b458124c68b68a014b99f 82e5f15554c c65e395df779cf09ccf9elc3842fed5d c62fe109f75eedcÇcc79395d84f9cf5d 5e390 f 7df 7a69296a7553dc10aa31 f áb 981áee7400 f 87 f 556b2c049c8e5ad036 e8dab6901477d4653ff7f5e2e747dd4f c87a79969b0219bc2526773bb016c992 c81677bc9b7ac93b25027992b0261996 ÇcaaaÇe8a99f9deb50f3af57adf622aa й4Ьсб454 32е55И075й1ббс51сИОЗЬЗс 36339d50f9b539269f2c092dc4406d23 2466756c69d25b236e4240fa8872b332 247240236966bÇfaáed2753288425bác 47f7f7bc95353e03f96c32bcfd058dfd 6385b79ffc538df997be478e7547d691 2dád7e f 03f 33e334093602dd5bfb12c7 йаЬ38а172566И284024бас957633931 f a63áa2825b339c940668a3157244d17 báf f 744ed2c2c9bf ác590cbf 0469bf 41 4c9cleááf771f0762cÇf868e534df256 ЗЬб92268йс74йЬ735767сЬеОс0590е2б 49е594й755ca638fdaOa59a01f15d7fа 4915598f55e5d7aOdaca94falfOa63f7 b692c f Ob643dbd f lbe9bc 5006830b3 f e ff87968431d86a51645151fa773ad009 a7bel a6997ad739bd8c9ca451 f 618bá1 895a43e485188fe82d121068cbd8ced8 89d810e8855ace682d1843d8cb128fe4 dáaa74 f dd2a f 72 f adaa 678 f ldáab76f е 5 f 7264155725Ьс92Й7ЬеЗЬ291бЪ9й91а 6353e08c0960e104cd70b751bacadOe7 0050aOf04090e03080d02070c01060bO 00102030405060708090aObOcOdOeOfO 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 
IlpNAoNEния round[ 4].is row round[ 4].im col round[ 4].ik sch round[ 5].isKart round[ 5].is box round[ 5].is row round[ 5].im col round[ 5).ik sch round[ 6].isKart round[ 6].is box round[ 6].is row round[ 6].im col round[ 6].ik sch round[ 7].isKart round[ 7].is box round[ 7].is row round[ 7].im col round [ 7] . ik sch round[ 8].isKart round[ 8]. is box round[ 8].is row round[ 8].im col round[ 8].ik sch round[ 9].isKart round[ 9].is box round[ 9].is row round[ 9].im col round[ 9].ik sch round[10].isKart гоиги3[10].is box round[10].is row гоыги3[10].ik sch round[10].ioutput PLAINTEXT: KEY: KEY: ENCRYPT: round[ 0].input round[ 0].k sch round[ 1].start round[ 1] .s box round[ 1].s row round[ 1].m col round[ 1].k sch round[ 2].start round[ 2].s box round[ 2].s row round[ 2].m col round[ 2].k sch round[ 3].start round[ 3] .s box round[ 3].s row round[ 3].m col round[ 3].k sch round[ 4].start round[ 4].s box round[ 4] .s row round[ 4].m col round[ 4].k sch round[ 5].start round[ 5].s box round[ 5).s row round[ 5].m col round[ 5].k sch round[ 6].start c62fel09f75eedcÇcc79395d84f9cf5d 9a39bfld05b20aÇa476aObf79fe51184 72e3098dllc5de5f789dfe1578a2cccb e8dab6901477d4653ff7f5e2e747dd4f c87a79969b0219bc2526773bb016c992 c81677bc9b7ac93b25027992b0261996 18f78d779a93eef4f6742967c47f5ffd 2ec410276326d7d26958204a003f32de 36339d50f9b539269f2c092dc4406d23 2466756c69d25b236e4240fa8872b332 247240236966bÇfaáed2753288425bác 85cf8bf472d124c10348f545329c0053 a8a2f5044de2c7f50a7ef79869671294 2dád7ef 03f 33e334093602dd5bfb12c7 f ab38a1725664d2840246ac957633931 f a 636a2825b339c940668a3157244d17 fclfclf91934c98210fbfb8da340eb21 c7cáe391e54032f1479c306d6319e50c Çbd92268fc74fb735767cbeOc0590e2d 49e594f755ca638fdaOa59aOlf15d7fa 4915598f55e5d7aOdaca94falfOa63f7 076518fOb52ba2fb7a15c8d93be45e00 aOdb02992286d160a2dc029c2485d561 a7bela 6997ad739bd8c9ca451f 618bál 895a43e485188fe82d121068cbd8ced8 89d810e8855ace682d1843d8cbl28 f e4 ef 053f 7c8bÇd32fd4d2a64adÇc9307la Sc56dff0825ddÇf9805adÇfc8659d7fd 6353e08c0960el04cd70b75lbacadOe7 0050aOf04090e03080d02070c01060bO 00102030405060708090aObOcOdOeOfO 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 00112233445566778899aabbccddeeff 000102030405060708090aObOcOdOeOf 1011121314151б17 00112233445566778899aabbccddeeff 000102030405060708090aQbOcOdOeOf 00102030405060708090aObOcOdOeOfO 63cab7040953d051cd60eOe7ba70e18c 6353e08c0960e104cd70b751bacadOe7 5172641557 Й5Ьс 92й7ЬеЗЬ291бЬ9й91а 10111213141516175846f2f95c43f4fe 4f63760643eOaa85aff8c9d041faOde4 84ЮЬ38 бй1ае1ас977941сЫ70832сЫ769 84eldd691a41d76 f 792d389783fbac70 9f 487 f 794 f 955f 662a f c86abd7 f lab29 544afef55847fOfa4856e2e95c43f4fe cb02818c17d2af9c62aa64428bb25fd7 lf770c64fOb579deaaac432cÇd37cfOe lfb5430efOaccf64aa370cdeÇd77792c b7a53ecbbf9d75aOc40efc79b674cell 40f949b31cbabd4d48f043b810b7b342 й75с7778а327с8еб8сйеЫс1абс37253 684af5bcOacce85564bb0878242ed2ed 68сс08ебОаЬЬб2Ьсб42ей555244ае878 7ale98bdacb6d1141a6944dd06eb2d3e 58e151ab04a2a5557effb5416245080c 22ffc916a81474416496f19c64ae2532 9316dd47c2fa92834390alde43e43f23 93faa123c2903f4743e4dd83431692de aaa755b34cf fe57cef áf 98el f01c13eá 2ab54bb43a02 f 8 f 662eÇa95d66410c08 80121e0776fdld8a8d8c31bc965dlfee 
)08 DECRYPT: round[ 0].iinput round[ 0].ik sch round[ 1].isKart round[ 1].is Ъох round[ 1].is row round[ 1].ik sch round[ 1].ik add round[ 2].istart round[ 2].is Ьох round[ 2].is row round[ 2].ik sch round [ 2] . ik add round[ 3].isKart round[ 3].is box round[ 3].is row round[ 3].ik sch round[ 3].ik add round[ 4].istart round[ 4].is Ъох round[ 4].is row round[ 4].ik sch round[ 4].ik add round[ 5).isKart round[ 5].is Ьох round[ 5].is row round[ 5].ik sch round[ 5].ik add round[ 6].istart round [ 6] . is Ьох round[ 6].is row round[ 6].ik sch round[ 6].ik add round[ 6) round[ 6] round[ 6] round[ 6] round[ 7] round[ 7] round[ 7] round[ 7] round[ 7] round[ 8] round[ 8] round[ 8] round[ 8] round[ 8] round[ 9) round[ 9] round[ 9] round[ 9] round[ 9] round[10] round[10] гоиги3[10] round[10] round[10] round[11] round[11] round[11] round[11] гоиги3[11] round[12] round[12] round[12] round[12] round[12] .s Ъох .s гон ° m col .k sch .start .s Ьох .з гон .m col .k sch .start .s Ъох .s гон .m col .k sch .start .s Ьох .s гон .m col .k sch .start .s Ьох .s гон .m col .k sch .start .s Ьох .s row .m со1 .k sch .start .s Ьох .s гон .k sch .output Криптографические ироды защиты информации в компьютерных системах и сетях cdc972c53854a47e5d64c765904cc028 cd54c7283864cOc55d4c727e90c9a465 921 f 748 fd96e937d622d7725ba8ba50c й50185729744867еЬбй1сбса87ЙЗЗеЗс 671eflfd4e2ale03dfdcblefÇd789b30 8572a1542fe5727b9e86c8df 27bc1404 85e5c8042 f 8614549ebca17b277272df e913e7b18 f 507d4b227e f 652758acbcc e510976183519b6934157c9ea351fleO Oc0370dOOc01e622166b8accdádb3a2c f e7b5170fe7c8e93477f 7e4bf áb98071 fe7c7e71fe7f807047b95193f67b8e4b ácf 5edf 996ebOa069c4ef21cbfc25762 1еа0372а995309167с439е77Ш2051е 7255dad30fb80310eOOdácáb40d0527c 40йс57667ббс7Ьсае167507й09700010 406c501076d70066e17057ca09f c7b7 f 7478bcdce8a50b81d4327a9009188262 dd7eOe887e2fff68608fc842f9dcc154 a906b254968af4e9b4bdb2d2fOc44336 d36f3720907ebfle8d7a37b58clcla05 d37e 3705907ala208dl c371e8c6 fbfb5 Od73cc2d8 f áabe8bOc f 2dd9bb83d422e 859f 5f 237a8d5aÇdcOc02952beefd63a 88ec930ef5e7e4bácc32f4c906d29414 c4cedcabe694694e4b23bfddáfb522fa с494Ьййаеб2322аЬ4ЬЬ5бс4ебйсеб9сЫ 71d720933bád677dcOOb8f28238eOfb7 de60le7827bcdf2ca223800fd8aeda32 afb73eeblcdlb85162280f27fb20d585 79a9b2e99c3eácdlaa3476ccOfb70397 793e76979c3403e9aab7b2d10fa96ccc a4970a331a78dc09c418c271eÇa41d5d dda97ca4864cdfe06eaf70aOecOd7191 сЫа97са4864сбйеОбеай70аОес067191 a4970a331a78dc09c418c271e3a41d5d 793e76979c3403e9aab7b2d10fa96ccc afd10f851c28d5eb62203e51fbb7b827 а fb73eebl cdlb85162280 f 27 fb20d585 de601e7827bcdf2ca223800fd8aeda32 71d720933bád677dcOOb8f 28238eOfb7 c494bffaeб2322ab4bb5dc4eáfce69dd 88e7f414f532940eccd293b606ece4c9 88ec930ef 5e7e4bácc32f 4c906d29414 859й5й237а8с5аЗбсОс02952ЬееИ63а 0673сс268йбаЬе8ЬОсй2сЫ9ЬЬ836422е d37e3705907ala208dlc371e8cáfbfb5 a98ab23696bd4354b4c4b2e9f006f4d2 a906b254968aй4e9b4bdb2d2fОс44336 dd7eOe887e2fff68608fc842f9dcc154 7478bcdce8a50b81d4327a9009188262 406c501076d70066e17057ca09fc7b7f 72b86c7cOfOd52dÇeOdOda104055036b 7255dad30fb80310eOOdácáb40d0527c lea0372a995309167c439e77ff12051e ácf 5edf 996ebOa069c4ef 21cbfc25762 fe7c7e71fe7f807047b95193f67b8e4b Oc018a2cOcáb3ad016db7022d603eácc Oc0370dOOc01e622166b8accdádb3a2c e510976183519b6934157c9ea351fleO e913e7b18f 507d4b227ef 652758acbcc 85e5c8042f8614549ebca17b277272df 672ab1304edc9bfddf78f1033dleleef 671eflfd4e2ale03dfdcblefÇd789b30 f 501857297448d7ebdflcáca87 f 33eÇc 921й748И9бе937662267725Ьа8Ьа50с 
$09 П РилОжениЯ DECRYPT: MODIFIED KEY SCHEDULE round[ 0].iinput dda97ca4864cdfe06eaf70aOecOd7191 round[ 0].ik sch a4970a331a78dc09c418c271eÇa41d5d round[ 1].isKart 793e76979c3403e9aab7b2d10fa96ccc round[ 1].is box afd10f851c28d5eb62203e5lfbb7b827 round [ 1] . is row afb73eeblcdlb85162280f27fb20d585 round [ 1] . im col 122a02f7242ac8e20605afce51cc7264 round[ 1]. ik sch dábebdOdc209ea494db073803e021bb9 round[ 2]. istart c494bffae62322ab4bb5dc4e6fce69dd round[ 2].is box 88e7f414f532940eccd293b606ece4c9 round[ 2].is row 88ec930ef5e7e4bácc32f4c906d29414 round[ 2].im col 5cc7aecceÇc872194ae5ef8309a933c7 round[ 2].ik sch 8fb999c973b26839c7f9d89d85c68c72 round [ 3] . istart б37е3705907а1а20861с371е8сбйЫЬ5 round [ 3] . is box a98ab23696bd4354b4c4b2e9f006f4d2 round[ 3].is row a906b254968af4e9b4bdb2d2fOc44336 round [ 3] . im col b7113ed134e85489b20866b5ld4b2c3b round [ 3] . ik sch Й77ббес1423Й54ей5378317й14Ь75744 round[ 4].isKart 406c501076d70066e17057ca09fc7b7f round[ 4]. is box 72b86c7cOfOd52dÇeOdOdal04055036b round[ 4].is row 7255бабЗОйЬ80310еООс1бсбЬ4060527с round [ 4] . im col ef Çblbelb9bOe64bdcb79fleOa707fbb round[ 4].ik sch 1147659047cf663b9bOece8dfcObflfO round[ 5).istart fe7c7e71fe7f807047b95193f67b8e4b round[ 5].is box Oc018a2cOcábÇad016db7022d603eácc round[ 5].is row Oc0370dOOc01e622166b8accdádbÇa2c round[ 5].im col 592460b248832b2952eOb831923048fl round[ 5].ik sch dccla8b667053f7dcc5c194ab5423a2e round[ 6].isKart 85e5c8042f8614549ebca17b277272df round[ 6].is box 672ab1304edc9bfddf78f1033dleleef round[ 6].is row 671eflfd4e2ale03dfdcblefÇd789b30 round [ 6] . im col ОЬ8а7783417аеЗа1й9492бсОсб41а7се round [ 6] . ik sch cádebOab791e2364a4055fbe568803ab round[ 7].isKart cd54c7283864cOc55d4c727e90c9a465 round[ 7].is box 80fd31ee768clf078d5dle8a96121dbc round[ 7].is row 80121e0776fdld8a8d8c31bc965dlfee round [ 7] . im col 4eelddf 9301d6352c9ad769ef Sd20515 round[ 7] round[ 7] round[ 7] round[ 7] round[ 7] round[ 8] round[ 8] round[ 8] round[ 8] round[ 8] round[ 9] round[ 9] round[ 9] round[ 9] round[ 9] round[10] гоиги3[10] round[10] round[10] round[10] round[11] round[11] round[11] round[11] round[11] round[12] round[12] гоыги3[12] round[12] round[12] .istart .is box ° 1s row .ik sch .ik add .isKart .is box .1s row .ik sch .ik add .isKart .is box .1s row .ik sch .ik add . isKart .is box . 1s Хow .ik sch .ik add .isKart .is box .1S rOW .ik sch .ik add .isKart .is box .1s row .ik sch .ioutput cd54c7283864cOc55d4c727e90c9a465 80fd31ee768clf078d5dle8a9612ldbc 80121e0776fdld8a8d8c31bc965dlfee 2ab54bb43a02f S f 662eÇa95d66410c08 aaa755b34cf fe57cef áf 98el f Olc13eá 93faa123c2903f4743e4dd83431692de 2214f132a896251664aec94164ff749c 22ffc916a81474416496f19c64ae2532 58e151ab04a2a5557effb5416245080c 7al e98bdacbád1141a 6944dd06eb2dÇe 68cc08edOabbd2bc642ef555244ae878 f727bf53aÇfe7f788cc377eda65cc8cl f 75c7778a327c8ed8c febf cia 6c37 f 53 40f949b31cbabd4d48f043b810b7b342 b7a53ecbbf9d75aOc40efc79b674cc11 lfb5430efOaccf64aa370cdeÇd77792c cbd264d717aa5f Sc62b2819c8b02af 42 cb02818c17d2a f 9c62aa 64428bb25 f d7 544afef55847fOfa4856e2e95c43f4fe 9f 487 f 794 f 955 f 662a f c86abd7 f lab29 84eldd691a41d76f 792d389783 fbac70 4feOc9e443f80d06affa76854163aadO 4йб3760643еОаа85айй8с96041йаОбе4 1011121314151617584бй2й95с43й4йе 5 f 72641557 f 5bc92 f 7beÇb291db9f 91а 6353e08c0960e104cd70b751bacadOe7 0050aOf04090e03080d02070c01060bO 00102030405060708090aObOcOdOeOfO 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 
3lO PLAINTEXT: KEY: KEY: ENCRYPT: round[ 0].input round[ 0].k sch round[ 1].start round[ 1].s Ъох round[ 1].s row round[ 1].m col round[ 1].k sch round[ 2].start round[ 2].s Ъох round[ 2].s row round[ 2].m col round[ 2].k sch round[ 3].start round[ 3].s Ъох round[ 3].s row round[ 3].m col round[ 3].k sch round[ 4].start round[ 4].s Ъох round[ 4].s row round [ 4] .m col round[ 4].k sch round[ 5].start round[ 5].s Ъох round[ 5].s row round[ 5].m col round[ 5].k sch round[ 6].start round[ 6].s Ъох round[ 6].s row round [ 6] .m col round[ 6].k sch round[ 7].start round[ 7].s Ъох round[ 7].s row round[ 7] round[ 8] round[ 8] round[ 8] round[ 8] round[ 8] round[ 9] round[ 9] round[ 9] round[ 9] round[ 9] гоигн2[10] гоигн2[10] гоигнй[10] round[10] round[10] round[11] round[11] round[11] round[11] round[11] гоигн3[12] round[12] round[12] гоигн3[12] round[12] .ik sch .isKart .is Ъох ° 18 хow .im col .ik sch .isKart .is Ъох ° 1s row .im col .ik sch .isKart .is Ъох .18 хow .im col .ik sch .is7art .is Ъох ° 18 хow .im col .ik sch .isKart .is Ьох ° 18 хою .ik sch .ioutput Криптографические мноды мщиты информации в KQMnbloTEpHblx cHcTEMAx и снях сЫ1Ъ7сбай2865с158а49аЫ6ЪЪс497сЬ 93faa123c2903f4743e4dd83431692de 2214f132a896251664aec94164ff749c 22ййс91ба81474416496219сб4ае2532 1008ffe53b36eeáaf27b42549b8a7bb7 78c4f708318dÇcd69655b701bfc093cf 68cc08edOabbd2bc642ef555244ae878 f727bf53aÇfe7f788cc377eda65cc8cl f75c7778a327c8ed8cfebfclaác37f53 7 f 69acled939ebaac8eceÇcb12e159e3 60dcef10299524ce62dbef152f9620cf lfb5430efOaccf64aa370cdeÇd77792c cbd264d717aa5f 8c62b2819c8b02af 42 cb02818c17d2af9c62aa64428bb25fd7 cfafláb2570c18b52e7fef50cab267ae 4b4ecbdb4d4dcfda5752d7c74949cbde 84eldd691a41d76f792d389783fbac70 4feOc9e443f80d06affa76854163aadO 4йб3760643еОаа85айй8с96041йаОбе4 794cf891177bfdld8a327086f3831b39 lalf181dlelblc194742c7d74949cbde 6353e08c0960e104cd70b751bacadOe7 0050aOf04090e03080d02070c01060bO 00102030405060708090аОЪОс060еОГО 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 00112233445566778899aabbccddeeff 000102030405060708090aObOcOdOeOf 101112131415161718191alblcldlelf 00112233445566778899aabbccddeeff 000102030405060708090aObOcOdOeOf 00102030405060708090aObOcOdOeOfO 63саЪ70409536051сббОеОе7Ъа70е18с 6353e08c0960e104cd70b751bacadOe7 5f72641557f5bc92f7beÇb291db9f91a 101112131415161718191alblcldlelf 4f63760643eOaa85efa7213201a4e705 84fb386flaelac97df5cfd237c49946b 84elfdábla5c946fdf4938977cfbac23 bd2a395d2báac438d192443e615da195 a573c29fa176c498a97fce93a572c09c 1859fbc28alcOOa078ed8aadc42f6109 adcbOf257e9c63eObc557e951c15ef01 ad9c7e017e55ef25bc150feOlccb6395 810dceOcc9db8172b3678cle88alb5bd 1651a8cd0244bedala5da4c10640bade 975cááclcb9fÇfa8a93a28df8ee10f63 884a33781fdb75c2d380349e19f876fb 88db34fblf807678dÇf833c2194a759e b2822d81abeáfb275faf103a078c0033 ae87dffOOffllb68a68ed5fb03fc1567 lc05f271a417e04ff921c5c104701554 9cáb89a349fOe18499fda678f2515920 9cf Oa62049fd59a399518984f 26be178 aeb65ba974eOf822d73f567bdb64c877 ádelf1486fa54f9275f8eb5373b8518d c357aaellb45b7bOa2c7bd28a8dc99fa 2е5Ъасй8айбеа9е73асб7а34с28бее26 2eáe7a2dafcáeef83a86ace7c25ba934 b951c33c02e9bd29ae25cdblefa08cc7 сб56827йс9а7991762294сесбс65598Ъ 72074143сЪ4е243ес10с81568375654с 62с5831а122236Ъ278йеОс4сес960329 d22fOc291ffe031a789d83b2ecc5364c 
round[ 7].m col round[ 7].k sch round[ 8].start round[ 8].s Ъох round[ 8].s row round[ 8].m col round[ 8].k sch round[ 9].start round[ 9].s Ъох round[ 9].s row round[ 9].m col round[ 9].k sch round[10].start round[10].s Ъох round[10].s row round[10].m col round[10].k sch round[11].start round[11].s Ъох round[11].s row round[11] .m col round[11].k sch round[12].start round[12].s Ъох round[12].s row round[12] .m col round[12].k sch round[13].start round[13].s Ъох round[13].s row round[13].m col round[13].k sch round[14].start round[14].s Ъох round[14].s row round[14].k sch round[14].output DECRYPT: round[ 0].iinput round[ 0].ik sch round[ 1].isKart round[ 1].is Ъох round[ 1].is row round[ 1]. ik sch round[ 1].ik add round[ 2].isKart round[ 2].is Ъох round[ 2].is row round[ 2]. ik sch round[ 2].ik add round[ 3].is7art round[ 3].is Ъох round[ 3].is row round[ 3].ik sch round[ 3].ik add round[ 4].is7art round[ 4].is Ъох round[ 4].is row round[ 4].ik sch round[ 4].ik add round[ 5].is7art round[ 5].is Ъох round[ 5].is row round[ 5]. ik sch round [ 5] . ik add round [ 6] . istart round[ 6].is Ъох еЪЪ19е1сЗее7с9е8767535е9еббЪ9144 Збе23а75524775е727ЪЮ9еЪ45407сй39 бб53а469бсаОЪсОЮ5асааЪ56Ъ9бс5е76 f6ed49f950e06576be74624c565058ff йбе062йй50745829Ъе5049765бе6654с 5174c8669da98435a8b3e62ca974a5ea Obdc905fc27b0948ad5245a4c1871c2f 5aa858395fd28d7d05ela38868f3b9c5 bec26a12cfb55dff6bf80ac4450d56a6 beb50aa6cff856126bOd6aff45c25dc4 Of77ee31d2ccadc05430a83f4ef96ac3 4525абб017Ъ2638730064633640а820а 4a824851c57e7e47643de50c2afÇe8c9 d61352dla6f3f3a04327d9fee50d9bdd d6f3d9dda6279bd1430d52aOe513f3fe bd86fOea748fc4f4630fllcle9331233 7ссйй71сЪеЪ4йе5413ебЪЪ206261а7сЮ c14907f6ca3b3aa070e9aa313b52b5ec 783bc54274e280e0511eacc7e200d5ce 78e2acce741ed5425100c5eOe23b80c7 af8690415d6eldd387e5fbedd5c89013 fOlafafee7a82979d7a5644ab3afe640 5f9c6abfbac634aa50409fa766677653 cfde0208f4b418ac5309db5c338538ed сйЪ4сйесЫ4093808538502ас336е185с 7427fae4d8a695269ce83d315be0392b 2541fe719bf500258813bbd55a721cOa 516604954353950314fb86e401922521 d133f22alaed2a7bfaOf44697c4f3ffd dled44fdlaOf3f2afa4ff27b7c332a69 2c21a820306f154ab712c75eeeOda04f 4e5a6699a9f24fe07e572baacdf8cdea 627ЪсеЪ999965ааас945есй42325бба5 aa218b56ee5ebeacdd6ecebf26e63c06 aa5ece06ee6e3c56dde68bac2621bebf 24fc79ccbf0979e9371ac23c6d68de36 8ea2b7ca516745bfeafc49904b496089 8ea2b7ca516745bfeafc49904b496089 24fc79ccbf0979e9371ac23c6d68de36 aa5ece06ee6e3c56dde68bac2621bebf 629deca599456db9c9f5ceaa237b5af4 627bceb9999d5aaac945ecf423f56da5 4e5a6699a9f24fe07e572baacdf8cdea 2c21a820306f154ab712c75eeeOda04f dled44fdlaOf3f2afa4ff27b7c332a69 5153862143fb259514920403016695e4 516604954353950314fb86e401922521 2541fe719bf500258813bbd55a721cOa 7427fae4d8a695269ce83d315be0392b cfb4dbedf4093808538502ac33de185c 5йсб9253Ъа4076ЪЮ5067бааабб9с34а7 5f9c6abfbac634aa50409fa766677653 f01afafee7a82979d7a5644ab3afe640 af8690415d6eldd387e5fbedd5c89013 78e2acce741ed5425100c5eOe23b80c7 c13baaeccae9b5f6705207a03b493a31 с14907йбсаЗЪЗаа070е9аа313Ъ52Ъ5ес 7ccff71cbeb4fe5413e6bbfOd261a7df bd86fOea748fc4f4630fllcle9331233 662369сЫаб279Ъ61430652аОе513ЮЗйе 4a7ee5c9c53de85164f348472a827eOc 4а824851с57е7е476436е50с2айЗе8с9 45й5абб017Ъ2638730064633640а820а Of77ee31d2ccadc05430a83f4ef96ac3 ЪеЪ50аабсйй856126ЪОббайй45с256а4 5ad2a3c55felb93905f3587d68a88d88 
3l2 round[ 6].is row round[ 6].ik sch round[ 6].ik add round[ 7].is7art round[ 7].is Ъох round[ 7].is row round[ 7].ik sch round[ 7].ik add round[ 8].isKart round[ 8].is Ъох round[ 8].is row round[ 8].ik sch round[ 8].ik add round[ 9].istart round[ 9].is Ъох- round[ 9].is row round[ 9].ik sch round[ 9].ik add round[10].isKart round[10].is Ъох round[10].is row round[10].ik sch round[10].ik add round[11].isKart round[11].is Ъох гошин[11]. is row round[11].ik sch round[11].ik add round[12].istart round[12].is Ъох round[12].is row round[12].ik sch round[12].ik add round[13].isKart round[13].is Ъох round[13].is row round[13].ik sch round[13] ik add round[14].is7art гошн3[14].is Ъох round[14].is row round[14]. ik sch round[14].ioutput CRYPT: M DE round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ round[ 0].iinput 0].ik sch 1].is7art 1].is Ъох 1].is row 1].im col 1].ik sch 2].isKart 2].is Ъох 2].is row 2].im col 2].ik sch 3].is7art 3].is Ъох 3].is row 3].im col 3].ik sch 4] . isKart 4].is Ъох 4].is row 4].im col 4].ik sch 5].istart Криптографические мноды защиты ииформации в компьютсриых системах и снях 5аа858395И2867с105е1а38868йЗЪ9с5 Obdc905fc27b0948ad5245a4c1871c2f 5174c8669da98435a8bÇe62ca974a5ea йбе062йй50745819Ье5049765бес1654с dáaOab7dácca5e695aáca40fb953bc5d 6653а4696саОЬсОй5асааЬ5с1Ъ9бс5е7с1 Çde23a75524775e727bf9eb45407cf39 еЪЬ19е1с Зее7с 9е87с17535е 9ес16Ь9144 d22fOc291ffe031a789d83b2ecc5364c 724е814ссЪОсс1543с175413е8307245с1 72074143сЪ4е243ес10с81568375654с сб56827йс9а79917бй294сесбсс15598Ъ Ъ951сЗЗс02е 9Ъс129ае25сс1Ь1ейа08сс7 2eáe7a2daf cáeef 83a86ace7c25ba934 с 345ЪсЮа1Ьс799е1а2с1сааЪОа 857Ъ728 c357aaellb45b7bOa2c7bd28a8dc99fa ádelf1486fa54f9275f8eb5373b8518d аеЪ65Ъа974е02822с1732567Ьс1Ь64с877 9cf Oa62049fd59a399518984f 26be178 lc17c554a4211571f970f24f0405eOcl lc05f271a417e04ff921c5c104701554 ае 87сЫЮОО й й11Ь68а 68ес15ЙЬОЗйс1567 Ь2822с181аЬе 6йЬ275йа 210 За 078с О О 33 88db34fblf807678dÇf833c2194a759e 979f 2863cbÇaOfcla9elááa88e5cÇfdf 975cááclcb9fÇfa8a93a28df8eelOf63 1651a8cd0244bedala5da4c10640bade 8106сеОсс 96Ь8172Ъ3678с1е88а1Ъ5Ъс1 ad9c7e017e55e f 25bc150 f e01ccb6395 181c8a098aedálc2782ffbaOc45900ad 1859ГЪс28а1сООа078е68аас1с4226109 a573c29fа17бс498а97йce93a572c09c Ъ62а39562Ьбас438619244 Зеб156а195 84elfdábla5c946fdf4938977cfbac23 4fe0210543a7e706efa476850163aa32 4f63760643eOaa85efa7213201a4e705 101112131415161718191alblcldlelf 5272641557 й5Ьс 9227ЬеЗЬ291с1ЬЭЙ91а 635 3е 08с О 960е104сс170Ь751Ъасас10е7 0050aOf04090e03080d02070c01060bO 00102030405060708090aObOcOdOeOfO 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff ODIFIED KEY SCHEDULE 8еа2Ъ7са 51674 5Ъйеайc49904b496089 24 f c79ccbf 0979e9371ac23cád68de36 aa5ece06eeáeÇc56dde68bac2621bebf 6296еса59945бс1Ъ9с9й5сеаа237Ь5ай4 627ЪсеЪ9999с15ааас945есй42325бс1а5 e51c9502a5c1950506a61024596b2b07 34й1с11ййЪйсеаа2ййсе9е252255801бе 61е644И1аОЮЗй2айа4йй27Ъ7с332аб9 5153862143fb259514920403016695e4 516604954353950314fb86e401922521 91а2930бсс450с1022бй4Ь5еаей5ейес18 5е1648еЬ384с350а7571Ь74 бс1с80еб84 сйЪ46ЪесЫ4093808538502асЗЗс1е185с 5fc69f53ba4076bf50676aaa669c34a7 5f9cáabfbac634aa50409fa766677653 b041a94e f f 21ae9212278d903b8a63f 6 с8а305808ЬЗЮ7Ь604327487069Ь1е331 78e2acce741ed5425100c5eOe23b80c7 c13baaeccae9b5f6705207a03b493a31 c14907 f ácaÇbÇaa070e9aa313b52b5ec 638357cec07de6300e30dOec4ce2a23c b5708e13665a7de14dÇd824ca9f151c2 662369сЫаб279Ъс11430652аОе51323йе 
flpHAONKHH$I round[ 5].is Ъох round[ 5].is row round[ 5].im col round[ 5].ik sch round[ 6].is7art round[ 6].is Ъох round[ 6].is row round [ 6] . im col round[ 6].ik sch round[ 7].istart round[ 7].is Ъох round[ 7].is row round[ 7].im col round[ 7].ik sch round[ 8].istart round[ 8].is Ъох round[ 8].is row round[ 8].im col round[ 8].ik sch round[ 9].isKart round[ 9].is Ьох round[ 9].is row round[ 9].im col round[ 9].ik sch round[10].istart round[10].is Ъох round[10].is row round[10].im col round[10].ik sch round[11].istart round[ll]. я Ъох round[11].is row round[11]. im col гошин[11].ik sch round[12].isKart round[12].is Ъох round[12].is row round[12].im col round[12].ik sch round[13].is7art round[13].is Ъох round[13].is row round [13] . im col round[13].ik sch round[14].is7art round[14].is Ьох round[14].is row round[14].ik sch гошн3[14]. ioutput 4a7ee5c9c53de85164f348472a827eOc 4a824851c57e7e47643de50c2afÇe8c9 caáf71058c642842a315595fdf54f685 74da7ba3439c7e50c81833a09a96ab41 beb50aaácff856126bOdáaff45c25dc4 5а62аЗс55йе1Ъ93905й3587668а88с188 5аа858395И28с17с105е1а38868йЗЪ9с5 ca46f5ea835eabOb9537b6dbb221b6c2 Зсаб9715с132айЗй22Ъ67ййас1е4ссй38е fáe062fй50745829Ъе5049765бе6654с dáaOab7dácca5e695aáca40fb953bc5d с1653а4696саОЪсОй5асааЪ5с1Ъ9бс5е7с1 2а70с8с1а28Ъ80бе9й319се42Ье4Ъаеас1 f85fc4f3374605f38b844df0528e98el d22fOc291ffe031a789d83b2ecc5364c 7f4e814ccbOcd543c175413e8307245d 7f074143cb4e243eclOc815d8375d54c 20073аЬ7404а8а1йс2сЬаОЪ80с1й08517 de69409aef8c64e7f84dOc5fcfab2c23 2ебе7а2с1айсбеей83а8басе7с25Ьа934 c345bdfalbc799ela2dcaabOa857b728 c357aaellb45b7bOa2c7bd28a8dc99fa 3225 f e3686e498a32593c1872b613469 ае65581бсй19с100Ьсс24803с190ас1511 9cfOa62049fd59a399518984f26be178 lc17c554a4211571f970f24f0405eOcl lc05f271a417e04ff921c5c104701554 9dld5c462e655205c4395b7a2eac55e2 15с б б 8Ъ631е5247с117с168Ь8 37е 6207с 886Ъ34ГЬ1Ю807678с13 й 83 Зс2194а759е 979f2863cbÇaOfcla9elááa88e5cÇfdf 975сббс1сЪ9йЗйа8а93а28йй8ее10ЯЗ d24bfbOelf997633cfce86e37903fe87 7И7850йб1сс9916736Ь890365с89с112 ас19с7е017е55ей25Ъс150йе01ссЬ6395 181c8a098aedálc2782ffbaOc45900ad 1859fbc28alcOOa078ed8aadc42f6109 aec9bda23e7fd8aff96d74525cdce4e7 2а2840с924234сс026244сс5202748с4 84elfdábla5c946fdf4938977cfbac23 4fe0210543a7e706efa476850163aa32 4f63760643eOaa85efa7213201a4e705 794cf891177bfdlddf67a744acd9c4fб lalf181dlelblc191217101516131411 6353e08c0960e104cd70b751bacadOe7 0050aOf04090e03080d02070c01060bO 00102030405060708090aObOcOdOeOfO 000102030405060708090aObOcOdOeOf 00112233445566778899aabbccddeeff 
ПРИЛОЖЕНИЕ 6 // aes defs.h // Copyright in this code is held Ъу Dr В. R. Gladman but free direct or // derivative use is permitted subject to acknowledgement of its origin // Dr В. R. Gladman (brian.gladman(btinternet.corn). 25th January 2000. fifndef AES DEFS redefine AES DEFS // 1. Standard types for AES cryptography source code typedef unsigned char ulbyte; // an 8 bit unsigned character type typedef unsigned short u2byte; // а 16 bit unsigned integer type typedef unsigned long u4byte; // а 32 bit unsigned integer type typedef signed char slbyte; // an 8 bit signed character type typedef signed short s2byte; // а 16 bit signed integer type typedef signed long s4byte; // а 32 bit signed integer type // 2. Standard interface for AES cryptographic routines redefine LITTLE ENDIAN enum dir flag ( enc = 1, dec = 2, both = 3 ); f i f de f cplusplus define STATIC class AES ( protected: dir flag mode; public: AES(void) : mode(both) ( ); virtual char *name(void) = 0; virtual void set key(const ulbyte key[], const u4byte key bits, const enum dir flag f = both) = 0; virtual void encrypt(const ulbyte in blk[], ulbyte out blk[]) = 0; virtual void decrypt(const ulbyte in blk[], ulbyte outblk[]) = 0; define define define define define AESREF АЕЯй IFREF std: ifstream6 OFREF std::ofstream6 IFILE std: ifstream OFILE std::ofstream kelse inline static int 0 1 define define define define define inline STATIC Ъоо1 false true typedef char* (*name alg)(void) Финалисты коннурса ASS — блочные шифры MARS, RC0, RIJNDAEL, SERPENT, TWOFISH. Исходные тексты программ 
3l 5 fl pHAONKHNQ extern enum dir flag mode; // in С the mode flag is declared in мз aux'.c f endif // 3. Basic macros for speeding up generic operations // Circular rotate of 32 bit values fifdef MSC VER include <stdlib 4 pragma intrinsic( lrotr, lrotl) define rotr(x,n) lrotr(x,n) define roti(x,n) lrotl(x,n) felse 4endif // Invert byte order in а 32 bit variable redefine bswap(x) // Put or get а 32 bit word (ч) in machine order from à byte address in (x) 4ifdef LITTLE ENDIAN redefine u4byte in(x) redefine u4byte out(x, ч) (*(u4byte*)(x)) (*(u4byte*)(x) = (ч)) felse redefine u4byte in(x) redefine u4byte out(x, ч) bswap(*(u4byte) (х) ) (*(u4byte*)(x) = bswap(v)) II Copyright ln this code 13 held Ьу Dr В. R. Glad. an but free direct О // derivative use is permitted subject to acknowledgement of its origin. // Dr В. R. Gladman (brian.gladmanPbtinternet.corn) 25th January 2000. fifdef cplusplus typedef void dir flag f); typedef void typedef void typedef struct ( name alg key alg enc alg dec alg ) alg s7Cuct; define AESREF 4 define IFREF 4 define OFREF define IFILE define OFILE redefine rotr(x,n) Oxlf)))))) fdef пе roti(õ,n) Oxlf)))))) 3endif 4endif // mars.h (*key alg) (const ulbyte key[], const МЪу~е key bits, const epum (*enc alg)(const ulbyte in blk[], ulbyte out blk[]); (*dec alg)(const ulbyte inblk[], ulbyte outblk[]); name; set key; encrypt; decrypt; alg struct FILE* FILE* FILE* FILE* ( ( (x) » ( (int) ( (n) & mp; 0 1 ) ) ) ~ ( (х lt;&l ; ( ( nt) ( (32 в ( ( (х) « ( (int) ( (n) & mp; O l f ) ) ) ~ ( (х gt;&g ; ( ( nt) ( (32 в (roti(x, 8) & mp; Ox00ff 0 f ~ rot (x ) & Oxf 
Криптографические мноды защиты информации в компьютерных системах и свмк define MARS(õ) mars: flax class mars : public AES ( private: u4byte 1 key[40]; public: felse 4 define MARS(x) mars flax STATIC u4byte МАЙСЯ(1 key[40]); 4endif char* void void void fifdef cplusplus )i 4endif // mars.c // Copyright in this code is held by Dr В.R. Gladman but free direct or // derivative use is permitled subject to acknowledgement of its origin // and subject to any constraints placed on the use of the algorithm by // its designers (if such constraints may exist, this will be indicated // below). // // Dr. В. R. Gladman (brian.gladman3btinternet.corn). 25th January 2000. // // This is an implementation of MARS, an encryption algorithm designed by // а team at IBM and submitled as à candidate algorithm for the Advanced // Encryption Standard programme of the US National Institute of Standards // and Technology. // // The MARS algorithm is covered by à pending patent application owned Ъу // IBM, who intend to offer à royalty free license under any issued patent // that results from such application if MARS is selected as the AES // algorithm. In the interim, you may evaluate the MARS algorithm for // your personal, lawful, non-profit purposes as an end user. // // NOTE: this is the revised second round variant of MARS finclude "aes defs.h" finclude "mars.h" fifdef cplusplus namespace ( fendif STATIC u4byte s box[] = ( Ox09dOc479, Ox28c8ffeO, Ox7dff9be3, Oxd4268361, Ox85d0582e, Ox2a4b5705, OxOflf25e5, Ox5160372f, Oxae5fábf4, OxOd72ee46, Oxf14902e2, OxÇe981e42, ОХ83631283, ОХ25970205, Ox4f846450, Ох5сб4сЗйб, Ox28f4e826, ОхЗабОа81с, Ox9dad7287, // Ох000 Ох7974сс93, ОхсЗЪ6279с1, Ox4d7ffle4, Oxblcf8e83, // Ох010 Ox7f4bf8ac, OxÇa7931d4, Охсб98ба26, Ox7ea820c4, // Ох020 Ох84аабс39, Охс9бс1а1с14, Ох1са1баб2, Oxc695cl fb, Oxff23de8a, Ox8bf53ebá, Ох7байе784, Ox210a5f18, Oxd340a664, MARS (name (void) ); MARS(set key(const ulbyte key[], const u4byte key bits, const enum dir flag I MARS(encrypt(const ulbyte in blk[], ulbyte out blk[])); MARS(decrypt(const ulbyte inblk[], ulbyte out blk[])); 
ПДилОжениЯ Ох526687с5, Ox7eddd12b, Ox32alldld, Ox80fáe831, ОхЬ6855бае, Oxabáf04ad, Oxci2250bod, Ох5бйЬ9Ь53, Ох294а7721, Охе82аае86, Ох93365104, ОхЬ69Ьа84Ь, Ох04046793, Ox2fe28134, Ох5а223942, Ох07сЫЪ846, ОхбеЬ88816, Ox3798670d, Oxcbfa9493, Oxdb1129dá, Oxb0449e20, Oxdlf45763, Ox4daa96c3, Oxbáccd201, Ox38d6279f, Ох092с237е, Oxbfc56593, Ox05bb9b43, Ox7dcd5dcd, ОхЗбаlс330, Ox3412elae, Ох30а2е809, Oxá8e5f551, Ох75се09с8, Ox9654f93e, Ox2b062b97, OxOf3b8d9e, Oxe35f9288, Oxc079550d, Ox75fe3578, Ох2йбс1829а, Охбб99486Ь, Ох90167с19Ъ, Oxe0670dd8, Охс1аЬ2еб92, OxÇaf345fO, Ox6241fc4d, Ox8bfldleO, Ох14аас070, Oxd2f29e01, Ох29а9с11йб, Oxb414935c, Oxá64465ed, Ох1с1293ба7, Охс1с580ааб, Охбсс181807, Ох8а98Ье4с, ОхсйеОеОЗс1, Oxb322517e, Ox52e8dd58, Ox58656dfb, Oxe337ef7e, Oxd39fb119, Oxa150aáe5, Ох55258962, Охаб19сс19е, Oxbcf09576, Ох4аЪ7а50Ь, Ох148412ба, Охйб957с149, Ох38ЬОба75, Oxf51c999e, Oxlaa4d343, Oxbffcd770, Охс7с275сс, Ox397f41bd, Ox4e94d131, Ox99f861b7, Охс9980а88, Ox614deedO, Oxb5778eea, Ox33f824b4, Охс4965372, Ох8630е964, Ох5ЬЗЮЬЬс16, ОХ04297514, OX2ci639306, Ох532459аО, Ox8e5f4872, Ох06446Ъ62, Oxafc8d52d, Oxlbc41d00, OxÇa2e8cOf, Ox13ba4891, Oxc4f8b949, Ox8359838b, Oxábdlaa31, Oxf5176781, Ox187dfdde, Ox431delda, Oxab394825, Охб59473еЗ, Охб23й7863, Ох334ба90Ь, Oxáb56443e, Ox9bOedlOc, Ox88flale9, Ox8d7ba426, Ox4cf5178a, Oxfcd651b9, Ох25605182, Ox337b3027, Oxb7c8eb14, // Ox030 // Ох040 // Ox050 // Ох060 // Ox070 // Ох080 // Ох090 // ОхОаО // ОхОЪО // ОхОсО // OxOdO // ОхОеО // OxOfO // Ox100 // Ох110 // Ох120 // Ox130 Ox6b57e354, Ox2c2fc7df, Охе1797а8Ъ, Ox73f9a978, Охе8а5Ъбс8, Охб84Й259а, Ох617Ъ978Ъ, Ох8еба0829, Ох8894Ъ022, Ox117c83fe, Oxf4562420, Oxc3601dÇb, Охб' ldfåå3, Ox58872aá9, Ох0824а734, Охс8а8309Ь, Охе9с1й2ЬОЗ, Ox720aldc3, Ox863b5ea3, Oxa73d36bf, Ох933ас568, Ох006662Ьб, OxÇa2fec10, Oxceda25ce, OxbÇc35047, ОхЗЬ14с184й, Охае136749, Ox78a784dc, Ox46caeldá, Охс190сбе3, Оха4ссае59, Oxeafc8ca8, Охб167с19а8, Oxababa014, Ох8137ácd5, Ox854b3e95, Oxfae527e5, ОхЗс411с171, Ox5dedOab8, Ox243cbÇe4, Oxfc5d6166, Ох8е531е74, Ox95e8eb8d, Ох1090асеf, Охе5393514, Ox7bcf3729, OxÇafd7dÇe, OxcfÇb870f, Ox59a744cl, Ох040а7а10, Oxc33e92b5, Ох386Ъ2с4а, Ох41811896, Ox68 f eaOlb, Oxd7c9cd7a, ОхйООЗfbÇc, Oxa64fc9cá, Ox63d094cf, Oxce9f8e99, Ox7b21be33, Ох5915еа51, OxbOa495f8, Oxfa90clf8, Ox4ca5fecO, ОхЪ203231а, Охlба45272, Ox07128dcO, Oxd838e7ce, Oxb984737d, Oxa215cdce, Ох21Ъ93293, Ох2Ъ38И54, Oxdfea32aa, ОхаЪЗаЪ685, Ox8d421fcO, Ox7dead57b, Oxla9a5f08, ОхЪбИ9676, Oxad913cf7, Охе389сссб, Oxa4a8d57b, Ох73398с132, ОХ84860704, Ox943ba848, Oxád9b58ef, Ох8695Ъс14, Ox2f511c27, Ох 4е12Ь414, Ох55792е2а, ОхбсООаЬ46, Ох257с3207, Ox7el 6688d, Ox30738dfl, Ох5Ь5сП93Ь, OxOf59573e, Ox98df93c2, Oxaá370152, OxOa700dd4, Oxe35b3447, OxddfbccÇc, Oxc2bca766, Ох4бй5с1857, Oxefac9c28, Oxfcid58482, Ox9c9ef086, Ox8b2e095c, Oxe21fb253, Ох99404абб, Ox23db5cle, Ox1863cd5b, Ox2dOdcc4a, Ox4f481ci45, OxOf5407fb, ОхЗЪес5958, Ох02682215, Ox32889d2c, Оха02е92бс, Охй257й462, Ox9cálba44, Ох698сОсса, OxOOe050df, Ох0591аее8, Oxf 60b21ae, ОхЫбс1бе31, Oxcdád4365, Ох460с1аЗаЗ, Ox1587ed55, OxefblOc53, Ох024асас7, Oxcf574ca8, Охассеа063, Ox2092bdlЗ, Ох50820371, Охс9720с1йб, Oxebáff41b, Ох2672с073, Ox487ba9bl, Oxdd805fcd, Oxb8495294, Ох378453а7, Ox92cclf98, Oxld74fd5f, OX5941792ci, ОхЗййбс1550, Ох7с1а2ба48, Ox2eb13149, Охй9ббс7с19, Ох06316131, Охеа83837е, Охабс1басЬЗ, Охf579сЫ52, Oxe94aeb76, Ox9ad3048f, Oxf334ác59, Охсбс1е01й8, Ox54clf029, Ох551а7сса, Oxellfcác3, Ox9e5fd030, 
3l8 Криптографические мноды защиты информации в компьютерных системах и савх // Ох140 // Ох150 // Ох160 // Ox170 // Ох180 // Ox}90 // ОхlаО // ОхlЪО // OxlcO // OxldO // OxleO // Oxlf0 STATIC u4byte Ъ tab[4] = ( Оха4а8657Ъ, Ox5b5d193b, Ox73f 9а978 Охс8а8309Ъ, // key mixing array STATIC u4byte t key[15]; redefine f mix(a,Ъ,c,d) r = rotr(a, 8); Ъ "= s Ъох[а & mp; 2 Ъ += s Ьох[(r & mp; 5 ) + 2 r = roar(а, 16); а = rotr(a, 24); с += s box[r & mp; 2 d "= sboõ[(а & mp; 5 ) t Ох23ЪесЪ64, Ох7796943с, Oxda44e9ed, OX690624f8, Oxfa929ala, Ох010е65с4, OX158ci7ci03, Ох2191ба7Ъ, Ox8cea17dl, OxOf9b9dÇc, Oxcd67eb2f, Ox419cflad, Ox160bead7, OX000399bci, Oxca815ab3, Ox108f8fa4, Oxab2701d4, Oxf8b2cÇaf, Ох2ЪаеЪйй4, OxOle87daá, Ох963Ъ71И, Ох183с198е, Ox923750af, Ox81b66760, Охас143507Ъ, Ox054356dc, Ох35830311, Ox63eldáb8, Ox72698d7d, Oxdcd9433e, Oxa5a96dcc, Ох4е208804, Ox8b7ad4bf, Охlеб2891с, Охйб442389, Ox42157abe, Ох953194е7, Oxbf447469, Oxde425f73, Ox49dc9a63, OxOc18588d, OxÇc5cfcaa, Ох4Ъ37802Ъ, Ox692f2f08, Oxedb93ecf, Oxle760flá, Ox3ab871bd, Oxabb96061, ОхеЪс977Ъб, Ox159cf22a, ОхаЪ561187, Oxa075fÇa3, OxfacabfÇd, Ох2с854с12, ОхlсЪОЪаfd, Oxád969a17, Ox86aÇd963, Ох287а8255, Ох77Ъ56Ъ86, Oxcd8c62bc, Oxdáaa295b, Oxe2ebádc2, Ox2b83c045, OX5ci494656, ОХ67466880, Ох5а6395е7, Ox10223eda, Ox0262d415, Oxdaf7ef70, Ox70f687cf, Охбсе91еба, Ох060е41сб, Ox63eeb240, Oxf9e14236, ОхЪЪ292бсl, Ox718d496a, Oxde7ced35, Oxc96efca2, Oxc80f9778, Ох5е368с31, OX896f1552, OxObef8b46, Ох9а756607, Oxc6403f35, OX643ci2107, Ох0778404е, Оха2253е2е, Ox77eb92ed, Oxf26ci9483, ОхЪ4е59й43, Ox98c39d98, Оха421сlЪа, Ox7d239ca4, Ox7428ab54, Ох134е578е, Ох2Ъ27248е, Oxb1136601, Oxcfa4d76f, Ox5370f85d, Oxob98b40f, Oxc298dáe2, Ox14eeaOfO, Ox088f8ead, Ox07adf158, Oxc09730cd, Oxf7679969, Ox35935fa3, Ox2f057d9f, Ox7bOdbdcá, Ox810f23bb, Охб742979Ъ, Ox74ac7d05, Oxf907b5aO, Oxd0042bd3, Oxbba8366f, Ox096edc33, Ox951622f9, Oxaác5e650, OxaÇd63433, Qx358a68fd, Oxfe33384a, Охс000738е, Ox97338b02, Ox06c9f246, Ox3723f18a, Oxcb5b3089, Ox35f8a74b, Охlе4ебс9е, Oxb4174831, Oxacf423b2, Ох302аб7с5, Ox8bdb446b, Ох92Ъ8Ъ48Ъ, Ox7f38dOee, Oxaf224a30, OxbÇd88aba, Oxcc97dÇb7, Охе9614Ъбс, Ох386с9156, Охсе092ее5, Oxbb7bcc84, Охс7922с20, Oxd7590f15, Ox4e03bb47, Ox2ddbf49a, Охб65сЪа54, Ox7838162b, Ох5972бс72, Ox48aOceOd, Охабс049бс1, Ox9df057af, Ox44blbdeá, Oxd51a138b, Охб2088сс9, Ox686f86ec, Ох8е77сЪ68, Ox79c491fd, Oxlb4c67f2, Oxf7d95e2e, Oxald3493f, Ох4Ъс4са7а, Oxaádlbaf4, Oxa169fda7, Ox74df40b7, Ох038е87с8, Ох20211е44, Ox1848e36d, Ox80bdb038, ОхЪЮ046628, Ох21092с8с, Ox7b78adb8, Oxa2c52d53, Ox7bfÇf4ae, Ox80f594f9, Oxb3816930, Oxda8d9336, Oxeeáfaed5, Ох71371235, Ox7dbe2d4e, Ox2d37b185, Ох1301с9а2, Ox389blbbf, Ох7аа3865с, Ох71е08558, Ox0297d9dd, Oxd7dc2830, Охаеее0347, Ox4bÇfbb85, Ox36d9eObf, Oxae8b5fcf, Ox170eblef, Ох7бс57Иб, Ох864еlЪ9Ъ, Oxd7ea7319, Oxe31bd782, OxOdbeb469, Oxffb07e37, Охс1а3060ЮЪ, OxÇa4dOfeá, Oxdf4fc26b, Ox2b78efáa, Охбlа94асО, OxdfOd4164, Ox19af70ee 
Положения redefine Ъ mix(a,b,c,d) r = roti(а, 8); b "= s Ъох[(а & mp; 5 ) i 2 с -= s box[r & mp; 2 r = royal(a, 16); а = roti(а, 24); d -= s box[(r & mp; 5 ) + 2 d "= sboõ[а & mp; redefine f ktr(a,Ъ,c,d,i) m = à t ИВЯ(1 key) [i]; а = roti(a, 13~; r = а * ИАВЯ(1 key) [i + 1]; 1 = s box[m & mp; 5 r = roti(r, 5); с += roti (m, r); r = roti (r, 5); 1 "= r; Д ]~»' ° Ъ += roti (l, r) redefine r ktr(a,Ъ,c,d,i) r = а * ИВЯ(1 key) [i + 1]; а = rotr(a, 13~; m = à + ИАВЯ(1 key) [i]; 1 = s box[m & mp; 5 r = roti(r, 5); 1"=r; с -= roti (m, r); r = roti (r, 5); л л b -= roti(1, r) // For а 32 bit word (х) generate à mask (m) such that à bit in // m is set to 1 if and only if the corresponding bit in х is: // // 1. in à sequence of 10 or more adjacent '0' bits // 2. in à sequence of 10 or more adjacent '1' bits // 3. but is not either endpoint of such à sequence // // The top and botlom bits of words must Ъе endpoints and are // hence always set to zero in this process. My thanks go to // Shai Halevi of IBM for the way of finding the sequences of // '0's and '1's at the same time. waif (0) // Now implemented in line but this code kept for documentation // purposes STATIC u4byte gen mask(u4byte х) ( u4byte m; // if m(bn) stands for bit number Ъп of m, set m(bn) = 1 if // x(bn) == x(bn&gt 1) o 0 &l ;= Ъп lt;= 30. Tha s, // in m if the corresponding bit and the next higher bit in // x are equal in value (set m(31) = 0) . в = (-х " (х » 1)) & mp; Ox7ffff // Sequences of 9 '1' bits in m now correspond to sequences // of 10 '0's or 10 '1' bits in x. Shift and 'and' bits in // m to find sequences of 9 or more '1' bits. As à result // bits in m are set if they are at the botlom of sequences // of 10 adjacent '0's or 10 adjacent '1's in x. в &a p;= ( » ) &amp m» ); в a p;= (m 
320 Криптогрдфические методы мщиты информдции в компьютерных системах и сетях i f (! m) // return if mask is empty — no key fixing needed // is this early return worthwhile? return 0; // We need the internal bits in each continuous sequence of // matching bits (that is the bits less the two endpoints). // We thus propagate each set bit into the 8 internal bits // that it represents, starting 1 left and finsihing 8 left // of its position. m «= 1; m I (m « 1); m 1= (m « 2); m (= (m « 4); return в 6 Oxfffffffc; ) fendif fifdef cplusplus ) 77 end of апопувоця namespace fendif char* MARS(name(void)) ( return "вагя"; void MARS(set key(const ulbyte in key[], const u4byte key bits, const enum dir flag f)) ( u4byte i, j, в, tl, t2, *kp; в = key bits / 32; if(m& t 4 i( m& return; for(i = 0; i & t; в; i t key[i] = u4byte in(in key + 4 * i); t key[i&gt & t; for(; i & t; 5; + t key[i] = 0; kp = MARS(1 key); fdefine tkl(j) tl = t key[j] "= roti(tl " t key[(j + 8) t 15], 3) " (i + 4 * j) redefine tk2(j) t2 = t key[j] "= roti(t2 " t key[(j + 8) % 15], 3) " (i + 4 * j) redefine tk3(j] t key[)] = tl = roti(t key[j7 t s box[tl й 511], 9] for(i = 0; i & t; 4; ~ ( tl = t key [13]; t2 = t key [14]; tkl ( О); tk2 ( 1); tkl ( 2); tk2 ( 3); tk1 ( 4); tk2 ( 5); tkl ( 6); tk2 ( 7); tkl ( 8); tk2 ( 9); tkl (10); tk2 (11); tkl (12); tk2 (13); tkl (14); ~)сЗ( О); ~)сЗ( 1); ~)сЗ( 2); ОсЗ( 3); МЗ( 4); ~)сЗ( 5); ~)сЗ( 6); ~)сЗ( 7); ~)сЗ( 8); ~)сЗ( 9); tk3(10); tk3(11); tk3(12); ОсЗ(13); tk3(14); ~)сЗ( О); ~)сЗ( 1); ~)сЗ( 2); ОсЗ( 3); ~)сЗ( 4); ~)сЗ( 5); ~)сЗ( 6); ~)сЗ( 7); ~)сЗ ( 8); ОсЗ ( 9); tk3 (10); tk3 (11); tk3 (12); tk3 (13); tk3 (14); tk3 ( О); tk3 ( 1); tk3 ( 2); tk3 ( 3); tk3 ( 4); tk3 ( 5); tk3 ( 6); tk3 ( 7); ~)сЗ ( 8); ~)сЗ ( 9); tk3 (10); ОсЗ (11); tk3 (12); tk3 (13); tk3 (14); ~)сЗ( О); ~)сЗ( 1); ~)сЗ( 2); ~)сЗ( 3); ~)сЗ( 4); ~)сЗ( 5); ОсЗ( б); ~)сЗ( 7); ~)сЗ ( 8); ~)сЗ ( 9); tk3 (10); tk3 (11); tk3 (12); tk3 (13); tk3 (14); ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° а'е ° ° ° ° ° ° ° ° ° м ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
Ilpj4AOA(EHNQ *kptt = t key[ 0]; *1р++ = t key[ 4]; *1р++ = t key[ 8]; *1р++ = t key[12]; *kpt& t t k y[ ]; *k t t k y[ ]; *k a t k y[ ]; +k & t < = t *kp&g ; g ; = ke [ 2]; * p > = t for(i = 5; i & t; 7 i += ( j = MARS(1 key) [i] ~ 3; в = (-j " (j » 1)) & mp; Ox7ffff rn &a p;= rn ) &a p; rn 2 ; rn &a p = ( n» if (rn) ( в «= 1; в [= (в « 1); в ~= (в &l ;&l ; 2) в [= (в в &a p;= Oxfffff (roti(b tab[MARS(1 key)[i] & mp; 3], MA S(1 ke )[i — 1 ) & ) MARS(1 key) [~) = j; return; // ARM С compiler fails in attempting to optirnise common sub-expressions // the following code — turn it off fif defined( анп) pragrna no optimize cse fendif void MARS(encrypt(const ulbyte in blk[16), ulbyte out blk[16])) ( u4byte а, Ь, с, d, 1, в, r; а = u4byte in(in blk ) + MARS(1 key) [О]; Ь = u4byte in(in blk + 4) ИЛЬЯ(1 key) [1); с = u4byte in(in blk + 8) + MARS(l key) [2); d = u4byte in(in blk + 12) MARS(1 key) [3]; а += d; Ь += c; а += d; Ь += с; f ktr(c,d,а,Ь, 8); f ktr(d,à,Ь,c,10); f ktr(c,d,à,Ь,16); f ktr(d,à,Ь,c,18); f ktr(c,b,а,d,24); f ktr(d,c,b,à,26); f ktr(c,Ъ,а,d,32); f ktr(d,c,Ь,а,34); f ktr(a,Ь,c,d, 4); f ktr(b,c,d,а, 6); f ktr(a,Ь,с,d,12); f ktr(b,c,d,à,14); f ktr(а,d,с,Ь,20); f ktr(b,à,d,с,22); f ktr(a,d,c,Ь,28); f ktr(b,à,d,c,30); Ь mix (a, Ü, с, d) Ь mix(b,c,d,а) b mix (c, d, а, Ь) Ь mix(d,а,Ь,с) Ь mix(a,Ü,c,d) Ь mix(b,c,d,а) Ь mix(c,d,а,Ь) Ь mix(d,а,Ь,с) I ; с d b ° I -= а I -= Ь' I ; с б -= а; u4byte out(out blk, MARS[1 КеуТ[37]]' f mix f mix f mix f mix f mix f mix f mix f mix (а,Ь,c,d); (Ь,с,d,а); (c,d,а,Ь); (d,а,b,c); (а,b,с,d); (Ь,с,d,а); (c,d,а,Ь); (d,à,Ь,c); а — MARS(l key) [36]); u4byte out(out blk + 4, Ъ— 
322 Криптографические METoAl 1 мщиты информдции в компьютернык cHcTEMAx,è саик u4byte out(out blk + 8, с — MARS(1 key) [38]); u4byte out(out blk + 12, d— MARS(1 )теуТ[39]) ' ) void MARS(decrypt(const ulbyte in blk[16], ulbyte out blk[16]) ) ( u4byte а, Ь, с, d, 1, в, r; d = u4byte in(in blk ) + MARS(1 key) [36]; с = u4byte in(zn blk + 4) MARS(1 key) [377; b = u4byte in(in blk + 8) + ИАКЯ(1 key) [38]; а = u4byte in(in blk + 12) MARS(1 Кеу) [397; а+=@ Ь+=c а += d; Ь += c; r ktr(d,а,Ь,с,28); r ktr(d,а,b,c,20); r ktr(d,c,b,а,12); r ktr(d,с,b,а, 4); r ktr(b,c,d,а,32); r ktr(b,c,d,а,24); r ktr(b,à,d,с,16); r ktr(b,а,d,c, 8); r ktr(а,Ь,с,d,34); r ktr(a,b,с,d,26); r ktr(а,d,с,b,18); r ktr(a,d,c,b,10); b mix(a,b,c,d) b mix(b,c,d,а) b mix(c,d,а,Ь) b mix(d,à,b,c) b mix(a,b,c,d) b mix(b,с,d,а) b mix(c,d,а,Ь) b mix(d,à,b,c) bÄ а; bÄ а; d — MARS(1 key) [0]); u4byte out(out blk + 4, с— 8, Ь вЂ” MARS(1 key) [2]); u4byte out(out blk + 12, а— ц4Ьу7е out(out blk, MARS(1 key7[1]); u45yte out(out blk + MARS(1 key7 [ 3] ); ) ¹if defined( arm) pragma optimize cse ¹endif // rc6.h // Copyright in this code is held by Dr В. R. Gladman but free direct o // derivative use is permitted subject to acknowledgement of its origin. // Dr В. R. Gladman (brian.gladmanPbtinternet.corn). 25th January 2000. ¹ifdef cplusplus define RC6 (х) rcá:: №№х class rcá : public AES ( private: u4byte 1 key[44]; public: ¹else define RC6(x) rc6 ¹¹x STATIC u4byte RC6(1 key[44]); ¹endif f mix f mix f mix f mix f mix f mix f mix f mix (а,Ь,c,d); (b,c,d,а); (c,d,а,Ь); (d,а,b,с); (а,Ь,c,d); (Ь,с,d,а); (c,d,а,Ь); (d,а,b, c); r ktr(c,d,а,Ь,30); r ktr(c,d,а,b,22); r ktr(c,b,а,d,14); r ktr(c,b,а,d, 6); 
323 IlpHAO)kEHHjl RC6 (паве (void) ); RC6(set key(const ulbyte key[], const u4byte key lеп, const enum dir flag char* void void void RC6(encrypt(const ulbyte in blk[], ulbyte out blk[])); RC6(decrypt(const ulbyte inblk[], ulbyte outblk[])); fifdef cplusplus )i fendif // rcá.с // Copyright in this code is held by Dr В.R. Gladman but free direct or // derivative use is permitted subject to acknowledgement of its origin // and subject to any constraints placed on the use of the algorithm Ъу // its designers (if such constraints вау exist, this vill be indicated // below). // // Dr. В. R. Gladman (brian.gladmanPbtinternet.corn). 25th January 2000. // // This is an implementation of RC6, an encryption algorithm designed Ъу // by Ron Rivest (RSA Labs) and submitted as à candidate algorithm for the // Advanced Encryption Standard programme of the US National Institute of // Standards and Technology. // // The designers of the RC6 algorithm may have placed restrictions on its // use that will need to be complied with in any use of this code. finclude "aes defs.h" finclude "rcá.h" char* RC6(name(void)) ( return "rcá"; fdefine f md(i,à,Ъ,с,d) u = roti(d * (d + d + 1), 5); t = roti(b * (b + Ъ + 1), 5); а = roti(a " t, u) + RC6(l key) [i]; с = roti(c " u, t) + RC6(l key) [i + 1] и; 1 fdefine i md(i,à,Ь,с,d) u roti(d' (d+ d+1), 5); t =rotl(b* (Ъ+b+1), 5); с = rotr (c — RC6(l key) [i + 1], t) а = rotr (a — RC6 (l key) [i], u) " t // initialise the key schedule from the user supplied key void RC6(set key(const ulbyte in key[], const u4byte key len, const enum dir flag f)) ( u4byte Т[8], i, j, k, а, b, t; RC6(1 key)[0] = Oxb7e15163; for(k = 1; k & t; 4; te RC6(1 key)[k] = RC6(l key)[k — 1] 1 Ох9е3779Ъ9; for(k = 0; k & t; ey e / 2; & 1[k] = u4byte in(in key + 4 * k); // t = (key len / 32); t = (key len / 32) — 1; =3 =0; a=b=i for(k = 0; k & t; 1 2; te ( а = roti(RC6(l key) [i] + à + b, 3); b += а; ° ° ° Ф ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
324 Криптографические методы защиты информации в компьютерных систвмх и саях: Ь = roti(1[j] + Ь, b); RC6(1 key) [i] = а; 1[j] = b; (7==43? 0: i+1); // i (i+1) % 44; j = (j == t ? 0: j + 1); // j = (j + 1) % t; ) return; encrypt à block of text void RC6(encrypt(const ulbyte in blk[16], ulbyte out blk[16])) ( u4byte а,Ь,c,d,t,u; а = u4byte in(in blk ); Ь = u4byte in(in blk + 4) + RC6(1 key) [0]; с = u4byte in(inblk + 8); d = u4byte in(in blk + 12) + RC6(1 key) [1]; u4byte out (out blk, а + RC6 (1 key) [42] ); u4byte out (out blk + 4, b); u4byte out(out blk + 8, с + RC6(1 key) [43] ); u4byte out(out blk + 2, d); decrypt à block of text void RC6(decrypt(const ulbyte in blk[16] ulbyte out blk[16])) ( u4byte а,Ь,с,d,t,u; d = u4byte in(in blk t 12); с = u4byte in(in blk t 8) — RC6(1 key) [43]; b = u4byte in(in blk + 4); а = u4byte in(in blk ) — RC6(1 key) [42]; , u4byte out (out blk 1 12, d — RC6 (1 key) [1] ); u4byte out (out blk + 8, с); u4byte out (out blk + 4, b — RC6 (1 key) [0] ); u4byte out (out blk, а); r>jnd e // // // Copyright in this code is held by Dr В. R. Gladman but free direct or derivative use is permitted subject to acknowledgement of its origin. Dr В. R. Gladman (brian.gladmanPbtinternet.corn). 25th January 2000. fifdef cplusplus беГine RIJNDAEL(х) rijndael::34х class rijndael : public AES ( private: u4byte k len; f md( 2,а,Ь,c,d); f md( б,с,d,а,Ь); f md(10,а,b,с,d); f md(14,с,d,à,Ь); f md(18,а,b,c,d); f md(22,с,d,а,Ь); f md(26,а,b,c,d); f md(30,с,d,а,Ь); f md(34,а,b,с,d); f md(38,с,d,а,Ь); i md(40,d,à,Ь,c); i md(36,b,с,d,а); i md(32,d,а,Ъ,с); i md(28,b, с,d а); i md(24,d,а,b,с); i md(20,b,с,d,а); i md(lá,d,а,b,с); i md(12,b,с,d а); i md( 8,d,à,b,с); i md( 4,b,с,d,а); f md( 4,Ь,с,d,а); f md( 8,d,а,Ъ,с); f md(12,b,с,d,а); f md(lá,d,а,b,с); f md(20,b,с,d,а); f md(24,d,а,b,с); f md(28,b,с,d,а); f md(32,d,а,b,c); f md(36,b,с,d,а); f md(40,d,а,b,c); i md(38,с,d,а,Ь); i md(34,а,b,c,d); i md(30,с,d,а,b); i md(26,а,b,c,d); i md(22,с,d,а,Ь); i md(18,а,b,c,d); i md(14,с,d,а,b); i md(10,а,b,с,d); i md( б,с,d,а,Ь); i md( 2,а,b,c,d); 
1 $25 Il pHAO)KEHHI е key[64]; d key[64]; u4byte u4byte public: «е1яе бей1пе ИЛ~ОАЕЬ(х) rijndael ««х STATIC u4byte RIJNDAEL(k len) STATIC u4byte RIJNDAEL(е key)[64]; STATIC u4byte RIJNDAEL(d key)[64]; «endif char* RIJNDAEL(name(void)); void RIJNDAEL(set key(const ulbyte key[], const u4byte key len, const enum dir flag f)); void RIJNDAEL(encrypt(const ulbyte in blk[], ulbyte out blk[])); void RIJNDAEL(decrypt(const ulbyte inblk[], ulbyte out blk[])); «ifdef cplusplus )i «endif // rijndael.c // Copyright in this code is held by Dr В.R. Gladman but free direct. or // derivative use is permitted subject to acknowledgement of its origin // and subject to any constraints placed on the use of the algorithm by // its designers (if such constraints вау exist, this will be indicated // below). // // Dr. В. R. Gladman (brian.gladmanPbtinternet.corn). 25th January 2000. // // This is an implementation of Rijndael, an encryption algorithm designed // by Daemen and Rijmen and submitted as à candidate algorithm for the // Advanced Encryption Standard programme of the US National Institute of // Standards and Technology. // // The designers of Rijndael have not placed any constraints on the use of // this algorithm. «include "aes defs.h" «include "rijndael.h" «define LARGE TABLES «i fdef cplusplus павеярасе ( «endif pow tab[256]; log tab[256]; sbx tab[256]; isb tab[256]; rco tab[ 10]; ft tab[4)[256); ittab[4][256]; STATIC ulbyte STATIC ulbyte STATIC ulbyte STATIC ulbyte STATIC u4byte STATIC u4byte STATIC u4byte «ifdef LARGE TABLES STATIC u4byte fl tab[4][256]; STATIC u4byte il tab[4][256]; «endif STATIC u4byte tab gen = 0; inline ulbyte f mult(ulbyte à, ulbyte b) ( ulbyte аа = log tab[a], cc = аа + log tab[b]; ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 6 ° ° ° ° ° ° ° ° ф ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 
Криптографические методы мщиты иифорвщии в KoNTll IolfpHl lx cHcTKMIx и c65lx' return pow tab[cc 1 (cc & t; а : О // Extract byte frora а 32 bit quantity (little endian notation) fdefine byte(x,n) ((ulbyte)((х) » (8 * (n)))) f def ine f f result (а, Ь) (а йй Ь ? f result(a, Ь): 0) 3],1) ] 3),2) ] 3],3) ] " *(k + n) 3],1)] 3),2) ] 3],3) ] " *(k + n) fifdef LARGE TABLES felse 4define ls box(x) ((u4byKe)sbx tab[byte(x, 0)] &l ;& ((u4byte)sbx tab[byte(х, 1)] &l ;& ((u4byte)sbx tab[byte(x, 2)] « 16) ((u4byte)sbx tab[byte(x, 3)] « 24) redefine f rl(bo, bi, n, k) bo[n] = (u4byte) sbx tab[byte(bi[n],0) ] roti ( ( (u4byte) s5x tab [byte (bi [ (n t 1) й 3], 1) ) ), 8) roti(((u4byte)sbx tab[byte(bi[(n + 2) й 3],2)]), 16) roti(((u4byte)sbx tab[byte(bi[(n + 3) й 3],3)]), 24) redefine i rl(bo, bi, n, k) bo[n] = (u4byte) isb tab[byte(bi[n],0) ] roti(((u4byte)isb tab[byte(bi[(n + 3) й 3],l)]), 8) roti(((u4byte) isb tab[byte(bi[(n + 2) й 3],2) ]), 16) roti ( ( (u4byte) isb tab [byte (bi [ (n + 1) & mp; 3] ) ), 4endif // log and power tables for GF(2**8) finite field with redefine f rn(bo, bi, n, k) bo[n] = ft tab[0) [byte(bi[n),0) ] ft tab[1) [byte(bi[(n + 1) й ft tab[2] [byte(bi[(n + 2) й 21 tab[3] [byte(bi[(n + 3) й fdefine i rn(bo, bi, n, k) bo [n] = it tab [О) [byte (bi [n], О) ] it tab[1] [byte(bi[(n + 3) й it tab[2] [byte(bi[(n + 2) й it tab[3] [byte(bi[(n + 1) й redefine ls box(x) ( fl tab[0) [byte(x, 0) ] fl tab[1)[byte(x, 1)] fl tab[2][byte(x, 2)) fl tab[3][byte(x, 3)] ) 3define f rl(bo, bi, n, k) bo[n) = fl tab[0] [byte(bi [п],0) ) fl tab[1] [byte(bi[(n + 1) й fl tab[2] [byte(bi [(n + 2) й fl tab[3] [byte(bi[(n + 3) й f def ine i rl (bo, bi, n, k) bo[n] = il tab[0] [byte(bi[n],0) ] il tab[1) [byte(bi [(n + 3) & il tab[2] [byte(bi[(n t 2) й il tab[3] [byte(bi[(n + 1) & STATIC void gen tabs(void) ( u4byte i, Е; ulbyte р, q; 3],1) ) 3],2)] 3],3) ) " *(k + n) 3),1) ] 3],2) ] 3],3) ] " *(k + n) л л "*(k+ n) л л "*(k+ n) 
327 Прможвния ' // OxOllb as modular polynomial — the simplest prmitive // root is Ох03, used here to generate the tables for(i = О,p = 1; ~ & t; 2 6; w ( pox tab[i] = (ulbyte)p; log tab[p] = (ulbyte)i; р "= (р « 1) " (р й Ox80 ? OxOlb : О); ) log tab[1] = 0; for(i = О,р = 1; i & t; 0; + ( rco tab[i] = р; р = (р « 1) " (р й Ox80 ? Ox01b : О); ) for(i = 0; i & t; 2 6; + ( р = (i ? pox tab[255 — log tab[i]] : О); q = ((р » 7) I (р « 1)) " ((p » 6) I (р « 2)); р "= Охб3 " q " ((q » 6) 3 (q « 2)); sbx tab[i] = р; isb tab[р] = (ulbyte)i; for(i = 0; i & t; 2 6; + ( р = sbx tab[i]; ¹ifdef LARGE TABLES t = р; fl tab[0][i] = t; fl tab[1]gi] = roti(t, 8); fl tab [2] [i] roti (t, 16); fl tab[3] [~] = roti(t, 24); ¹endif ((u4byte)ff mult(2, р)) ((u4byte)p « 8) ((u4byte)p « 16) ((u4byte)1й mult(3, р) « 24); р = isb tab[i]; ¹ifdef LARGE TABLES t = р; il tab[0][i] = t; il ~аЬ[1]~1] = roti(t, 8); il tab[2] [i] = roti(t, 16); il tab[3] [i] = roti(t, 24) р ¹endif ((u4byte)йй mult(14, р)) ((u4byte)йй mult( 9, р) « 8) ((u4byte)ff mult(13, р) « 16) ((u4byte)ff mult(11, р) « 24); tab gen = 1; ft tab[0][i] fttab[1][i] fttab[2][i] fttab[3][~] it tab[0][i] it tab[1][i] it tab[2][i] it tab[3][i] = roti (t, 8); = roti(t, 16); = roti(t, 24); t„' roti (t, 8); roti(t, 16); roti(t, 24); 
Криптографические методы мщиты информации в KoMnbloTEpHblx cHcTEMAx u cEIIIK ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° в ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° 4def ine star x (x) ( ( (х) й Ох7171717й) &l ;& t ) " ( ( ( (х) й Ox808 8 80 7) * redefine iraix col(y,õ) u = star х(х); ч = star x(u); w = star х(ч); = w " ~х); (у) = ц " ч " w; (у) "= rotr(u" t, 8) rotr (ч " t, 16) rotr(t,24) gifdef cplusplus ) 77 end of anonymous naraespace fendif char* К?JNDAEL(паве(void)) { return "rijndael"; // initialise the key schedule frora the user supplied key Ие1ine loop4 (i) { t = rotr(t, 8); t = ls box(t) t "= RIJNDAEL(e key) [4 ~ i]; t "= RIJNDAEL(e key) [4 * i + 1); t "= RIJNDAEL(e key) [4 * i + 2]; t "= RIJNDAEL(e key)[4 * i + 3]; rco tab[i]; RIJHDAEL(e key)[4 RIJNDAEL(e key)[4 RI7ЮАЕЬ(е key)[4 RIJNDAEL(e key)[4 «ii4] *ii5] =t; * i + 6] = t; * i + 7] = t; redefine loopá(i) { t = rotr(t, 8); t = t ""= =RIJNDAEL(e key) t "= RIJNDAEL(e key) t ""= =RIJNDAEL(e key) t "= RIJNDAEL(e key) t "= RIJNDAEL(e key) t ""= =RIJNDAEL(e key) = ls box (t) [8 *1]; [8*i+1]; [8 * i + 2]; [8*i+3]; [8«ii4] ii12] =t; [8 * i + 5]; [8 * i + 6]; [8 * i + 7]; + 8] = t; + 9] = t; i + 10] = t; i + 11] = t; i> 3] i ~ 14] ~ + 15) = t; void RIJNDAEL(set key(const ulbyte in key[], const u4byte key lеп, const enum dir flag f)) { u4byte i, t,u,ч,w; if(!tab gen) gen tabs(); воде = f; RIJNDAEL(k len) = (key len + 31) / 32; RI JNDAEL (e key) [0] = u4byte in(in key gdefine loop8(i) { t = rotr(t, 8); t "= RIJNDAEL(e key) t ""= =RIJNDAEL(e key) t "= RIJNDAEL(е key) t "= RIJNDAEL(e key) = RIJNDAEL(e key) RIJNDAEL(e Кеу) [8 ~ t "= RIJNDXEL(e key) t "= RIJNDAEL(e key) t ""= =RIJNDAEL(e key) ls box(t) [6+ i] [б * i ~ 1]; [6 « i & t; [6*1+ 3]; [б * i + 4]; [6*i&gt rco tab[i]; RIJHDAEL(e key)[6 * i + 6] = t; RIJNDAEL(e key)[6 * i + 7] = t; RIJNDAEL(e key)[б * i + 8] = t; RIJNDAEL(e key)[б * i + 9] = t; RIJNDAEL(e key)[6 * i + 10] = t; RIJNDAEL(e key)[б * i + 11] = t; " rco tab[i]; RIJNDXEL(e key)[8 * ИЮРАЕЬ(е key)[8 * RIJNDAEL(e key)[8 * RIJNDAEL(e key)[8 * " ls box(t); RIJNDAEL(e key)[8 * ИЛЕ)АЕЬ(е Ееу)[8 * RIJNDAEL(e key)[8 * 
329 Il peAoxaoия RIJNDAEL(e key) [1] = u4byte in(in key + 4); RI JNDAEL (e key) [2] = u4byte in(in key + 8); RIJNDAEL(e key) [3] = u4byte in(inkåó + 12); 4if (О) ( u4byte *kl, *k2, *km, *rcp; if (RIJNDAEL(k len) & t; ( RI JNDAEL(e key) [4] = u4byte in(in key + 16); RIJNDAEL(e key) [5] = u4byte in(in key & t; 2 if (RI JNDAEL(k len) & t; ( RIJNDAEL(e key) [б] = u4byte in(in key + 24); RI JNDAEL (e key) [7] = u4byte in(in key + 28); rcp = rco tab; kl = RIJNDAEL(e key); k2 = kl + RIJNDAEL(k len); km = kl + 5 * RIJNDAEL(k len) ~ 24; t = *(k2 — 1); switch (RI JNDAEL (k len) ) ( сазе 4: while(k2 & t; ( 8)) " *гср»; t„' t„' t„' t„' t = ls box(rotr(t, t ""= =*Xl»; *k2» = t "= *11»; *k2++ = t ""= =*kl»; *k2» = t "= *)с1» *)с2» = } break; сазе б: while(k2 & t; ( t = ls box(rotr(t, t "= *%1»; *k2» = t "= *)с1»; *12++ = t ""= =*kl»; *k2» =. t "= *kl»; *k2++ = t "= *)(1»; *12» = t "= *)с1»; *)с2» = ) break; саяе 8: while(k2 & t; ( 8)) " *гср»; t„' t„' t„' t„' ) break; felse switch(RIJNDAEL(k len)) ( t = ls box( л *glq~„ t -= *11»'; л *ц++, t "= *kl~i; t = ls box( *%1++ t ""= =-*kl»; t "= *kl++; t ""-= -*kl»; rotr(t, *k2» = *)с2» = *k2+~ = *k2» = ~); *k2» = *k2» = *)с2» = *k2++ = 8)) " *rcp&lt t„' t„' t„' t„' t„' t„' 
330 Криптографические METoAbl защиты инфориации в компьютерных cHcTENIAx и сыа сазе 4: t = RIJNDAEL(e key) [3]; for(i = О; i & t; 0; + loop4(i); break; сазе 6: RIJNDAEL(e key)[4] u4byte in(in key t 16); t = RIJNDAEL(e key)[5] = u45yte in(in key + 20); for(i = О; i & t; 8; t' 1оорб(1); break; сазе 8: RIJNDAEL(e key)[4] = u4byte in(in key + 16); RIJNDAEL(e key)[5] = u4byte in(in key + 20); RIJNDAEL(e key)[б] = u4byte in(in key + 24); t = RIJNDAEL(e key)[7] = u45yte in(in key + 28); for(i = О; i & t; 7; i loop8(i); break; 4endif if(mode != enc) ( for(i = 4; i & t * RIJNDAE (k l n + 4; 4 ( imix col(RIJNDAEL(d key) [i], RIJNDAEL(e key) [i]); return; // encrypt à block of text redefine f nround(bo, bi, k) f гв(Бо, bi, О, k); f rn(bo, bi, 1, k); f rn(Ъо, bi, 2, k) f rn(bo, bi, 3, k); k&gt redefine f lround(bo, bi, k) f rl(Bo, bi, О, k); f rl (bo, bi, 1, k); f rl (bo, bi, 2, k); f rl(bo, bi, 3, k) void RIJNDAEL(encrypt(const ulbyte in blk[16], ulbyte out blk[16]) ) ( u4byte ЪО[4], bi[4], *kp; b0[0] = u4byte in(in blk ) " RIJNDAEL(e key)[0]; ЪО[1] = u4byte in(in blk + 4) " RIJNDAEL(e key)[1]; ЪО[2] = u4byte in(in blk i 8) " RIJNDAEL(e Key) [2]; ЪО[3] = u4byte in(in~1k + 12) " RIJNDAEL(e key) [3]; kp = RIJNDAEL(e key) + 4; if (RIJNDAEL(k len) & t; ( f nround (bl, ЪО, kp); f nround (b0, bl, kp); ) if (RI JNDAEL(k len) & t; RIJNDAEL(d key) [О] = RIJNDAEL(e key) [О]; RIJNDAEL(d key) [1] = В? JNDAEL(e key) [1]; В?ЪОАЕЬ(б key) [2] = RIJNDAEL(e key) [2]; RIJNDAEL(d key) [3] = RI JNDAEL(e key) [3]; 
Приложения ( f nround(bl, ЪО, kp); f nround(b0, bl, kp); ) f nround(bl, ЪО, kp) f nround(bl, ЪО, kp); f nround(bl, ЪО, kp) f nround(bl, ЪО, kp) f nround(bl, ЪО, kp) ЪО[0]); u4byte out(out blk t 4, ЪО[1]); 8, ЪО[2]); u4byte out(out blk t 12, b0[3]); u4byte out(out blk, u4byte out(outblk t decrypt à block of text «'~fine i nround(bo, bi, k) i rn(5o, bi, О, k); i rn(bo, bi, 1, k); i rn(bo, bi, 2, k); i rn(bo, bi, 3, k); k--4 redefine i lround(bo, bi, k) i rl(5o, bi, О, k); i rl (bo, bi, 1, k); i rl (bo, bi, 2, k); i rl (bo, bi, 3, k) void RIJNDAEL(decrypt(const ulbyte in blk[16], ulbyte out blk[16]) ) ( u4byte ЪО[4], Ъ1[4], *kp; b0[0] = u4byte in(in blk ) " RIJNDAEL(e key) [4 * RIJNDAEL(k len) ЬО[1] = u4byte in(in blk + 4) " RIJNDAEL(e key) [4 ' RIJNDAEL(k len) ЪО[2] = u4byte in(in blk + 8) " RIJNDAEL(e key) [4 * RIJNDAEL(k len) ЪО[3] = u4byte in(inblk + 12) " RIJNDAEL(e key) [4 * RIJNDAEL(k len) kp = RIJNDAEL(d key) 1 4 * (RIJNDAEL(k len) + 5); if (RIJNDAEL(k len) & t; ( i nround(bl, ЪО, kp); i nround(b0, bl, kp); ) if (RIJNDAEL(k len) & t; ( i nround(bl, ЪО, kp) i nround(ЪО, bl, kp) ) ЪО, kp) i nround(ЪО, bl, kp) ЪО, kp) i nround(ЪО, bl, kp) ЪО, kp) i nround(ЪО, bl, kp) ЪО, kp); i nround(bO, bl, kp); ЪО, kp); i 1гоим3(ЪО, bl, kp); u4byte out(out blk, b0[0]); u4byte out(out blk + 4, ЪО[1]); u4byte out(outblk + 8, ЪО[2]); u4byte out(outblk 1 12, ЪО[3]); serpent.h Copyright in this code is held Ъу Dr В. R. Gladman but free direct or derivative use is permitted subject to acknowledgement of its origin Dr В. R. Gladman (brian.gladman3btinternet.corn) 25th January 2000. f i fde f cplusplus def ine SERPENT (x) serpent: Нх // // // i nround(bl, i nround(bl, i nround(bl i nround(bl, i nround(bl, f nround(bO, f nround(bO, f nround(bO, f nround(bO, f lround(bO, bl, kp); Ъ1', kp); Ъ1' ,kp); Ъ1, kp); bl, kp); + 24]; + 25]; + 26]; + 27]; 
Криптографические мноды защиты информации в KoMllbloTEpHblx системах и cH$lx class serpent : public AES ( private: u4byte 1 key[140]; public: ¹else define SERPENT(x) serpent ¹¹x STATIC u4byte SERPENT(1 key[140]); ¹endif char* чоЫ f))i void void SERPENT(encrypt(const ulbyte in blk[], ulbyte out blk[])); SERPENT(decrypt(const ulbyte in~1k[], ulbyte out blk[])); ¹ifdef cplusplus )i ¹endif // serpent.c // Copyright in this code is held Ъу Dr В.R. Gladman but free direct or // derivative use is permitted subject to acknowledgement of its origin // and subject to any constraints placed on the use of the algorithm by // its designers (if such constraints may exist, this will be indicated // below). // // Dr. В. R. Gladman (brian.gladman3btinternet.corn). 25th January 2000. // // This is an implementation of Serpent, an encryption algorithm designed // by Anderson, Biham and Knudsen and submitted as à candidate for the // Advanced Encryption Standard programme of the US National Institute of // Standards and Technology. // // The designers of Serpent have not placed any constraints on the use of // this algorithm. ¹include "aes defs.h" ¹include "serpent.h" // Partially optimised Serpent S Box boolean functions derived // using à recursive descent analyser but without à full search // of all subtrees. This set of S boxes is the result of work // Ъу Sam Simpson and Brian Gladman using the spare time on a // cluster of high capacity servers to search for S boxes with // this customised search engine. // // Copyright: Dr В. R Gladman (gladmanPseven77.demon.co.uk) // and Sam Simpson (s.simpsongmia.ño.uk) // 17th December 1998 // // We hereby give permission for information in this file to be // used freely subject only to acknowledgement of its origin // 15 terms ¹define sb0(a,Ъ,с,d,е,f,g,h) ( tl à " d; t2 à & mp t3 = с " tl; t6=b& mp; t4=Ъ" t3; ~10 = -t3g h = t2 " t4; SERPENT(name(void)); SERPENT(set key(const ulbyte key[], const u4byte key len, const enum dir flag 
Приложения ° ° ° ° е ° ° ° ° ° ве ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° âå ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° âåå ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° t7=a" t6; t14 = -t7; 18=с I t7; tll = ~ 3 * t7; g t4 " t8; tl2 = h & mp; f = ~10 " ~12; е = t12 " t14; 15 terms redefine ib0 (a, Ъ, с, d, е, f, g, h) tl = -а; t2 = а " Ъ; t3=11 I 12; t4=d" t3; t7 = d & mp; t5 = с " t4; ~8 = ~1 " t7; g = t2 " t5; tll = а & mp; t9 = g & mp; 114=15" 18; f t4 "t9; ~12=~5 I йр h = tll ~12; e=h" t14; 14 terms! redefine sbl (a,b, c,d, å, f, g, h) tl = -а; 12=Ъ" 11; t3=a ~ t2; ~4 = с1 I ~2; t5 = c " t3; g = d " t5; t7 = Ъ " t4; t8 = t2 " g; t9 = t5 & mp; h = t8 " ~9; tll = t5 " t7; f =h" "tll; ~13 = 18 & mp; е = t5 " t13; 17 terms gdefюе ibl(а,b,с,d,е,f,g,h) tl à " d; t2 = а & mp t3 = Ъ " c; t4 = à " t3; t5=b I ф t7=c I tl; h=t4 "t5; ~8 = b " t7; ~11 = -~2; t9 t4 & mp; f tl " t9; t13 = ~9 " t11; t12=h & mp g = t12 " tl3; Г15 = а & m t16 = c " t13; е = t15 " t16; 
334 16 terms redefine sb2 (а, Ъ, с,d, е, f, g, h) // 16 terms redefine ib2(a,Ú,с,d,е, f,g,h) // 17 terms redefine sb3(a,Ъ,с,d,е, f,g,h) 16 term solution that performs less well than 17 term one in my environment (PPro/PII) Oif(0) tl = -а; ~2 = Ъ " d; t3-=с& mp t13 = d ~ tl e = t2 " t3; t5 = с " 11; t6=c" е; t7=b& mp; t10 = е ~ t5; h = 1 5 " t7; t9=d ~ t7; ~11 = 19 & mp; 114 = 12 " Ь; g = à " tll; t15 = g " t13 f t14 " t15; л ~ ° t2 = -tl; t3 = a " с; ~4 = с " 11; t7 = а ~ t2; t5 = Ъ & mp; t8 = d " t7; tll = -t4ð e = t3 " t5; 19= 13 ) t8; t14 = d & mp; h=tl "19; t12 = е f = tll " t12 t15 = ~3 " ~12; g = t14 " 115; tl = а " c; t2 = d " 11; t3 = a & mp; t4 = d " t3; t5 = Ъ & mp; g = t2 " t5; t7 = а ~ g; t8 = b I d; ~11=à I бр t9= t4 & mp; f =~8 "t9; t12 = Ь " tll; t13 = g " t9; t15=13" 18; h = t12 " t13р t16=с & mp; е = t12 " t16; Криптографические методы защиты информации в компьютарнык системах и слтиМ 
redefine sb3(a,Ъ,с,d,е, f,g,h) ( ~1 = à " b; t2 = a & mp t3 = а ~ d; t4 c " d; t5 = tl & mp; 16=12 I t5; g=t4" t6; 18=Ъ" t3; 19=16" t8; tlo=t4 & mp; е = tl " t10; t12 = g & mp f = t9 " t12; ~14=Ъ I ф t15 = t4 " t12; h = t14 " t15; 4endif // 17 terms redefine ib3(a,Ъ,с,d,е,f,g,h) ( tl=Ъ" с; t2 = Ъ I c; t3 = a " с; t7 а " d; t4 = t2 " t3; t5 = d I t4; t9 = t2 " t7; е = tl " t5; 18=11 I t5; tll = à & mp; g = t8 " t9; t12 = e ~ t9; f = tll " 112; t14 = а & mp t15 = t2 " t14; t16 е & mp; h = t4 " t16; // 15 terms redefine sb4(a,Ъ,с,d,е,f,g,h) ( tl à " d; t2 = d & mp; t3 = с " t2; ~4 = Ъ I t3; h = tl " t4; t6 = -Ъ; 17=11116; е = t3 t7; t9 = a & mp t10 = tl ~6; 111 = 14 & mp; g = t9 " tll; t13 = а " t3; t14 = t10 & mp f = t13 " t14; // 17 terms redefine ib4(a,Ъ,с,d,е,f,g,h) ( tl = с d; t2 = с ) d; 
KPHITTOEPAIf)HVECKHE METOAbl 3AQHTbl HH~MAQHH 8 KOMnLIOTEPHblX CHCTEMAX H CElAX t3 = Ъ " t2; t4 = a & mp; f = tl " ~4; ~6=а "d; t7 = b I d; t8 = t6 & mp; Ь = t3 " ~8; t10 = -а; tll = с " h; t12 = t10 I tll; е = t3 " t12; t14=с I t4; t15 = t7 " ~14; 116= Ь I tlo; g=t15" t16; 16 terms 4def ine sb5 (a, Ъ, с, d, е, f, g, h) tl = -а; t2 = a " b; t3 а " d; ~4 = с " 11; t5 = 12 I t3; е = t4 " t5; t7 d & mp t8 = t2 " e; t10 = tl ~ e; f = t7 " t8; tll = t2 I t7; ~12 = t3 " ~10; 114 =Ъ" t7; g = tll " t12; t15 = f & mp; h = t14 " t15; 16 terms redefine ib5(a,Ъ,с,d,е,f,g,h) tl = -c; t2 = b & mp; t3 = d " t2; t4 = а & mp; t5=Ъ" 11; h=t4 "t5; t7=b ~?]; 18=а& mp; f =t3" t8; t10 = à I d; tll = tl " t7р е = t10 " tll; t13 = а " c; ~14=Ъ & mp; t15 = ~4 I t13; g=t14" t15; 15 terms redefine sb6 (a, Ъ, с, d, е, f, g, h) tl = -а; t2 à " d; t3 = Ъ " t2; t4=tl I t2; t5 = c " t4; f Ú" t5; t13 = -~5; 
Приложения ~7=~2 I Й; ~8=с1" t7; 1:9=156 18; g=t3" t9; tll = t5 " t8; е = g * tll; t14 = t3 & mp; h = t13 " t14 // 15 terms tl = -а; t2 = à " b; t3 = с " t2; 14=с I ~1; t5 d t4; t13 = d & mp; f t3 " t5; t7 = t3 & mp; о2 * t7; ~9=Ь I ~8; h=t5" t9; t11=b I h; е = t8 * t11; t14 = t3 * tll; g = t13 " t14; // 17 terms redefine sb7(a,b,c,d,å, f,g,h) tl = -c t2 = b " c; t3 = b ) tl; t4 d t3; t5 = а & mp; t7 = а * d; h = t2 " t5; ~8 = Ь " ~5; ~9=121~8; tll = d & mp; f = t7 " t9; t12 = t5 " f; t15 = tl ) t4; t13 = h 6 t12; g = tll " t13; t16 = t12 " g; е = t15 * t16; // 17 terms redefine ib7(a,b,с,d,е,f,g,h) tl=а&am t2 = а ~ b; t3 = с ) tl; t4 = d 6 t2; h = t3 " t4; t6 = -d; t7 = b " t4; t8=h*t6; tll = с " t7; ~9 = ~7 I ~8; f à" t9; ~12=d I Й; e=tll "t12; t14 = à 6 h; redefine ib6(a,b,c,d,е, f,g,h) 
t15=t3" f; t16 = е " t14; g = t15 " t16; gdef ine k xor (r, а, b, с, d) ( а "= SERPENT(1 key)[4 Ъ "= SERPENT(l key)[4 с "= SERPENT(l key)[4 d "= SERPENT(l key)[4 *т+ 8]; *ri 9]; * r + 10]; *ri11]; 4бе2ine k set(r,à,b,с,d) ( а = SERPENT(1 key) [4 Ъ = SERPENT(1 key)[4 с = SERPENT(l key)[4 d = SERPENT(1 key)[4 ) *r+ 8]; *rJ 9]; *r ~10]; r j 11]; redefine k get(r,а,Ъ,c,d) ( SERPEHT (1 key) [4 ' r t 8] = а; SERPENT(l key) [4 * r + 9] = b; SERPENT(l key) [4 * r t 10] = c; SERPENT(1 key) [4 * r t 11] = d; // the linear transformation and its inverse с,d) 13); 3); « 3); 7); 1); « 7); 5); 22); redefine irot(а,Ъ,с,d) ( с = rotr(c, 22); а = rotr(a, 5); c"=d" (Ъ«7); Ъ ~ & d = rotr(d, 7); b = rotr(b, 1); d "= с " (а « 3); b "= а " c; с = rotr(с, 3); а = rotr(a, 13); char* SERPENT(name(void)) ( return "serpent"; // initialise the key schedule from the user supplied key void SERPENT(set key(const ulbyte in key[], const u4byte key len, const enum dir flag ~1)) ( u4byte i,lk,à,b,с,d,å,f,g,h; u4byte tl,t2,t3,t4,t5,t6,t7,t8,t9,t10,tll,t12,t13,t14,t15,t16; if(key len & t; 2 return; redefine rot(а,Ъ, ( а = roti (a, с = roti(c, d"=c" (а b "= а " c; d = roti (dр b = roti(b, Д ° c"=d" (Ъ а = roti(a, с = roti(c, Криптографические мноды защиты информации в компьютерных системах и санх 
Приложения i = 0; lk = (key len + 31) / 32; while (i & t; ( SERPENT(l key) [i] = u4byte in(in key t 4 * i); i&gt if(key len & t; 2 ( while (i & t; SERPENT(l key) [1++] = 0; i = key len / 32; lk = 1 &l ;&l ; k y len SERPENT(1 key)[i] = SERPENT(l key) ',i] & mp; (lk †) ~ ) for(i =0; i <1 2; i+ ( SERPENT(1 key) [i t 8] = rotr(i " SERPENT(l key) [i] t2, 21); tl "= SERPENT(l key) [i + 2] " SERPENT(1 key) [i + 8]; SERPENT(1 key) [i + 9] = rotr((i + 1) " SERPENT(1 key) [i + 1] " tl, 21); t2 "= SERPENT (l key) [i + 3] " SERPENT (l key) [i + 9]; ) k set( О,а,b,c,d);sb3(a,b,c,d,е,f,g,h);k get( О,е,f,g,h); k set( l,а,b,с,d);sb2(a,b,с,d,е,f,g,h);k get( l,е,f,g,h); k set( 2,а,b,с,d);sbl(a,b,c,d,е,f,g,h);k get( 2,е,f,g,h); k set( З,а,b,c,d);sb0(a,b,c,d,å, f,g,h);k get( З,е, f,g,h); k set( 4,а,b,c,d);sb7(a,b,ñ,d,е,f,g,h);k get( 4,е,f,g,h); k set( 5,а,b,с,d);sbá(a,b,c,d,å,f,g,h);k get( 5,е,f,g,h); k set( б,а,b,с,d);sb5(a,b,c,d,е,f,g,h);k get( 6,е,f,g,h); k set( 7,а,b,c,d);sb4(a,b,с,d,å,f,g,h);k get( 7,е,f,g,h); k set( 8,а,b,c,d);sb3(a,b,c,d,е,f,g,h);k get( 8,е,f,g,h); k set( 9,а,b,c,d);sb2(a,b,c,d,е,f,g,h);k get( 9,е,f,g,h); k set (10, а,b, c, d); sbl (a,b, c,d, е, f, g,h); k get (10,е, f, g, h); k set(11,а,b,с,d);sb0(а,b,с,d,е,f,g,h);k get(11,е,f,g,h); k set(12,а,b,ñ,d);sb7(a,b,c,d,е, f,g,h);k get(12,å, f,g,h); k set(13,а,b,с,d);sbá(a,b,c,d,å, f,g,h);k get(13,е, f,g,h); k set(14,а,b,с,d);sb5(a,b,c,d,е, f,g,h);k get(14,е, f,g,h); k set(15,a,b,c,d);sb4(a,b,c,d,е, f,g,h);k get(15,е, f,g,h); k set(lá,а,b,c,d);sb3(a,b,c,d,å,f,g,h);k get(lá,е, f,g,h); k set(17,а,b,с,d);sb2(a,b,с,d,е, f,g,h);k get(17,е, f,g,h); k set(18,à,b,с,d) яЬ1(а,b,с,d,е, f,g,h) 1 get(18,е, f,g,h) k set(19,а,b,с,d);sb0(a,b,c,d,е, f,g,h);k get(19,е, f,g,h); k set(20,а,b,с,d);sb7(a,b,c,d,е, f,g,h);k get(20,е, f,g,h); k set(21,а,b,c,d);sbá(a,b,c,d,е, f,g,h);k get(21,е, f,g,h); k set(22,а,b,c,d);sb5(a,b,c,d,е, f,g,h);k get(22,е, f,g,h); k set(23,а,b,с,d);sb4(a,b,c,d,å, f,g,h);k get(23,е, f,g,h); k set(24,à,b,c,d) sb3(а,b,с,d,е, f,g,h) k get(24,е, f,g,h) k set(25,а,b,c,d);sb2(a,b,c,d,е, f,g,h);k get(25,е, f,g,h); k set(26,а,b,c,d);sbl(а,b,c,d,å, f,g,h);k get(26,е, f,g,h); k set (27, à,b, с, d); sb0 (a,b, с,d, е, f,g,h);k get (27, е, f, g,h); k set (28, à,b, с,d); sb7 (a,b, c,d,е, f,g,h);k get (28, å, f, g,h); k set (29, а,b, c, d); sbá (a,b, c,d, е, f, g, h); k get (29, е, f, g,h); k set(30,а,b,c,d);sb5(a,b,c,d,е, f,g,h);k get(30,е, f,g,h); k set(31,à,b,с,d) яЬ4(а,b,c,d,е,f,g,h) 1 get(31,е,f,g,h) k set(32,а,b,c,d);sb3(à,b,c,d,е, f,g,h);k get(32,е, f,g,h); return; tl = SERPENT (1 key) [2] " SERPENT (1 key) [4] " SERPENT (1 key) [6] " Ox9e3779b9; t2 = SERPENT (l key) [3] " SERPENT(1 key) [5] * SERPENT (l key) [7] " Ох9е3779Ъ9; 
Криптографические мноды защиты информации в компьютерных системах и соах encrypt à block of text void SERPENT(encrypt(const ulbyte in blk[16], ulbyte out blk[16])) ( u4byte а,Ъ,с,d,е,f,g,h; u4byte tl,t2,t3,t4,t5,tá,t7,t8,t9,t10,tll,t12,t13,t14,t15,tlá; а = u4byte in(in blk ); Ъ = u4byte in(in blk + 4); с = u4byte in(in blk + 8); d = u4byte in(in blk + 12); u4byte out (out blk, а); u4byte out (out blk & t; 4, u4byte out(out blk + 8, с); МЪу~е out(out blk + 12, d); decrypt à block of text void SERPENT(decrypt(const ulbyte in blk[163 ulbyte out blk[163)) ( u4byte а,Ъ,с,d,е,f,g,h; u4byte tl,t2,t3,t4,е.5,tá,е.7,t8,t9,е.10,tll,t12,t13,t14,t15,tlá; а = u4byte in (in blk ); Ъ = u4byte in (in blk + 4) р c = u4byte in(in blk +; d = u4byte in(in blk + 12) р d); ib7(a,Ъ,с,d,е, f,g, ibá(e,f,g,h,а,b,c,d); ib5(a,Ú,с,d,е,f,g,h); ib2(e,f,g,h,а,Ъ,c,d); ibl(a,Ъ,с,d,е,f,g,h); ib7(а,Ъ,с,d,e,f,g,h); ibá(e,f,g,h,а,Ъ,c,d); g,h); h); k xor(31,е, f, k хог~30,а,Ъ,c,d) k xor(29,е, f,g,h) k xor(28,а,Ъ,c,d) k xor(27,е,f,g,h) k xor(26,а,Ъ,c,d) k xor(25,е,f,g,h) k xor(24,à,b,с,d) k xor(23,е,f,g,h) k xor(22,а,Ъ,c,d) k xor(21,е, f,g,h) k xor(20,а,b,c,d) k xor(19,е, f,g,h) k xor(32,а,Ъ,с, irot(e, f,g,h); irot(a,Ъ,c,d); irot(е, f,g,h); irot (а, Ъ, c,d); irot(e, f,g,h); irot (а, Ъ, c,d); irot(е, f,g,h); irot (а, Ъ, c, d); irot(e, f,g,h); irot (а, Ъ, c,d) irot(e,f,g,h); irot(а,Ъ,c,d) k xor ( О, а, Ъ, с, d); sb0 (a, Ъ, с, d, е, f, g, h); k xor( l,е,f,g,h); sbl(e,f,g,h,а,Ъ,с,d); k xor( 2,а,Ъ,c,d); sb2(a,Ъ,с,d,е, f,g,h); k xor 3, е, f, g,h); sb3 (e, f, g,h,а, Ъ, c,d); k xor 4,а,Ъ,c,d); sb4(a,Ъ,с,d,е,f,g,h); k xor( 5,е, f,g,h); sb5(e, f,g,h,а,Ъ,c,d); k xor б,а,Ъ,с,d); sbá(a,Ъ,с,d,е,f,g,h); k xor 7,е,f,g,h); sb7(e,f,g,h,а,Ъ,c,d); k xor( 8,а,Ъ,с,d); sb0(a,Ъ,с,d,е,f,g,h); k xor( 9,е, f,g,h); sbl(е, f,g,h,а,Ъ,с,d); k xor(10,а,Ъ,c,d); sb2(а,Ъ,c,d,е, f,g,h); k xor(ll,е,f,g,h); sb3(e,f,g,h,а,b,c,d); k xor(12,а,Ъ,c,d); sb4(а,Ъ,c,d,е,f,g,h); k xor(13,е,f,g,h); sb5(e,f,g,h,а,Ъ,с,d); k xor(14,а,Ъ,с,d); sbá(a,Ъ,с,d,е,f,g,h); k xor(15,е,f,g,h); sb7(e,f,g,h,а,Ъ,c,d); k xor(lá,а,Ъ,с,d); sb0(a,Ъ,с,d,е,f,g,h); k xor(17,å, f,g,h); зЪ1(е, f,g,h,а,Ъ,c,d); k xor(18,а,Ъ,c,d); sb2(a,Ъ,с,d,е, f,g,h); k xor(19,е, f,g,h); sb3(e, f,g,h,а,Ъ,с,d); k xor(20,а,Ъ,c,d); sb4(a,Ъ,с,d,е,f,g,h); k xor (21,е, f, g,h); sb5 (e, f,g,h, а,b, с,d); k xor(22,а,Ъ,с,d); sbá(a,Ъ,с,d,е, f,g,h); k xor(23,е,f,g,h); sb7(e,f,g,h,а,Ъ,c,d); k xor(24,à,Ъ,c,d); sb0(a,Ъ,с,d,е, f,g,h); k xor(25,е, f,g,h); sbl(e, f,g,h,а,b,c,d); k xor(26,а,Ъ,c,d); sb2(a,Ь,с,d,е, f,g,h); k xor (27, е, f, g, h); sb3 (e, f, g,h, а, Ъ, c, d); k xor(28,а,Ъ,с,d); sb4(a,Ъ,с,d,е, f,g,h); k xor(29,е, f,g,h); sb5(e, f,g,h,а,Ъ,c,d); k xor(30,а,Ъ,c,d); sbá(a,Ъ,с,d,е, f,g,h); k xor(31,е,f,g,h); sb7(e,f,g,h,а,Ъ,c,d); rot(е, f,g,h) rot(a,Ъ,c,d) rot(е, f,g,h) rot (a,Ъ,c,d) rot(е, f,g,h) rot(а,Ъ, с,d) rot(e, f,g,h) rot(a,Ъ,c,d) rot(e, f,g,h) rot (а, Ъ, c,d) rot(е, f,g,h) rot(a,Ъ,c,d) rot(е, f,g,h) rot (а, Ъ, с,d) rot(е, f,g,h) rot (а, Ъ, c,d) rot(e, f,g,h) rot (а, Ъ, с, d) rot(e, f,g,h) rot(a, Ъ,c,d) rot(e, f,g,h) rot (а, b, c,d) rot(e,f,g,h) rot (a, Ъ, c,d) rot(е, f,g,h) rot (а, Ъ, c,d) rot(е, f,g,h) rot(a,Ъ,c,d) rot(e, f,g,h) rot(a,Ъ,c,d) rot(е, f,g,h) k xor(32,a,Ъ 
u4byte out(out blk, а); u4byte out(out blk + 4, Ъ); u4byte out(outblk + 8, c); u4byte out(out blk + 12, d); // twofish.h // Copyright in this code is held Ъу Dr В. R. Gladman but free direct or // derivative use is permitted subject to acknowledgement of its origin // Dr В. R. Gladman (brian.gladman3btinternet.corn). 25th January 2000. ¹ifdef cplusplus define TWOFISH(x) twofish::¹¹x class twofish : public AES ( private: u4byte k len; u4byte 1 key[40]; u4byte s key[4]; public: ¹else define TWOFISH(х) twofish №№х STATIC u4byte TWOFISH(k len); STATIC u4byte TWOFISH(1 key)[40]; STATIC u4byte TWOFISH(s key)[4]; ¹endif TWOFISH(name(void))р TWOFISH(set key(const ulbyte key[], const u4byte key len, const enum dir flag char* void f)) i void void TWOFISH(encrypt(const ulbyte in blk[], ulbyte out blk[])); TWOFISH(decrypt(const ulbyte in blk[], ulbyte out~1k[])); ¹ifdef cplusplus )i ¹endif // twofish.c // Copyright in this code is held Ъу Dr В.R. Gladman but free direct or // derivative use is permitted subject to acknowledgement of its origin // and subject to any constraints placed on the use of the algorithm Ъу // its designers (if such constraints may exist, this will Ъе indicat;ed // below). irot(е, f,g,h); irot(a,Ъ,c,d); irot(e,f,g,h); irot(a,Ъ,c,d); irot(e, f,g,h); irot(а,Ъ,с,d); irot(е, f,g,h); irot (a, Ъ, c,d); irot (е, f,g,h); irot (а, Ъ, c,d); irot(e, f,g,h); irot (а, Ъ, с,d); irot(е, f,g,h); irot (а, Ъ, с,d); irot(е, f,g,h); irot (a, Ъ, c, d); irot(е, f,g,h); irot (a,Ъ,c,d); irot(е, f,g,h); ib2 (e, f, g,h, а, Ъ, c, d); ib1(a,Ъ,с,d,е, f,g,h); ib7(a,Ъ,с,d,е, f,g,h); ib6(e, f,g,h,а,Ъ,c,d); ib5(a,Ú,с,d,е, f,g,h); ib4(e, f,g,h,а,Ъ,c,d); ib3(a,Ъ,c,d,е, f,g,h); ib2 (е, f,g,h,а,Ъ,c,d); ib1(a,Ъ,с,d,е, f,g,h); ib0(е, f,g,h,à,b,с,d); ib7(a,Ъ,c,d,е, f,g,h); ib6(e, f,g,h,а,Ъ,c,d); ib5(a,Ъ,с,d,е, f,g,h); ib4(e, f,g,h,а,Ъ,c,d); ib3(a,Ъ,с,d,е, f,g,h); ib2(e, f,g,h,а,Ъ,c,d); ib1(a,Ъ,с,d,е, f,g,h); ib0(e, f,g,h,а,Ъ,с,d); k xor(18,à,b,с,d); k xor(17,е,f,g,h); k xor(16,а,b,с,d); k xor(15,е,f,g,h); k xor(14,а,Ъ,с,d); k xor (13, е, f, g,h); k xor(12,à,о,с,d); k xor(11,е, f,g,h); k xor(10,а,Ъ,c,d); k xor( 9,е, f,g,h); k xor( 8,à,b,c,d); k xor( 7,е,f,g,h); k xor( б,а,b,c,d); k xor( 5,е,f,g,h); k xor( 4,а,b,c,d); k xor( З,е,f,g,h); k xor( 2,а,Ъ,c,d); k xor( 1,е,f,g,h); k xor( О,а,Ъ,c,d); 
)42 Криптографические методы защиты информации в компьютерных системах и снях // // Dr. В. R. Gladman (brian.gladman3btinternet.corn). 25th January 2000. // // This is an implementation of Twofish, an encryption algorithm designed // Ъу Bruce Schneier and colleagues and submitted as à candidate for the // Advanced Encryption Standard programme of the US National Institute of // Standards and Technology. // // The designers of Twofish have not placed any constraints on the use of // this algorithm. «include "aes defs.h" «include "twogish.h" «ifdef cplusplus namespace ( «endif «define М TABLE «define MK TABLE «define Q TABLE «define OHE STEP «if defined(Q TABLE) &a p;& !de ined(M «егтог Q TABLE requires MK TABLE «endif // Extract byte from а 32 bit quantity (little endian notation) «берже byte(х,n) ((ulbyte)((х) » (8 * (n)))) // finite field arithmetic for GF(2**8) with the modular // polynomial х" 8 + х" б + х" 5 + х" 3 + 1 (Ох169) «def ine G М Ох0169 GÌ»2, GM»1, (GM»1)" (GÌ»2) ); (CN»1) (GN»2$, GN»1;CN»2); STATIC ulbyte tab 5Ъ[4] = ( О, STATIC ulbyte tab ef[4] = ( О, «def ine f fm 01 (x) (х) ИеГюе 2йп 5Ъ (х) ( (х) " ( (х) » 2) " tab 5Ъ [ (х) & mp fdefine ffm ef(x) ((х) " ((х)» 1) " ((х) » 2) " tab ef((х) 6 3)) ( Ох75,0xf3,0хсб,Oxf4,0xdb,Ох7Ъ,Oxfb,Охс8,0x4a,ОхбЗ,Охеб,ОхбЪ,Ох45,0x7d,Oxe8,0x4b, Oxdá, Îõ32, Oxd8, Oxfd, Ох37, Ох71, Ox f1, Oxel, Ox30, ОхОЙ, Oxf 8, Oxlb, Ох87, Oxf a, Ox06, OxÇ f, Ох5е,ОхЪа,Охае,Ох5Ъ,Ох8а,Ox00,0xbc,Ox9d,Oxád,Охс1,0xb1,0õOå,Ox80,0x5d,Oxd2,0xd5, Oxa0,~0~84,0х07,0x14,0xb5,0x90,0x2c,Oxa3,0хЪ2,0х73,0x4c,Oõ54,0x92,0õ74,0õ36,0x51, Ox38,0xbO,Oxbd,Ох5а,Oxfc,ОхбО,Охб2,0x96,0xác,Ох42,0МГ7,0x10,0x7c,Oõ28,0х27,0х8с, Ox13,0x95,0x9c,Охс7,0x24,0x46,0xÇb,Ox70,0xca,ОхеЗ,Ох85,0xcb,Ох11,0xdO,Oõ93,0xb8, Охаб,Ox83,0x20,0xff,Ox9f,Ох77,0xc3,0хсс,Ox03,0хбй,Ox08,0xbf,Ox40,0xe7,0x2b,Охе2, STATIC ulbyte qt[2][256] = ( ( Оха9,0x67,0xb3,0хе8,0x04,0xfd,Oxa3,0x76,0x9a,Ох92,0х80,0x78,0xe4,0xdd,Oxd1,0х38, OxOd,Oõñ6,0x35,0x98,0x18,0хй7,0xec,Охбс,Ox43,0х75,0x37,0õ26,0xfa,Ox13,0õ94,0x48, Oxf2,0xdO,Ох8Ъ,Ox30,0x84,0x54,0xdf,Ox23,0x19,0х5Ъ,OxÇd,Ox59,0xf3,0хае,Оха2,0x82, Oxá3,0x01,0x83,0x2e,Oxd9,0x51,0x9b,Ох7с,Охаб,ОхеЪ,Оха5,0xbe,Ох16,0xOc,Oxe3,0хбl, ОхсО,Ох8с,OxÇa,Oxf5,0x73,0x2c,Ох25,0xOb,ОхЪЪ,Ох4е,Ох89,0xáb,Ox53,0xáa,ОхЪ4,0xfl, Охеl,Oxe6,0xbd,Ox45,0xe2,0xf4,0хЪ6,0xá6,0xcc,Ох95,0õ03,0õ56,0xd4,0xlc,Oxle,Oxd7, Oxfb,Oxc3,0х8е,ОхЪ5,0xe9,0xcf,Oxbf,ОхЪа,Охеа,Ох77,0x39,0xaf,Ox33,0xc9,0x62,0x71, Ох81,0x79,0õ09,0xad,Ох24,0xcd,Oxf9,0xd8,0xe5,0хс5,0xb9,0x4d,Ox44,0x08,0x86,0xe7, Охаl,Oxld,Oxaa,Oxed,Ox06,0x70,0xb2,0xd2,0x41,0х7Ъ,ОхаО,Ох11,0x31,0xc2,0х27,0x90, Ox20,0xf6,0хбО,Oxff,Ох96,0x5c,Oxbl,ОхаЪ,ОхЭе,ОхЭс,Ох52,0хlЪ,Ox5f,Ox93,0хОа,Oxef, Ох91,0x85,0x49,0xee,Ox2d,Ox4f,Ox8f,OxÇb,Ох47,0х87,0xád,Ох46,0xd6,0xÇe,ОхбЭ,Ox64, Ох2а,Охсе,Oxcb,Oõ2f,Oxfc,Ох97,0x05,0x7a,Oxac,Ох7й,Oxd5,0xla,Ох4Ъ,ОхОе,Оха7,0x5a, Ох28,0x14,0xÇf,Ох29,0x88,0xÇc,Ох4с,Ох02,0xb8,0хба,ОхЪО,Ох17,0x55,0xlf,Ох8а,Ox7d, Ox57,0xc7,0x8d,Ox74,0xb7,0xc4,0x9f,Ох72,0x7e,Ох15,0x22,0x12,0õ58,0õ07,0x99,0х34, Охбе,Ox50,0xde,Охб8,0xá5,0xbc,Oxdb,Oxf8,0xc8,0xа8,0x2b,Ox40,0xdc,Oxfe,Ox32,0xa4, Охса,Ox10,0x21,0xfO,Oxd3,0x5d,OxOf,Ox00,0xáf,Ох96,0x36,0õ42,0x4a,Ох5е,Охс1,0xeO ), 
343 ¹ifdef Q TABLE STATIC u4byte qt gen = О; static u4byte q2 tab[256]; static u4byte q3 tab[256]; static u4byte q4 tab[256]; «сейме as(m,n) ((u4byte)qt[m] [i] « 8 * n) void gen qtab(void) ( u4byte i; for(i = 0; i & t; 2 6; + ( q2 tab[i] = qs(0, О) ( qs(1, 1) ( qs(0, 2) ( qs(1, 3); q3 tab[i] = qs(1, О) ( qs(1, 1) ( qs(0, 2) ( qs(0, 3); q4 tab[i] = qs(1, О) ( qs(0, 1) ( qs(0, 2) ( qs(1, 3); ) ¹endif // Q mn is the q Ъох applied for byte n on round m, where the rounds // are numbered 7rom k len down to 0 (4..0),' (3..0) or (2..0) ¹define Q 00 «define Q 01 «define Q 02 «define Q 03 qt [1] qt[0] qt[1] qt[0] «define Q 10 «define Q 11 ¹def ine Q 12 ¹def ine Q 13 qt[0] qt[0] qt[1] qt[1] ¹define Q 20 «define Q 21 ¹def ine Q 22 «define Q 23 qt[0] qt[1] qt[0] qt[1] ¹def ine Q 30 «define Q 31 ¹def ine Q 32 «define Q 33 ф» [1] qt П] qt[0] 1 [0] ¹define Q 40 qt[1] «define Q 41 qt[0] «сейме Q 42 qt[0] «define Q 43 qt [1] «define Ъча1(х,n) (((ulbyte*) (&am ; ) ) «define q8(x,m,n) Q ¹¹m¹¹n[x] " bval(key[m — 1],n) ¹ifdef М TABLE STATIC u4byte mt gen = О; STATIC u4byte m ЕаЪ[4][256]; Ох79, ОхОс, Охаа, Ох82, Ох41, Ох3а, Охеа, ОхЪЭ, Охе4, Ох9а, Оха4, Ох97, Ox7e, Oxda, Ox7a, Îõ17, Охбб, Ох 94, Oxa 1, Oxl d, Ox3d, Ox f 0, Oxde, Oxb3, ОхОЪ, Ох72, Oxa7, Oxl c, Oxe f, Oxdl, Ox53, Ox3e, Ox8f,Ox33,0õ26,0x5f,Охес,Ox76,0x2a,Ох49,0x81,0х88,0xee,Ох21,0xc4,0xla,Oxeb,Oõd9, Oxc5,0x39,0x99,0xcd,Oxad,Ox31,0x8b,Ox01,0x18,0х23,0xdd,Oxlf,Ox4e,Ox2d,Oxf9,0x48, Ох4й,Охй2,0x65,0x8e,Ox78,0x5c,Ох58,0x19,0x8d,Охе5,0x98,0x57,0x67,0х7й,Ox05,0x64, Охай,Ох63,0хЪ6,0xfe,Oxf5,0xb7,0x3c,Оха5,0xce,Охе9,0x68,0x44,0xeO,Ox4d,Ox43,0x69, Ох29,0x2e,Oxac,Oõ15,0x59,0xa8,0xOa,Ох9е,Охбе,Ох47,0xdf,Ох34,0x35,0xáa,Oxcf,Oxdc, Ox22,0xc9,0xcO,ОхЭЪ,Ох89,0xd4,0xed,ОхаЪ,Ох12,0xа2,0xOd,Ох52,0xbb,Ox02,0x2f,Оха9, Oxd7,0х61,0xle,ОхЪ4,0x50,0x04,0xf6,0xc2,0x16,0х25,0x86,0x56,0x55,0x09,0xbe,Ох91 ) 
STATIC void gen mtab(void) ( u4byte i, 701, f5b, fef; for(i = О; i & t; 2 6; & ( f01 = qt[1] [i] f5b = ffm 5b(f01); fef = ffm ef (f01); m tab[0] [i] = f01 + (f5b « 8) + (fef « 16) + (fef « 24); m tab[2] [i] = f5b + (fef « 8) t (f01 « 16) + (fef « 24); f01 = qt[0] [i]; f5b = ffm 5b(f01); fef = ffm ef (f01); m tab[1] [i] = fef + (fef « 8) + (f5b « 16) + (f01 « 24); m tab[3] [i] = f5b + (f01 « 8) + (fef &l ;&l ; 16) f5b m tab[n][x] Иейюе mds (n, х) 24) ¹endif // Му thanks to Bill and John Worley of HP Labs for the speed up of this function // for the key schedule Ъу using large tables for the first qt substitution STATIC u4byte h fun(const u4byte х, const u4byte key[], u4byte k len) ( u4byte b0,~1, Ъ2, ЪЗ; ¹ifdef Q TABLE switch(k len) ( u4byte хх; саяе 4: хх = ц4 tab[x] " key[3]; ЪО = Ъу~е (xx, О); Ъ1 = byte (хх, 1); Ъ2 = byte (хх, 2); ЪЗ = byte (xx, 3); b0 = q8(q8(q8(b0, 3, О), 2, О), 1, О); b1 = q8(q8(q8(b1, 3, 1), 2, 1), 1, Ъ2 = q8(q8(q8(b2, 3, 2), 2, 2), 1, 2); ЪЗ = q8(q8(q8(b3, 3, 3), 2, 3), 1, break; 3); саяе 3: хх = q3 tab[x] " key[2]; ЪО = byte (хх, О); b1 = byte (хх, 1); b2 = byte (хх, 2); ЪЗ = byte (хх, 3); ЪО = q8(q8(b0, 2, О), 1, О); b1 = q8(q8(b1, 2, 1), 1, 1); Ъ2 = q8(q8(b2, 2, 2), 1, 2); ЪЗ = q8(q8(b3, 2, 3), 1, 3); break; ¹def ine mds (n, х) ¹else ¹def ine fm 00 «define fm 10 ¹def ine fm 20 «define fm 30 ¹def ine fm 01 ¹def ine fm 11 ¹def ine fm 21 ¹def ine fm 31 «define fm 02 «define fm 12 ¹def ine fm 22 ¹def ine fm 32 ¹def ine fm 03 ¹def ine fm 13 «define fm 23 ¹def ine fm 33 Криптографические методы защиты информации в компьютерных системах и снях ffm 01 2йп 5Ъ ffm ef ffm ef ffm ef ffm ef 2йп 5Ъ Г2в 01 ffm 5Ъ ffm ef 2йп 01 ffm ef ffm 5Ъ 2йп 01 ffm ef 2йп 5Ъ ((u4byte) fm 0¹¹n(Q 0¹¹n[x]) ) " ((u4byte) fm 1¹¹n(Q 0«№п[х]) « 8) ((u4byte) fm 2№«гь(Я 0¹¹n[x]) « 16) " ((u4byte) fm 3№«гь(Я 0¹¹n[x]) « 
)45 Il pwoxmnn саяе 2: хх = q2 tab[x] " key[1]; b0 = byte (xx, О); b1 = byte (xx, 1); Ъ2 = byte (xx, 2); ЪЗ = byte (xx, 3); ЪО = q8(b0, 1, 0); bl = q8(bl, 1, 1); Ъ2 = q8(b2, 1, 2); b3 = q8(b3, 1, 3); ) «else 1); Ъ2 = byte(x, 2); ЪЗ = byte(x, 3); = q8(bl, 4, 1); Ъ2 = q8(b2, 4, 2); ЪЗ = q8(b3, 4, 3); = q8(bl, 3, 1); Ъ2 = q8(b2, 3, 2); b3 = q8(b3, 3, 3); 1, О); bl = q8(q8(b1, 2, '), 1, ); 1, 2); bÇ = q8(q8(b3, 2, 3), 1, 3); «endif «ifdef М TABLE return mds(0, ЪО) " пня(1, bl) " mds(2, Ъ2) " пня(3, ЪЗ); «е1яе ( u4byte m5b ЪО, m5b bl, m5b Ъ2, m5b ЪЗ; u4byte mef ЪО, mef bl, mef Ъ2, mef ЪЗ; ЪО = qt[1][b0]; bl = qt[0][bl]; Ъ2 = qt[1][Ъ2]; ЪЗ = qt[0][b3]; m5b ЪО = f fm 5Ъ(ЪО); m5b bl = f fm 5b(bl); m5b Ъ2 = f fm 5b(b2); m5b ЪЗ ййп 5Ь(ЪЗ); mef b0 = ffm ef (ЪО); mef bl = ffm ef(bl); mef Ъ2 = ffm ef (b2); mef ЪЗ ffm ef(b3); ЪО "= mef bl " m5b Ъ2 " m5b ЪЗ; ЪЗ "= m5b ЪО " mef bl " mef Ъ2; Ъ2 "= веГЪО " в5ЪЪ1 " веГЪЗ; bl "= ве2Ъ0 " ве2Ъ2 " в5ЪЪЗ; return bO ( (ЪЗ « 8) ] (Ъ2 « 16) ) (bl « 24); «endif ) ¹ifdef МК TABLE «бейine q2(х,n) q8(q8(х, 2, n), 1, n) «берже q3(x,n) q8(q8(q8(x, 3, n), 2, n), 1, n) «def ine q4 (x, n) q8 (q8 (q8 (q8 (x, 4, n), 3, n), 2, n), 1, n) STATIC void gen mk tab (u4byte key [], u4byte k len) ( u4byte i; ulbyte Ъу; switch(k len) ( саяе 2: for(i = О; i & t; 2 6; + ( Ъу = (ulbyte) i; «ifdef ONE STEP mk tab[0][i] = mds(0, mk tab[2][i] = mds(2, «else яЪ [0] [i] = q2 (by, О); яЪ [1] [i] = q2 (by, 1); sb[2] [i] = q2(Ъу, 2); sb[3] [i] = q2(Ъу, 3); «endif ЪО = byte (x, О); b1 = byte (x, switch(k len) ( саяе 4: ЪО = q8 (b0, 4, О); b1 саяе 3: ЪО = q8 (b0, 3, О); b1 саяе 2: ЪО = q8(q8(b0, 2, О), Ъ2 = q8(q8(b2, 2, 2), «ifdef ONE STEP STATIC u4byte mk tab[4][256]; «е1яе STATIC ulbyte яЪ[4][256]; «endif q2(Ъу, О) ); mk tab[1] [i] = mds(1, q2(Ъу, 1) ); q2 (by, 2) ); mk tab [3] [i] = mds (3, q2 (by, 3) ); 
Криптографические маоды защиты информации в компьютерных системах и снях break; сазе 3: for(i = О; i & t; 2 6; + ( Ъу = (ulbyte) i; ¹ifdef ONE STEP mk tab[0] [i] = mds(0, ц3(Ъу, О) ); mk tab[1] [i] = mds(1, цЗ(Ъу, 1) ); mk tab[2] [i] = mds(2, q3(by, 2) ); mk tab[3] [i] = mds(3, q3(by, 3) ); ¹else sb[0] [i] = q3(Ъу, О); sb[1] [i] = q3(Ъу, 1); яЪ[2] [i] = q3(by, 2); яЪ[3] [i] = q3(by, 3); ¹endi f ) break; саяе 4: for(i = 0; i & t; 2 6; + ( Ъу = (ulbyte) i; ¹ifdef ONE STEP mk tab[0] [i] = пиная(0, mk tab[2] [i] = пн2я(2, ц4 (Ъу, О) ); mk tab [1] [i] = mds (1, ц4 (Ъу, 1) ); ц4 (Ъу, 2) ); mk tab [3] [i] = mds (3, ц4 (Ъу, 3) ); ¹else sb [О] [i] = q4 (Ъу, О); sb [1] [1] = q4 (Ъу, 1); sb[2] [i] = q4 (by, 2); яЪ[3] [i] = q4 (by, 3); ¹endif ifdef ONE STEP бе2Ые g0 Гиг~ (х) ( mk tab [О] [byte (х, О) ] " mk tab [1] [byte (х, 1) ] " mk tab[2] [byte(x,2) ] " mk tab[3] [byte(х,Ç) ] ) def ine g1 f un (x) ( mk tab [1] [byte (x, О) ] " mk tab [2] [byte (x, 1) ] " mk tab [3] [byte (x, 2) ] " mk tab [0] [byte (x, 3) ] ) endif ¹else h fun(x, TWOFISH(s key), TWOFISH(k len)) h 2иг~(roti(х,8), TROFISH(s key), TROFISH(k len)) ¹define gO fun(x) ¹define gl fun(x) ¹endif // The (12,8) Reed Soloman code has the generator polynomial // // g(x) = х"4 + (а + 1/а) * х 3 + а * х 2 + (а + 1/а) * х + 1 // // where the coefficients are in the finite field GF(2"8) with a // modular polynomial а"8 + а"б + а"3 + а"2 + 1. To generate the // remainder we have to start with à 12th order polynomial with our // eight input bytes as the coefficients of the 4th to 11th terms. // That is: // // m[7] * х"11 + в[б] * х"10 ... + m[0] * х"4 + О * х"3 +... + О // // We then multiply the generator polynomial Ъу m[7] * х"7 and subtract // it — xor in GF(2"8) — from the аЪоче to eliminate the х"7 term (the // artihmetic on the coefficients is done in GF(2"8). We then multiply // the generator polynomial Ъу х"б * coeff(x"10) and use this to remove // the х"10 term. We carry on in this way until the х"4 term is removed // so that we are left with: // // г[3] * х"3 + r[2] * х"2 + r[1] 8 х"1 + r[0] // else define g0 fun(x) ( mds(0, sb[0][byte(x,0)]) " mds(1, зЪ[1][byte(x,1)]) " mds(2, зЪ[2][byte(x,2)]) " mds(3, яЪ[3][byte(x,3)]) ) № define gl fun(x) ( mds(1, яЪ[1] [byte(x,О)]) " mds(2, яЪ[2] [byte(x,1) ]) " mds (3, яЪ [3] [byte (x, 2) ] ) " mds (0, яЪ [0] [byte (x, 3) ] ) ) 
547 Il pv~oxan~n // which give the resulting 4 bytes of the remainder. This is equivalent // to the matrix multiplication in the Twofish description but much faster // to implement. «define G MOD Ox0000014d STATIC u4byte mds rem(u4byte р0, u4byte р1) ( u4byte i, t, u; for(i = 0; i & t; 8; + ( t = p1 » 24; // get most significant coefficient р1 = (р1 « 8) ] (pO » 24); р0 «= 8; // shift others up // multiply t Ъу à (the primitive element — i.e. left shift) u= (t«1); // subtract modular polynomial on overflow р1 "= (u « 24) ~ (u &l ;&l ; ); // e o e (а /а х ) return р1; «ifdef cplusplus ) // end of anonymous namespace ¹endif char* TWOFISH(name(void)) ( return "twofish ; . // initialise the key schedule from the user supplied key void TWOFISH(set key(const ulbyte in key[], const u4byte key len, const enum dir flag 0) ( u4byte i, а, Ъ, me key[4], mo key[4]; ¹ifdef Q TABLE if(!qK gen) ( gen qtab(); qt gen = 1; ) ¹endif ¹ifdef М TABLE if(!mt gen) ( gen mtab(); mt gen = 1; ) ¹endif TWOFI SH (k len) = key len / 64; // 2, 3 or 4 for(i = 0; i & t; TWOFIS (k le ); + if(t & mp; О u "= G MOD; р1 "= t " (u « 16); u"= (~>& if (t & mp; O u "= G MOD » 1; // remove t * (а * х"2 + 1) // formu=а*t+t/а=t* (а+1/а); // add the modular polynomial on underflow 
Криптографические мноды защиты информации в компьютерных системах и сатпх ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° e ° ° ° В ° ° ° ° ° ° ° В ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° opto ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° а = u4byte in(in key + 8 * i); me key[i] = а; Ъ = u4byte in(in key + 8 * i + 4); mo key[i] = Ъ; TWOFISH(s Key)[TWOFISH(k 1еп) — i — 17 = mds rem(a, Ъ); «е1яе а = Ох01010101 * i; Ъ = à + Ох01010101; «endif а = h fun(a, me key, TWOFXSH(k len)); Ъ = roti (h f un (5, mo key, TWOFTSH (k len) ), 8) р TWOF I SH ( l Key) [ i ] = à + b; TWOFISH(1 key) [i + 1] = roti (a + 2 * Ъ, 9); «ifdef MK TABLE gen mX tab(TWOFISH(s key), TWOFISH(k len) ); «endif return; // encrypt à block of text «define f md(i) t1 = g1 fun(blk[1]); t0 = g0 fun(blk[0]); blk[2] = rotr(blk[2] " (t0 + t1 + TWOFISH(l key) [4 * (i) + 8] ), 1); blk [3] = roti (blk [3], 1) " (t0 + 2 * t1 + TROFISH (1 key) [4 * (i) + 9] ); t1 = g1 fun(blk[3]); t0 = g0 fun(blk[2]); blk [0] = rotr (blk [0] " (t0 + t1 + TWOFISH (l key) [4 * (i) + 10] ), 1); blk[1] = roti(blk[1], 1) " (t0 + 2 * t1 + TROFISH(1 key) [4 * (i) + 11]) void TWOFISH (encrypt (const ulbyte in blk [16], ulbyte out blk [16] ) ) ( u4byte tO, t1, Ъ1)с[4]; f md(0); f md(1); f md(2); f md(3); f md(4); f md(5); f md(6); f md(7); u4byte out (out blk, blk [2] " TWOFISH (1 key) [4] ); u4byte out(out blk + 4, blk[3] " TWOFISH(l key) [5]); u4byte оШ~(оШ blk + 8, blk[0] " TWOFISH(1 key) [6]); u4byte out(out blk + 12, blk[1] " TWOFISH(1 key) [7]); // decrypt à block of text «define i md(i) ~Т = g1 fun(blk[1]); t0 = g0 fun(blk[0]); blk [2] = roti (blk [2], 1) " (t0 + t1 + TWOFISH (1 key) [4 blk [3] = rotr (blk [3] " (tO + 2 * t1 + TWOFISH (l key) [4 t1 = g1 fun(blk[3] ); t0 = g0 fun(blk[2] ); blk [0] roti (blk [0], 1) " (t0 + t1 + TWOFI SH (l key) [4 blk[1] = rotr(blk[1] " (t0 + 2 * t1 ~ TWOFISH(1 key) [4 * (i) + 8]); * (i) + 9]), 1) void TWOFISH(decrypt(const ulbyte in blk[16] ulbyte out blk[16])) ( u4byte tO, t1, blk [4]; blk [0] = u4byte in(in blk ) " TWOFISH (l key) [4]; blk [1] = u4byte in(in blk + 4) " TWOFISH (1 key) [5]; for(i = О; i & t; 0 i += ( «ifdef Q TABLE a=i; b=i blk [0] = u4byte in(in blk ) blk [1] = u4byte in(in blk + 4) blk[2] = u4byte in(inblk + 8) blk [3] = u4byte in(in blk + 12) " TWOFISH(1 key)[0]; " TWOFISH(1 key)[1]; " TWOFISH(1 key)[2]; " TWOFISH(1 key)[3]; 
)49 Il pHAGACKHH$I blk [2] = u4byte in(in blk + 8) " TWOFISH (1 key) [б]; blk[3] = u4byte in(in blk + 12) " TWOFISH(1 key) [7]; i md(7); i md(6); i md(5); i md(4); i md(3); i md(2); i md(1); i md(0); u4byte out(out blk, u4byte out(out blk + 4, u4byte out(outblk + 8, u4byte out(out blk + 12, blk[2] " TWOFISH(1 key)[0]); blk [3] " TWOFISH (1 key) [1] ); blk [0] " TWOFI SH ( l key) [2] ); blk[1] " TWOFISH(l key)[3]); 
IIPHJIOIEHHE г Система оценки качества оценки качества генераторов псевдослучайных кодов Система оценки качества [54] предназначена для исследования статистиче- ских свойств ГПК и анализа статистической безопасности криптоалгоритмов. В состав системы входит два вида тестов: ° Графические тесты. Пользователь получает определенные графические за- висимости и по их виду делает вывод о свойствах анализируемой последова- тельности. ° Оиеночные тесты. Система на основе оценочных критериев выдает заклю- чение о степени близости статистических свойств анализируемой и истинно случайной последовательности. Порядок работы с системой: выбор файла, содержащего анализируемую ин- формацию, выбор тестов, тестирование, просмотр результатов. Выбор файла осуществляется при помощи пункта меню Файл/Выбор (рис. П7.1). Рис. П7.1. Выбор файла с анализируемой информацией. 
П pHAO)KEHHA Для начала тестирования необходимо выбрать пункт меню Тесты/Начать тес- тирование (рис. П7.2). Рис. П7.2. Выбор тестов. Используя пункт меню Результаты пользователь может просмотреть резуль- таты выполнения конкретного теста, а также вывести на экран общий отчет, в котором отражены результаты проведения выбранных оценочных тестов и за- ключение системы о том, прошла или не прошла статистические испытания ис- следуемая последовательность. Последняя считается статистически безопасной, если пройдены все тесты, если не пройдены один или два теста, последователь- ность считается подозрительной; во всех остальных случаях последовательность бракуется. По каждому оценочному тесту пользователь может получить деталь- ный отчет (рис. П7.3 — П7.8). 
Рис. П7.3. Пример общего отчета Рис. П7.4. Пример детального отчета )52 Криптографические методы мтциты информации в компьютерных системах и сетях 
ПрнАОжени А ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° Рис. П7.5. Тест 'Тистограмма" Рис. П7.7. Тест "Автокорреляционная функция" Рис. П7.6. Тест "Проверка серий - 2" Рис. П7.8. Тест "Распределение на плоскости" 
ПРИЛОЖЕНИЕ 8 Использование Л-триггеров при проектировании LFSR u CRC-генераторов В ряде случаев при проектировании генераторов псевдослучайных кодов на основе LFSR u CRC-генераторов удается существенно упростить аппаратную реализацию этих устройств за счет использования Т-триггеров. Такая возможность появляется, например, в следующих ситуациях: проектирование N-разрядных LFSR, логика работы которых описывается уравнением Q(t+1) = Т~Q(t); ® проектирование N-входовых CRC-генераторов, логика работы блока времен- ного сжатия которых описывается уравнением Q(t+ 1) = T|~Q(t)+a'(t); ® проектировании LFSR, осуществляющих в каждом такте умножение на х+ 1; проектирование LFSR, логика работы которых описывается уравнением Q(t+1) = T, Q(t), при выборе в качестве образующего многочлена вида Ф(х) = х +...+х +1. Во всех этих случаях программная реализация этих устройств также может быть существенно упрощена. На рис. П8.1 показаны три примера использования JK-триггеров при проек- тировании LFSR. 
П~илОжений Рис. II8.1. Использование JK-триггеров при построении LFSR: а - D-триггер и JK-триггер и их условное графическое обозначение; б - вариант реализации генератора М- последоваательности, изображенного на рис. 2.6; в - вариант построения генератора элементов поля GF(2'), изображенного на рис. 11.2; г - схема генератора байтовой псевдослучайной последовательности, соответствующего образующему многочлену Ф(х) =х' +х +1 
IIPHJIOIEHHE 9 1 0 0 1 1 1 0 1 матрицей 1 0 1 0 0 1 1 1, иначе говоря, уравнения работы БПС имеют 0 1 0 0 1 1 1 0 ВИД 0р 0р @03 o+04 @05 / 0l — 0p @02 @05 @06 @07~ 02 01 @04 @05 @06~ / где а,, i =О, 7, — входы, а, i = О, 2, — выходы блока. Пусть Ф(х) = х' + х' + х + х' + 1, тогда логика работы БПС 9 8 может быть описана матрицей 1 1 0 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1 0 0 БПС имеют вид 0 0 0 0 1 0 0 0 иначе говоря, уравнения работы О 0@ 1@ 2@ 3@~5@~3~ / 0) =03 %04 %05 S07 0+0& 02 02 @03 @04 @06 @07~ 03 ap S 06 S 08' 04 05 S07; 05 = 0O @06 @08~ / 06 = 0p @05 @ 07~ / =0p O+04 ®06 где а,, i = О, 8, - входы, а,, i = О, 7, - выходы блока. Линейные блоки пространственного сжатия информации 8 ~ 3, 9 — ~ 8 Пусть Ф(х) = х'+ х'+1, тогда логика работы БПС 8~ 3 может быть описана 
ЛИТЕРАТУРА ..м& t; 1. Алексеев А.И., Шереметьев А.Г., Тузов Г.И., Глазов В.И. Теория и применение псевдос~~~- чайных сигналов.М.: Наука, 1969. 2. Анин В.Ю. Защита компьютерной информации.СПб.: БХ — Санкт-Петербург, 2000. 3. Аршинов М.Н., Садовский Л.Е. Коды и математика (рассказы о кодировании).М.: Наука. Главн. ред. физ.-мат. лит., 1983. 4. Анохин М.И., Варнавский Н.П., Сидельников В.М., Ященко В.В. Криптография в банков- ском деле.М.: МИФИ, 1997. 5. Афонина С.В. Электронные деньги.СПб.: Питер, 2001. 6. Болл У., Коксетер Г. Математические эссе и развлечения: Пер с англ. / Под pe i. И.М.Ягпома.М.: Мир, 1986. 7. Врассар Ж. Современная криптология: Пер. с англ.М.: ПОЛИМЕД, 1999. 8. Брикелл Э.Ф., Одлижко Э.M. Криптоанализ: Обзор новейших результатов // ТИИЭР. 1988. T. 76, № 5. С. 75 — 93. 9. Варфоломеев А.А., Жуков А.Е., Мельников А.В., Устюжанин Д.Д. Блочные криптосистемы. Основные свойства и методы анализа стойкости.М.: МИФИ, 1998. 10. Введение в криптографию / Под общ. ред. В.В.Ященко.М.: МЦНМО: ЧеРо, 1998. 11. Винокуров А.Ю. ГОСТ не прост ..., а очень прост! // Монитор. 1995. N! 1. С. 60 — 73. 12. Он же. Алгоритм ши<1>р вани ГОСТ 281 7 в ” 8 , его использ в ние н реал зац я для к теров платформы Intel х86. 1997 // http://www.ssl.stu.neva.ru/psw/crypto.html. 13. Он же. Как устроен блочный шифр? 1995//Там же. 14. Он же. Проблема аутетификации данных и блочные ши<1& t;ры 1 98 / Т 15. Водолазский В. Коммерческие системы шифрования // Монитор. 1992. № 6 — 8; 1993. № 6. 16. Вонилов А.В., Галицкий А.В., Рябко С.Д. Безопасность в Internet: проблема решена? // Сети. 1995. М 7. С. 118-123. 17. Гараков Г.А. Таблицы неприводимых полиномов над полем GF(p) (р ( 11). Математические вопросы кибернетики и вычислительной техники. Ереван: Изд. Арм. ССР, 1970. С. 112 — 142. 18. Гарднер М. От мозаик Пенроуза к надежным шифрам: Пер. с англ.М.: Мир, 1993. 19. Герасименко В.А., Малюк А.А. Основы защиты информации.M. МИФИ, 1997. 20. ГОСТ 28147-89. Система обработки информации. Зашита криптографическая. Алгоритм крип- тографического преобразования. 21. ГОСТ P 34.10-94. Информационная технология. Криптографическая защита информации. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма. 22. ГОСТ P 34.11-94. Информационная технология. Криптографическая защита информации. Функция хеширования. 23. Диффи У. Первые 10 лет криптографии с открытым ключом // ТИИЭР. 1988. Т. 76, № 5. С. 54- 74. 24. Диффи У., Хэллман М. Защищенность и имитостойкость: Введение в криптографию // ТИИЭР. 1979. Т. 67, Х~ 3. С. 71 — 109. 25. Дориченко С.А., Ященко В.В. 25 этюдов о шифрах.М.: ТЕИС, 1994. 26. Доценко В.И., Фараджев P.Ã. Анализ и свойства последовательностей максимальной длины // Автоматика и телемеханика. 1969. Nt 11. С. 119 — 127. 27. Доценко В.И., Фараджев P.Ã., Чхартишвили Г.С. Свойства последовательностей максималь- ной длины с Р-уровнями // Автоматика и телемеханика. 1971. N 8. С. 189 — 194. 28. Жельников В. Криптография от папируса до компьютера.М.: ABF, 1996. 29. Зегжда Д.П., Ивашко А.М. Как построить защищенную информационную систему. Ч. 1 / Г!од научи. ред. П.Д.Зегжды и В.В.Платонова. СПб.: Мир и семья-95, 1997. 30. Они же. Как построить защищенную информационную систему. Технология создания безо- пасных систем. Ч. 2 / Под научи. ред. П.Д.Зегжды и В.В.Платонова.СПб.: HI10 "Мир и се- мья-95": ООО "Интерлайн", 1998. 31. Зиммерман Ф.Р. PGP: концепция безопасности и уязвимые места: Пер. с англ. // Компьтерра. 1997. М~ 48. С. 3640 42-51. 32. Киви Берд. Конкурс на новый криптостандарт AES // Системы безопасности связи и телеком- муникаций, 1999, № 27-28. 33. Контроль хода выполнения программ в ЭВМ с использованием сигнатурного анализа /В.Г. Тышкевич и др. // Зарубежная радиоэлектроника, 1990, ¹ 1. 
Криптографические методы здщиты информации в KOMnbloTEpHblx CHCTEMAx и снях 34. Крункик А. Как продать и получить деньги в Internet (введение в электронную коммер- цию).М.: МикроАрт, 2000. 35. Кнут Д. Исскусство программирования для ЭВМ: В 3 т: Пер. с англ.М.: Мир, 1977. 36. Макуильямс Ф.Дж., Слоак Н.Дж.А. Псевдослучайные последовательности и таблицы // ТИИ- ЭР. 1976. № 12. С. 80 — 95. 37. Мельников В.В. Защита информации в компьютерных системах.М.: Финансы и статистика: Электронинформ, 1997. 38. Можно ли взломать 512-разрядный RSA? // ComputeReview. 1999. 22 сент. С. 14. 39. Моисеенков И. Основы безопасности компьютерных систем // КомпьютерПресс. 1991. № 10. с. 19-24. 1991. № 11. С. 7-21. 40. Молловяк А.А., Молдовяк Н.А., Советов Б.Я. Криптография.СПб.: Изд-во "Лань", 2000. 41. Осмоловский С.А. Стохастические методы передачи данных.М.: Радио и связь, 1991. 42. IIerpos А.А. Компьютерная безопасность. Криптографические методы защиты.М.: /1МК, 2000. 43. Питерсон У., Уэлдон Э. Коды, исправляющие ошибки.М.: Мир, 1976. 44. Поточные шифры. Результаты зарубежной открытой криптологии. http://www.ssl.stu. å÷à.ru/psw/crypto. html. 45. Программно-аппаратные средства обеспечения информационной безопасности. Защита программ и данных: Учеб. пособие для вузов / П.Ю. Белкин, 0.0. Михальский, А.С. Першаков и др.M.: Радио и связь, 2000. 46. Романец Ю.В.,Тимофеев П.А., Шакьгик В.Ф. Зашита информации в компьютерных системах и сетях / Под ред. В.Ф.Шаньгина.М.: Радио и связь, 1999. 47. Ростовцев А.Г. Алгебраические основы криптографии.СПб.: НПО "Мир и семья": 000 "Ин- терлай н", 2000. 48. Саломаа А. Криптография с открытым ключом: Пер. с англ.М.: Мир, 1996. 49. Семьянов П.В. Почему криптосистемы ненадежны? // Проблемы информационной безопасно- сти. Компьютерные системы. 1999. № 1. С. 70 — 82. 50. Слоак Н.Дж.А. Коды, исправляющие ошибки и криптография // Математический цветник/ Пер. с англ. Ю.А.Данилова; Сост. и ред. JI.А. Кларнер; Под ред. И.М.Яглома.М.: Мир, 1983. 51. Смит Г.С. Программы шифрования данных. Сокр. пер. с англ. // Мир ПК. 1997. Март. С. 58-68. 52. Соколов А.В., Степанюк О.М. Методы информационной защиты объектов и компьютерных сетей.М.: 000 "Фирма "Издательство ACT"; СПб: 000 "Издательство "Полигон", 2000. 53. Феденко Б.А., Макаров И.В. Безопасность сетевых ОС.М.: ЭКО-ТРЕНДЗ, 1999. 54. Чугунков И.В. Система оценки качества генераторов псевдослучайных кодов // Научная сес- сия МИФИ-2000. T. 11, 12. С. 45 — 46. 55. Щербаков А. Разрушающие программные воздействия.М.: ЭДЭЛЬ, 1993. 56. Элспас Б. Теория aBTOHOMHblx линейных последовательных сетей // Кибернетический сб. 1963. Вып. 7. С. 90 — 128. 57. Anderson R., Manifavas С. Chameleon — А New Kind of Stream Cipher. — Encryption in Haifa (Jan 1997). 58. Avrillias А.С., Maritsas D.G. Toggle-Registers Generating in Parallel k kth Decimaitions of m- Sequences хр + А/' + l Desighn Tables //! ЕЕЕ Trans. on computers. 1979. Ч. С-28. № 2. P. 89-100. 59. Chaum D. Security without Identification: Transaction system to make Big Brother Obsolete // Communication of ASM. Ч. 28. 1985. P.1030-1044. 60. Daemen 3., Rijmen V. AES Proposal: Rijndael. 1999. 61. ЗеПу Andrey. Криптографический стандарт в новом тысячелетии // BYTE, Россия. 1999.6 ию- ня. 62. ЗцгЫс А, Menezes А. Elliptic Curves and Cryptography. 63. Menezes А., van Oorshot P., Vanstone S. Handbook Of Applied Cryptograthy. CRC Press/ 1997. 64. Pradhan D.K., Hsiao M.Y., Patel А.M., Su S.Y. Shift Registers Designed for on-line Fault Detection // Proceedings of 8'~' International Conference on Fault-Tolerant Computing. 1978. P. 173 — 178. 65. Schneier В. Applied cryptography. — 2nd е4., John Wiley & mp; ons (19 6). [Име тся пере Шнайер Б. Прикладная криптография // http://www.ssl.stu.neva.ru/psw/crypto. html]. 66. Schneier В. The Solitaire Encryption Algorithm. 1999 // http: //www.counterpane.corn/solitaire. html. 67. Schneier В. Why Cryptograthy Ь Harder Than It Looks. 68. Stahnke W. Primitive Binary Polinomials // Mathematics of Computation. 1973. V. 27, № 124. P. 977-980. 69. Feistel Н. Cryptograthy and computer privacy. Scientific Атепсап, 1973. [Имеется перевод: Фей- сгель Х. Криптография и компьютерная безопасность // http: //www.ssl.stu. åvà.ru/ðs crypto html]. 
Оглавление Вместо предисловия ВВЕДЕНИЕ. Автоматизированные системы обработки данных как объекты защиты информации ОБОЗНАЧЕНИЯ ГЛАВА 1. Основы криптологии 1.1. Основные термины и определения 1.2. Оценка надежности криптоалгоритмов 1.3. История криптологии 1.4. Классификация методов шифрования информации 1.5. Шифры замены 1.6. Шифры перестановки 1.7. Блочные составные шифры 1.8. Абсолютно стойкий шифр. Гаммирование 1.9. Поточные шифры ГЛАВА 2. Принципы построения и свойства генераторов псевдослучайных кодов 2.1. Генераторы двоичных М-последовательностей 2.2. Генераторы двоичных последовательностей произвольной длины 2.3. Основы теории конечных полей 2.4. Недвоичные ГПК 2.5. Свойства генераторов М-последовательностей 2.б. ГПК в задачах паточного и комбинированного шифрования 2.7. Использование R-блоков для построения ГПК 2.8. Оценка качества ГПК (материал предоставлен И. B. Чугунковым) 2.8.1. Графические тесты 2.8.2. Оценочные тесты ГЛАВА 3. Криптосистемы с секретным ключом 3.1. Модель симметричной криптосистемы 3.2. Классификация угроз противника. Основные свойства криптосистемы 3.3. Классификация атак на криптосистему с секретным ключом 3 4. Режимы использования блочных шифров 3.5. Отечественный стандарт криптографической защиты 14 15 1 18 21 2 2 1 81 83 1 92 109 
)бО Криптографические методы защиты информации в KQMnblotEpHblx cNcTEMAx u cETAx ГЛАВА 4. Криптосистемы с открытым ключом 4.1. Односторонние функции 4.2. Модель криптосистемы с открытым ключом 4.3. Открытое распределение ключей 4.4. Электронная подпись 4.5. Криптосистема, основанная на задаче об укладке рюкзака 4.6. Криптосистема RSA 4.7. Гибридные криптосистемы ГЛАВА 5. Криптографические протоколы 5.1. Основные понятия 5.2. Доказательства с нулевым разглашением 5.3. Протоколы подбрасывания монеты [7, 10] 5.4. Протоколы битовых обязательств [7, 10] 5.5. Протоколы разделения секрета [7, 10] ГЛАВА 6. Контроль целостности информации 6.1. Аутентичность. Задача аутентификации информации 6.2. Имитозащита информации. Контроль целостности потока сообщений 6.3. CRC — код 6.4. Криптографические методы контроля целостности 6.5. Код аутентификации сообщений 6.6. Код обнаружения манипуляций с данными ГЛАВА 7. Методы аутентификации информации 7.1. Идентификация, аутентификация и авторизация 7.2. Аутентификация субъекта 7.3. Симметричные методы аутентификации субъекта 7.4. Схема Kerberos 7.5. Несимметричные методы аутентификации субъекта 7.5.1. Протокол Диффи-Хэллмана 7.5.2. Протокол Шнорра 7.5.3. Протокол Фиата - Шамира 7.6. Аутентификация объекта ГЛАВА 8. Электронная подпись 8.1. Основные понятия 8.2. Хеш-функции 8.2.1. Secure Hash Algorithm (SHA) 124 124 126 127 128 130 133 136 139 139 140 141 143 144 146 146 147 150 158 159 159 162 162 164 168 169 173 173 175 177 178 179 179 182 182 
СОДЕ~РЖАНИЕ &gt 8.2.2. Хеш-функции на основе симметричных блочных криптоалгоритмов 8.2.3. Отечественный стандарт на функцию хеширования (ГОСТ P 34.11-94) 8.3. Протоколы электронной подписи 8.3.1. Схема электронной подписи RSA 8.3.2. Схема электронной подписи Шнорра 8.3.3. Отечественный стандарт электронной подписи (ГОСТ P 34.10-94) 8.4. Классификация атак на схемы электронной подписи 8.5. Процедура разрешения споров 8.6. Особые схемы электронной подписи ГЛАВА 9. Управление ключами 9.1. Разрядность ключа 9.2. Генерация ключей 9.3. Неоднородное ключевое пространство 9.4. Хранение ключей 9.5. Распределение ключей 9.6. Время жизни ключей 9.7. Протокол управления ключами SKTP ГЛАВА 10. Поточные шифры 10.1. Синхронные поточные шифры 10.1.1. А5 10.1.2. ЯС4 10.1.3. ORYX 10.1.4. CFMMELEON 10.1.5. SOUTAIRE 10.2. Самосинхронизирующиеся поточные шифры ГЛАВА 11. Стандарт криптографической защиты XXI века- Advanced Encryption Standard (AES) 11.1. История конкурса на новый стандарт криптозащиты 11.2. Блочный криптоалгоритм ИЗИРАЕЙ 11.2.1. Математические основы 11.2.2. Структура шифр~ ГЛАВА 12. Проблемы и перспективы развития криптографических методов защиты 12.1. Криптосистема на основе эллиптических уравнений 12.1.1. Математические основы 12.1.2. Группа точек эллиптической кривой 12.1.3. Эллиптическая кривая над GF(p) 186 186 189 189 189 190 191 192 194 195 195 197 198 200 203 205 206 208 208 209 209 212 212 214 217 220 220 225 225 231 237 237 237 238 240 
)б2 Криптографические методы защиты информации в компьютерных системах и снях 243 244 252 254 256 256 260 260 262 267 267 274 280 ПРИЛОЖЕНИЕ 1 286 Примитивные многочлены над GF(2 ) =(0,1,è, и ), и +и+1= О, u) =1 и GF(/)=(0,1,u),и,u),и,u),u) ), 9+cd+1=0, u) =1 286 GF(2 ) (N(10) 286 GF(2') (N( 8) 286 GF(2 ) (N=2) 286 ПРИЛОЖЕНИЕ 4 287 Поточные шифры А5/1, RC4, SOLlTAIRE. Исходные тексты программ 287 12.1.4. Алгоритм электронной подписи на основе эллиптических кривых ECDSA 12.2. Неотслеживаемость. Электронные деньги 12.3. Использование односторонних функций с секретом для построения генераторов псевдослучайных кодов 12.4. Вероятностное шифрование 12.5. Стохастические методы передачи данных 12.5.1. Основные понятия теории кодирования 12.5.2. Теория кодирования и криптография 12.5.3. Стохастичесхие (п, k, q)-ходы 12.5.4. Стохастичесхий блоковый (n, k, q)- ход, исправляющий ошибки 12.5.5. Крипто- и имитозащита при стохастическом кодировании 12.6. Контроль хода программ ВМЕСТО ЗАКЛЮЧЕНИЯ. Причины ненадежности криптосистем, или Почему криптография сложнее, чем кажется Неприводимые многочлены над И'(р), р — простое Неприводимые многочлены над GF(2) Неприводимые многочлены над GF(3) Неприводимые многочлены над И'(5) Неприводимые многочлены над GF(7) Неприводимые многочлены над GF(11) ПРИЛОЖЕНИЕ 2 Примитивные многочлены над GF(2) Примитивные многочлены вида Г+ x'+ 1, где N- число Мерсенна Примитивные многочлены вида Г+ X'+ 1, где i = 8, 16, 32, 64, 128 Примитивные многочлены вида Г+ x'+ 1, где (i, 2 — 1) = 1 ПРИЛОЖЕНИЕЗ 280 280 281 281 281 282 283 283 283 284 284 
СОДЦЭЖАН И f 363 ПРИЛОЖЕНИЕ 5 Блочный шифр RIJNDAEL — победитель конкурса AES. Исходный текст программы и тестовый пример ПРИЛОЖЕНИЕ 6 Финалисты конкурса AES — блочные шифры MARS, RC6, RIJNDAEL, SERPENT, TWOFISH. Исходные тексты программ ПРИЛОЖЕНИЕ 7 система оценки качества оценки качества генераторов псевдослучайных кодов ПРИЛОЖЕНИЕ 8 Использование Ж-триггеров при проектировании LFSR и CRC-генераторов ПРИЛОЖЕНИЕ 9 Линейные блоки пространственного сжатия информации 8 — ~ 3, 9 — ~ 8 ЛИТЕРАТУРА 299 314 314 350 350 354 354 356 356 357