Текст
                    С. БАРИЧЕВ, Р. СЕРОВ

ОСНОВЫ
СОВРЕМЕННОЙ
КРИПТОГРАФИИ

V 1.2

Москва, 2001

Предисловие к электронному изданию Данный документ является доработанной версией издания «Основы современной криптографии», вышедшего в издательст- ве «Горячая линия - Телеком», в 2001 году. Саму книгу можно приобрести практически в любом книжном интернет-магазине (см. например, www.fmdbook.ru). Целью электронного издания является популяризация теоре- тических основ современной криптографии, в первую очередь в образовательных заведениях. Документ может неограниченно копироваться. Для распечатки и копирования текста книги необ- ходимо БЕСПЛАТНО получить пароль, направив на адрес bars@orc.ru запрос с темой «psw», а в теле указав цель копирова- ния и распечатки (а также кол-во экземпляров). Авторы просят воздержаться от передачи полученных паролей другим лицам. Не допускается полное или частичное использование текста книги без указания источника. Сергей Баричев, Роман Серов
СОДЕРЖАНИЕ I. КРИПТОГРАФИЧЕСКИЕ СИСТЕМЫ...........................6 ЕЕ Основные понятия и определения....................6 Е2 . Требования к криптографическим системам.........9 2. СИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ.........................11 2.Е Основные классы симметричных криптосистем.......11 2.2. Общие сведения о блочных шифрах.................12 2.3. Генерирование блочных шифров....................16 2.4. Алгоритмы блочного шифрования...................18 2.4.1. Алгоритм DES и его модификации...............18 2.4.2. Стандарт AES. Алгоритм Rijndael..............25 2.4.3. Алгоритм RC6.................................30 2.4.4. Российский стандарт шифрования ГОСТ 28147-89.32 2.4.5. Алгоритмы SAFER+, SAFER++....................36 2.5. Режимы применения блочных шифров................41 2.6. Потоковые шифры.................................46 2.6.1. Общие сведения о потоковых шифрах............46 2.6.2. Самосинхронизирующиеся шифры.................47 2.6.3. Синхронные шифры.............................48 2.6.4. Примеры потоковых шифров.....................50 2.6.4.Е RC4..................................50 2.6.4.2. SEAL.................................51 2.6.4.3. WAKE.................................55 3. АСИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ........................56 3.1. Общие положения.................................56 3.2. Односторонние функции и функции-ловушки.........61 3.3. Асимметричные системы шифрования................63 3.3.1. Криптосистема Эль-Гамаля.....................63 3.3.2. Криптосистема, основанная на проблеме Диффи- Хеллмана ........................................65 3.3.3. Криптосистема Ривеста-Шамира-Адлемана........70 3.3.4. Криптосистемы Меркля-Хеллмана и Чора-Ривеста.71 3.3.5. Криптосистемы, основанные на эллиптических кривых77 4. ЭЛЕКТРОННЫЕ ЦИФРОВЫЕ ПОДПИСИ.......................82 4.1. Постановка задачи...............................82 4.2. Алгоритмы электронной цифровой подписи..........84 4.2.1. Цифровые подписи, основанные на асимметричных криптосистемах...................................84
4.2.2. Стандарт цифровой подписи DSS.............86 4.2.3. Стандарт цифровой подписи ГОСТ Р 34.10-94.90 4.2.4. Алгоритм цифровой подписи, основанный на эллиптических кривых.........................93 4.2.5. Цифровые подписи, основанные на симметричных криптосистемах...............................95 4.3. Функции хэширования.........................106 4.3.1. Функция хэширования SHA..................108 4.3.2. Функции хэширования SHA-256, SHA-512 и SHA-384109 4.3.3. Функция хэширования ГОСТ Р34.11-94...... 113 4.3.4. Функция хэширования MD5..................117 5. УПРАВЛЕНИЕ КРИПТОГРАФИЧЕСКИМИ КЛЮЧАМИ... 121 6. ИМИТОЗАЩИТА ИНФОРМАЦИИ В АСУ...................121 7. ВОПРОСЫ РЕАЛИЗАЦИИ КРИПТОГРАФИЧЕСКИХ СИСТЕМ........................................121 ЛИТЕРАТУРА........................................122
1. КРИПТОГРАФИЧЕСКИЕ СИСТЕМЫ 1.1. Основные понятия и определения Проблема защиты информации путем ее преобразования, ис- ключающего ее прочтение посторонним лицом, волновала чело- веческий ум с давних времен. История криптографии - ровесница истории человеческого языка. Более того, первоначально пись- менность сама по себе была криптографической системой, так как в древних обществах ею владели только избранные. Священ- ные книги древнего Египта, древней Индии тому примеры. С широким распространением письменности криптография стала формироваться как самостоятельная наука. Первые крипто- системы встречаются уже в начале нашей эры. Так, Цезарь в своей переписке использовал уже более-менее систематический шифр, получивший его имя. Бурное развитие криптографические системы получили в годы первой и второй мировых войн. Появление вычислительных средств в послевоенные годы ускорило разработку и совершенст- вование криптографических методов. Почему проблема использования криптографических методов в информационных системах (ИС) стала в настоящий момент особо актуальна? С одной стороны, расширилось использование компьютерных сетей, в частности, глобальной сети Интернет, по которым пере- даются большие объемы информации государственного, военно- го, коммерческого и частного характера, не допускающего воз- можность доступа к ней посторонних лиц. С другой стороны, появление новых мощных компьютеров, технологий сетевых и нейронных вычислений сделало возмож- ным дискредитацию криптографических систем, еще недавно считавшихся практически нераскрываемыми. Проблемой защиты информации путем ее преобразования за- нимается криптология (крилтод - тайный, Лоуод - наука (слово) (греч.)). Криптология разделяется на два направления - крипто- графию и криптоанализ. Цели этих направлений прямо противо- положны. Криптография занимается поиском и исследованием методов преобразования информации с целью скрытия ее содержания.
Сфера интересов криптоанализа - исследование возможности расшифровывания информации без знания ключей. В этой книге будут рассматриваться различные криптогра- фические методы. Современная криптография включает в себя четыре крупных раздела: 1. Симметричные криптосистемы. 2. Криптосистемы с открытым ключом. 3. Системы электронной подписи. 4. Управление ключами. Основные направления использования криптографических ме- тодов - передача конфиденциальной информации по каналам связи (например, электронная почта), установление подлинности передаваемых сообщений, хранение информации (документов, баз данных) на носителях в зашифрованном виде. Итак, криптография дает возможность преобразовать инфор- мацию таким образом, что ее прочтение (восстановление) воз- можно только при знании ключа. В качестве информации, подлежащей шифрованию и расшиф- рованию, будут рассматриваться тексты, построенные на неко- тором алфавите. Под этими терминами понимается следующее. Алфавит - конечное множество используемых для кодирова- ния информации знаков. Текст - упорядоченный набор из элементов алфавита. В качестве примеров алфавитов, используемых в современных ИС можно привести следующие: алфавит Z33 - 32 буквы русского алфавита (исключая "ё") и пробел; алфавит Z256 - символы, входящие в стандартные коды ASCII и КОИ-8; двоичный алфавит - Z2 = {0,1}; восьмеричный или шестнадцатеричный алфавит. Зашифрование - процесс преобразования открытых данных в зашифрованные при помощи шифра. Вместо термина "открытые данные" часто употребляются термины открытый текст и исходный текст, а вместо "зашиф- рованные данные" - шифрованный текст. Расшифрование - процесс, обратный шифрованию, т.е про- цесс преобразования зашифрованных данных в открытые при помощи шифра.
Под шифрованием понимается процесс зашифрования или расшифрования. Криптографическая система, или шифр представляет собой семейство Т обратимых преобразований открытого текста в шифрованный. Члены этого семейства индексируются или обо- значаются символом /г; параметр к обычно называется ключом. Преобразование Т* определяется соответствующим алгоритмом и значением ключа к. Ключ — конкретное значение состояния некоторых параметров алгоритма криптографического преобразования, обеспечивающее выбор одного преобразования из семейства. Пространство ключей К - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита. Криптосистемы подразделяются на симметричные и асим- метричные (или с открытым (публичным) ключом). В симметричных криптосистемах для зашифрования и для расшифрования используется один и тот же ключ. В системах с открытым ключом используются два ключа - открытый (публичный) и закрытый (секретный), которые мате- матически связаны друг с другом. Информация зашифровывается с помощью открытого ключа, который доступен всем желающим, а расшифровывается с помощью закрытого ключа, известного только получателю сообщения. Термины распределение ключей и управление ключами отно- сятся к процессам системы обработки информации, содержанием которых является выработка и распределение ключей между пользователями. Электронной (цифровой) подписью называется присоеди- няемое к тексту его криптографическое преобразование, которое позволяет при получении текста другим пользователем проверить авторство и подлинность сообщения. Криптостойкостью называется характеристика шифра, опре- деляющая его стойкость к расшифрованию без знания ключа (т.е. криптоанализу). Имеется много частных показателей крипто- стойкости, среди которых: - количество всех возможных ключей; - количество операций, необходимое для вскрытия шифра;
- объем выборки исходного и/или шифрованного текста, не- обходимый для определения ключа; - сложность решения математической задачи, лежащей в ос- нове системы шифрования. Однако следует понимать, что эффективность защиты инфор- мации криптографическими методами зависит не только от криптостойкости шифра, но и от множества других факторов, включая организационные. 1.2. Требования к криптографическим системам Процесс криптографического закрытия данных может осу- ществляться как программно, так и аппаратно. Аппаратная реали- зация отличается существенно большей стоимостью, однако ей присущи и преимущества: высокая производительность, просто- та, защищенность и т.д. Программная реализация более практич- на, допускает известную гибкость в использовании. Для современных криптографических систем защиты инфор- мации сформулированы следующие общепринятые требования: - зашифрованное сообщение должно поддаваться чтению только при наличии ключа; - число операций, необходимых для определения исполь- зованного ключа шифрования по фрагменту шифрованного сообщения и соответствующего ему открытого текста, должно быть не меньше общего числа возможных ключей; - число операций, необходимых для расшифровывания ин- формации путем перебора всевозможных ключей должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных компьютеров (с учетом воз- можности использования сетевых вычислений); - знание алгоритма шифрования не должно влиять на надеж- ность защиты; - незначительное изменение ключа должно приводить к су- щественному изменению вида зашифрованного сообщения даже при шифровании одного и того же исходного текста; - незначительное изменение исходного текста должно при- водить к существенному изменению вида зашифрованного сообщения даже при использовании одного и того же клю- ча;
- структурные элементы алгоритма шифрования должны быть неизменными; - дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте; - длина шифрованного текста должна быть равной длине ис- ходного текста; - не должно быть простых и легко устанавливаемых зависи- мостей между ключами, последовательно используемыми в процессе шифрования; - любой ключ из множества возможных должен обеспе- чивать надежную защиту информации; - алгоритм должен допускать как программную, так и аппа- ратную реализацию, при этом изменение длины ключа не должно вести к качественному ухудшению алгоритма шифрования.
2. СИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ 2.1. Основные классы симметричных криптосистем Под симметричными криптографическими системами пони- маются такие криптосистемы, в которых для шифрования и расшифрования используется один и тот же ключ. Для пользова- телей это означает, что прежде, чем начать использовать систему, необходимо получить общий секретный ключ так, чтобы исклю- чить к нему доступ потенциального злоумышленника. Все мно- гообразие симметричных криптосистем основывается на сле- дующих базовых классах. Исходное Отправитель Зашифр. Получатель сооощение (А) сообщение (В) Рис 2.1. Схема симметричной криптосистемы. Моно- и лшогоачфавитные подстановки. Моноалфавитные подстановки - это наиболее простой вид преобразований, заключающийся в замене символов исходного текста на другие (того же алфавита) по более или менее сложно- му правилу. В случае моноалфавитных подстановок каждый символ исходного текста преобразуется в символ шифрованного текста по одному и тому же закону. При многоалфавитной под- становке закон преобразования меняется от символа к символу. Для обеспечения высокой криптостойкости требуется использо- вание больших ключей. К этому классу относится так называемая криптосистема с одноразовым ключом, обладающая абсолютной теоретической стойкостью, но, к сожалению, неудобная для практического применения. Перестановки. Также несложный метод криптографического преобразования, заключающийся в перестановке местами символов исходного текста по некоторому правилу. Шифры перестановок в настоящее
время не используются в чистом виде, так как их криптостой- кость недостаточна. Блочные шифры. Представляют собой семейство обратимых преобразований блоков (частей фиксированной длины) исходного текста. Факти- чески блочный шифр - это система подстановки блоков. В на- стоящее время блочные шифры наиболее распространены на практике. Российский и американский стандарты шифрования относятся именно к этому классу шифров. Гаммирование. Представляет собой преобразование исходного текста, при ко- тором символы исходного текста складываются (по модулю, равному мощности алфавита) с символами псевдослучайной последовательности, вырабатываемой по некоторому правилу. Собственно говоря, гаммирование нельзя целиком выделить в отдельный класс криптографических преобразований, так как эта псевдослучайная последовательность может вырабатываться, например, с помощью блочного шифра. В случае, если последо- вательность является истинно случайной (например, снятой с физического датчика) и каждый ее фрагмент используется только один раз, мы получаем криптосистему с одноразовым ключом. 2.2. Общие сведения о блочных шифрах. Под N-разрядным блоком будем понимать последовательность из нулей и единиц длины N: х = (х() ,х, , ...,XM1) е Z2,w; х в Z2tN можно интерпретировать как вектор и как двоичное представление целого числа #-1 1=0 Например, если N=4, то (0,0,0,0)^0 (0,1,0,0)^4 (1,0,0,0)^8 (1,1,0,0)—>12 (0,0,0,1)->1 (0,1,0,1)—>5 (1,0,0,1)—>9 (1,1,0,1)^13 (0,0,1,0)^2 (0,1,1,0)^6 (1,0,1,0)^10 (1,1,1,0)—>14 (0,0,1,1)->3 (0,1,1,1)—>7 (1,0,1,1)^11 (1,1,1,1)—>15.
Блочным шифром будем называть элемент ле SYM(Z2\): л: х—>у = л(х), где х = (х0, хь xMj), у = (у0, у{, yNA). Хотя блочные шифры являются частными случаями подстановок (только на алфавитах очень большой мощности), их следует рассматривать особо, поскольку, во-первых, большинство сим- метричных шифров, используемых в системах передачи инфор- мации, являются блочными и, во-вторых, блочные шифры удоб- нее всего описывать в алгоритмическом виде, а не как обычные подстановки. Предположим, что 7t(xi) = у,, 0 < z < т, для некоторого п е SYM(Z2A), исходного текста X = {х,: х, gZ2 Д и шифрованного текста Y = {у}. Что можно сказать о л(х), если xg{xi}? Поскольку л является перестановкой на Z2^ , то {у,} различны и л(х)й {у,} при хе {х,}. Что же еще можно сказать о л? (2' - т)! из (2Л)! перестановок в SYV1(Z2 v) удовлетворяет уравнению л(х,) = у, , 0 < z < т, Дальнейшая спецификация л(х) при отсутствии дополнительной информации не представляется возможной. Это определяется в основном тем обстоятельством, что л является элементом, при- надлежащим SYM(Z2;N). Если известно, что л принадлежит не- большому подмножеству П из SYM(Z2 N), то можно сделать более определенный вывод. Например, если П = {и,: 0< j <2n}, л/z) = (z+j) (mod 2N), 0 < z <2 , то значение л(х) при заданном значении х однозначно определяет л. В этом случае X является подмножеством подстановок Цезаря на Z22v. Криптографическое значение этого свойства должно быть очевидно: если исходный текст шифруется подстановкой л, выбранной из полной симметрической группы, то зло- умышленник, изучающий соответствие между подмножествами исходного и шифрованного текстов х, у,, 0 < z < т,
не в состоянии на основе этой информации определить исходный текст, соответствующий уй {у,}. Если для шифрования исходного текста используется подсис- тема л из Пе SYM(Z2,n), то получающуюся в результате систему подстановок П будем называть системой блочных шифров или системой блочных подстановок. Блочный шифр представляет собой частный случай моноалфавитной подстановки с алфавитом Z2n = Z2,n • Если информация исходного текста не может быть представлена N-разрядными блоками, как в случае стандартного алфавитно-цифрового текста, то первое, что нужно сделать, это перекодировать исходный текст именно в этот формат. Переко- дирование можно осуществить несколькими способами и с прак- тической точки зрения неважно, какой из способов был выбран. В установках обработки информации блочные шифры будут использоваться многими пользователями. Ключевой системой блочных шифров является подмножество П[К] симметрической группы SYM(Z2;W) П[К] = {л{/г}:/геК}, индексируемое по параметру к е К; к является ключом, а К - пространством ключей. При этом не требуется, чтобы различные ключи соответствовали различным подстановкам Z2;N. Ключевая система блочных шифров П[К] используется сле- дующим образом. Пользователь i и пользователь j некоторым образом заключают соглашение относительно ключа к из К, выбирая, таким образом, элемент из П[К] и передавая текст, зашифрованный с использованием выбранной подстановки. Запись у = п{к, х} будем использовать для обозначения N-разрядного блока шифро- ванного текста, который получен в результате шифрования N- разрядного блока исходного текста х с использованием подста- новки п{к}, соответствующей ключу к. Положим, что злоумыш- леннику - известно пространство ключей К; - известен алгоритм определения подстановки п{к} по зна- чению ключа /г;
- неизвестно, какой именно ключ к выбрал пользователь. Какими возможностями располагает злоумышленник? Он мо- жет: - получить ключ вследствие небрежности пользователя i или пользователя у; - перехватить (путем перехвата телефонных и компьютер- ных сообщений) шифрованный текст у, передаваемый пользователем i пользователю j, и производить пробы на все возможные ключи из К до получения читаемого со- общения исходного текста; - получить соответствующие исходный и шифрованный тексты (х—>у) и воспользоваться методом пробы на ключ; - получить соответствующие исходный и шифрованный тексты и исследовать соотношение исходного текста х и шифрованного текста у для определения ключа /г; - организовать каталог N-разрядных блоков с записью час- тот их появления в исходном или шифрованном тексте. Каталог дает возможность производить поиск наиболее вероятных слов, используя, например, следующую ин- формацию: 1. листинг на языке ассемблера характеризуется сильно выраженным структурированным форматом, 2. цифровое представление графической и звуковой ин- формации имеет ограниченный набор знаков. Предположим, что N - 64 и каждый элемент SYY1(Z2V) может быть использован как подстановка, так что K=SYM(Z2\). Тогда: - существует 2й4 64-разрядных блоков; злоумышленник не может поддерживать каталог с 2й4 =1,8-1019 строками; - проба на ключ при числе ключей, равном (2й4)!, практиче- ски невозможна; соответствие исходного и шифрованного текстов для некоторых N-разрядных блоков л{/г,х,} = у,, О < i < т, не дает злоумышленнику информации относи- тельно значения п{к, х} для хе {х,}. Системы шифрования с блочными шифрами, алфавитом Z2/,4 и пространством ключей K=SYM(Z2W) являются неделимыми в том смысле, что поддержание каталога частот появления букв для 64-разрядных блоков или проба на ключ при числе ключей 2й4
выходит за пределы возможностей злоумышленника. Следует сравнить эту проблему с той задачей, с которой сталкивается злоумышленник в процессе криптоанализа текста, зашифрован- ного подстановкой Цезаря с алфавитом {А,..., Я, ; для опреде- ления ключа подстановки Цезаря требуется лишь log232 = 5 бит, в то время как для пространства ключей K-SYV1(Z2 64) требуется 2й4 битов. К сожалению, разработчик и злоумышленник находятся в одинаковом положении: разработчик не может создать систему, в которой были бы реализованы все 2й4! подстановок SYM(Z2 й4), а злоумышленник не может испытать такое число ключей. Остает- ся согласиться с тем, что не каждый элемент из SYM(Z2;f)4) будет использован в качестве подстановки. Таким образом, требования к хорошему блочному шифру формулируются следующим образом. Необходимы: - достаточно большое N (64 или более) для того, чтобы за- труднить составление и поддержание каталога. В новом стандарте шифрования США А задано равным 128; - достаточно большое пространство ключей для того, что- бы исключить возможность подбора ключа; - сложные соотношения л{к,х} : х у=л{к,х} между ис- ходным и шифрованным текстами с тем, чтобы аналити- ческие и (или) статистические методы определения ис- ходного текста и (или) ключа на основе соответствия ис- ходного и шифрованного текстов были бы по возможно- сти нереализуемы. 2.3. Генерирование блочных шифров Одним из наиболее распространенных способов задания блоч- ных шифров является использование так называемых сетей Фейстела. Сеть Фейстела представляет собой общий метод пре- образования произвольной функции (обычно называемой F- функцией) в перестановку на множестве блоков. Эта конструкция была изобретена Хорстом Фейстелом и была использована в большом количестве шифров, включая DES и ГОСТ 28147-89. F- функция, представляющая собой основной строительный блок сети Фейстела, всегда выбирается нелинейной и практически во всех случаях необратимой.
Формально F-функцию можно представить в виде отображе- ния F: Z2,n/2 X Zj, к —> Z2;n/2, где N - длина преобразуемого блока текста (должна быть чет- ной), к-длина используемого блока ключевой информации. Пусть теперь X - блок текста, представим его в виде двух под- блоков одинаковой длины X = {А, В}. Тогда одна итерация (или раунд) сети Фейстела определяется как Х,+1 = B,||(F(B„ к,) © А,) где X, = {А„ В,}, || операция конкатенации, а © - побитовое исключающее ИЛИ. Структура итерации сети Фейстела пред- ставлена на рис 2.1. Сеть Фейстела состоит из некоторого фикси- рованного числа итераций, определяемого соображениями стой- кости разрабатываемого шифра, при этом на последней итерации перестановка местами половин блока текста не производится, тж. это не влияет на стойкость шифра. Данная структура шифров обладает рядом достоинств, а именно: процедуры шифрования и расшифрования совпадают, с тем исключением, что ключевая информация при рас- шифровании используется в обратном порядке; для построения устройств шифрования можно использо- вать те же блоки в цепях шифрования и расшифрования. Недостатком является то, что на каждой итерации изменяется только половина блока обрабатываемого текста, что приводит к необходимости увеличивать число итераций для достижения требуемой стойкости. В отношении выбора F-функции каких-то четких стандартов не существует, однако, как правило, эта функция представляет собой последовательность зависящих от ключа нелинейных замен, перемешивающих перестановок и сдвигов. Другим подходом к построению блочных шифров является использование обратимых зависящих от ключа преобразований. В этом случае на каждой итерации изменяется весь блок и, соот- ветственно, общее количество итераций может быть сокращено. Каждая итерация представляет собой последовательность преоб- разований (так называемых "слоев"), каждое из которых вы пол-
няет свою функцию. Обычно используются слой нелинейной обратимой замены, слой линейного перемешивания и один или два слоя подмешивания ключа. К недостаткам данного подхода можно отнести то, что для процедур шифрования и расшифрова- ния в общем случае нельзя использовать одни и те же блоки, что увеличивает аппаратные и/или программные затраты на реализа- цию. Рис. 2.2. Структура итерации сети Фейстела. 2.4. Алгоритмы блочного шифрования 2.4.1. Алгоритм DES и его модификации Американский стандарт криптографического закрытия данных DES (Data Encryption Standard), принятый в 1978 г., является типичным представителем семейства блочных шифров. Этот шифр допускает эффективную аппаратную и программную реализацию, причем возможно достижение скоростей шифрова- ния до нескольких мегабайт в секунду. Шифр DES представляет собой результат 33 отображений: DES = IP'x лТ1б хбхК хбх лТ1 х IP, (2.1) где IP (Initial Permutation - исходная перестановка) представляет собой проволочную коммутацию с инверсией 1Р 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49,41,33,25, 17, 9, 1,59,51,43,35,27, 19, 11,3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, композиция 0хлт , где 6 - перестановка местами правой и левой половин блока данных, представляет собой одну итерацию Фей- стела. Отметим, что в последнем цикле шифрования по алгорит- му DES перестановка местами половин блока не производится. Подстановки лт , 1< i < 16, описываются следующим образом: Шаг 1. На z-м цикле входной блок х' длиной 64 символа х' = (х,;о, х,д ..., хЛ63) делится на два блока по 32 символа X = (х,;0, ..., x,,3i) и Х’ = (х',7), х',д ..., Х',31). Правый блок X’ разбивается на восемь блоков по четыре сим- вола: *',,0 X'i,\ X',,2 X'i,2 *'/,4 Х',,5 x’t,o X',,7 х',,Я X'i,9 x X'i,n *'/,12 X'i,n x /,14 *'/,15 /, 16 x'i,n x'i,\K X /,19 X 1,20 x'i,2l x’i,22 x'i,22 X 1,24 *'/,25 X /,26 X i,20 X ’i,2^, X i,20 X /,30 *'/,31 Эти восемь блоков путем копирования крайних элементов преоб- разуются в восемь блоков из шести символов: */,31 *,.0 */,l */,2 */,3 */,4 */,3 X,,4 */,5 *,,6 */,7 */,8 */,7 *.,X */,9 */,10 */,11 */,12 */,11 */,12 */,13 */,14 */,15 */,15 -^/,16 */,17 */,18 */,19 */,20 */,19 */,20 */,21 */,22 */,23 */,24 */,23 */,24 */,25 */,26 */,27 */,28 */,27 */,28 */,29 */,30 */,31 */,0
I Rkl VAI НЯ Я ПЛГПРПЛВЯТРПКМЛГТК OITI'AP. (l IlwhnTPirCT i I Рис 2.3. Схема алгоритма шифрования DES
Шаг 2. На /-циклической итерации 48 разрядов ключа (/<7,о, ki,\, ••• , kiw). поразрядно суммируются (по модулю 2) с полученными выше 48 разрядами данных. Шаг 3. /-й блок из шести символов (0< j <8) подается на вход блока подстановки (S-бокс) S[/J имеет шестиразрядный вход и четырехразрядный выход и представляет собой четыре преобра- зования из Z24 в Z2 4; два крайних разряда входного блока служат для выборки одного из этих преобразований. Каждая из восьми подстановок S[0], S[1 S[7] осуществляется с использованием четырех строк и 16 столбцов матрицы с элементами {0,1,...,15]. Каждый из массивов размерностью 4x16 определяет подстановку на множестве Z24 следующим образом. Если входом является блок из шести символов (z0, zx, z2, z3, z4, z5), то две крайние пози- ции (zn, z5) интерпретируются как двоичное представление целых чисел из набора {0,1,2,3}. Эти целые определяют номер строки (от 0 до 3). Оставшиеся четыре символа (zb z2, z3, z4) интерпретируются как двоичное представление целых чисел из набора {0,1,...,15} и служат ддя определения столбца в массиве (от 0 до 15). Таким образом, входной блок (0,0,1,0,1,1) соответствует строке 1 и столбцу 5. Шаг 4. 32 разряда, составляющие выход S-бокса, подаются на вход блока проволочной коммутации (Р-бокса): 16, 7, 20,21,29, 12, 28, 17, 1, 15,23,26,5, 18,31, 10, 2,8,24, 14, 32, 27,3,9, 19, 13,30, 6, 22, 11,4,25 Шаг 5. Компоненты правого входного 32-разрядного блока X’, преобразованного в Т(Х’), поразрядно суммируются по моду- лю 2 с компонентами левого входного 32-разрядного блока X. На каждой итерации используется 48-разрядный подключ (/г,р, /г,д ..., Л,,47). Поскольку входным ключом DES является 56- разрядный блок к = = (/с;П, к,-д •••, /с,д5), то каждый его разряд ис- пользуется многократно. Какие именно разряды ключа используются на /-циклической итерации, определяется по следующему алгоритму: прежде всего 64 разряда ключа преобразуются в 56 путем вы- брасывания каждого восьмого бита (который может использо- ваться для контроля целостности ключа);
производится начальная перестановка КР-1 56-разрядного ключа пользователя к = (&,;0, /<,;55): 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2,59,51,43,35,27, 19, 11,3,60, 52,44,36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4. Получаемый в результате 56-разрядный блок рассматривается как два 28-разряд и ых блока: левый - Со и правый - Dn; производится левый циклический сдвиг блоков Со и D() s[ 1 ] раз для получения блоков Ci и Dp, из сцепления блоков (Сь Dj) выбираются 48 разрядов с помо- щью перестановки КР-2. Эти разряды используются на первой итерации; 14, 17, 11,24, 1,5,3,28, 15,6,21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 используемые на z-й циклической итерации разряды ключа опре- деляются методом индукции. Для получения блоков С, и D, производим левый циклический сдвиг блоков С, i и D, i на s[z] позиций: i 1 2 3 4 5 6 7 8 9 К 11 К К Е 11 К S 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 и вновь применяем КР-2 для получения очередной порции ключа. Инверсией DES (обеспечивающей расшифрование зашифро- ванных посредством DES данных) является DES = 1Р 'х лТ| х0хК х0х лТ1б х IP, (2.2) Расшифрование зашифрованного посредством DES текста осуществляется с использованием тех же блоков благодаря обра- тимости преобразования. Таков общий алгоритм DES. Попробуем проанализировать его эффективность. Поскольку длина блоков исходного текста равна 64, поддерж- ка каталогов частот использования блоков является для зло- умышленника задачей, выходящей за пределы современных технических возможностей.
Однако, данный алгоритм, являясь первым опытом стандарта шифрования имеет ряд недостатков. За время, прошедшее после создания DES, компьютерная техника развилась настолько быст- ро, что оказалось возможным осуществлять исчерпывающий перебор ключей и тем самым раскрывать шифр. Стоимость этой атаки постоянно снижается. В 1998 г. была построена машина стоимостью около 100000 долларов, способная по данной паре <исходный текст, шифрованный текст> восстановить ключ за среднее время в 3 суток. Таким образом, DES, при его использо- вании стандартным образом, уже стал далеко не оптимальным выбором для удовлетворения требованиям скрытности данных. Было выдвинуто большое количество предложений по усо- вершенствованию DES, которые отчасти компенсируют указан- ные недостатки. Мы рассмотрим два из них. Наиболее широко известным предложением по усилению DES является так называемый «тройной DES», одна из версий которо- го определяется формулой EDE3/q/£2/£3 (х) = DES/£3 (DES-'?(DES/£i (х))) . То есть, ключ для EDE3 имеет длину 56 х 3 = 168 бит, и шиф- рование 64-битового блока осуществляется шифрованием с одним подключом, расшифрованием с другим и затем шифрова- нием с третьим. (Причина, по которой вторым шагом является DES^1, а не DES/£ , является совместимость с DES: если выбрать К=к,к,к, то EDE3K = DESk. Причина использования DES три раза вместо двух заключается в существовании атаки «встреча в середине» на двойной DES.) Проблема с тройным DES состоит в том, что он гораздо мед- леннее, чем сам DES - его скорость составляет ровно одну треть исходной. При использовании EDE3 в режиме сцепления блоков это замедление скажется как на аппаратном, так и на программ- ном (даже если попытаться компенсировать его дополнительной аппаратной частью) уровнях. Во многих случаях такое падение производительности неприемлемо. В 1984 г. Рон Ривест предложил расширение DES, называемое DESX (DES extended), свободное от недостатков тройного DES. DESX определяется как
DES/a, a = /<2 ® DES*(/ci © x) To есть, ключ DESX К = /г,/о,/<2 состоит из 54+64+64=184 бит и включает три различных подключа: ключ “DES” к, предвари- тельный «зашумляющий» ключ к\ и завершающий «зашумляю- щий» ключ к-2- Для шифрования блока сообщения мы складываем его пораз- рядно по модулю 2 с /<1, шифруем его алгоритмом DES с ключом к и вновь поразрядно складываем его по модулю 2 с /<2. Таким образом, затраты DESX на шифрование блока всего на две опе- рации сложения по модулю 2 больше, чем затраты исходного алгоритма. В отношении DESX замечательно то, что эти две операции «исключающее ИЛИ» делают шифр гораздо менее уязвимым по отношению к перебору ключей. Укажем, что DESX затрудняет получение даже одной пары <х„ DESXK(x,)> в том случае, когда злоумышленник организует атаку на шифр по выбранному ис- ходному тексту, получая множество пар <Р7, DESK(P/)>. DESX предназначался для увеличения защищенности DES против перебора ключей и сохранения его стойкости против других возможных атак. Но DESX в действительности также увеличивает стойкость против дифференциального и линейного криптоанализа, увеличивая требуемое количество проб с выбран- ным исходным текстом до величины, превышающей 260. Даль- нейшее увеличение стойкости против этих атак может быть достигнуто заменой в DESX операции «исключающее ИЛИ» на сложение, как это было сделано в DES - РЕР/с А /С2 = /с2 + DES^/o + х) где сложение определяется следующим образом: L.R + L'.R' = (L О L').(R О R'), |L|=|R|=|L'|=|R'|= 32, а 0 обозначает сложение по модулю 2j2. Сказанное не означает, что невозможно построить машину, раскрывающую DESX за приемлемое время. Но оно подразуме- вает, что такая машина должна использовать какую-либо ради- кально новую идею. Это не может быть машина, реализующая перебор ключей в общепринятом смысле.
Таким образом, практически во всех отношениях DESX ока- зывается лучше DES. Этот алгоритм прост, совместим с DES, эффективно реализуем аппаратно, может использовать сущест- вующее аппаратное обеспечение DES и в его отношении было доказано, что он увеличивает стойкость к атакам, основанным на переборе ключей. 2.4.2. Стандарт AES. Алгоритм Rijndael В конце 1996 г. Национальным институтом стандартов США (N1ST) был объявлен конкурс на создание нового общенацио- нального стандарта шифрования, который должен прийти на замену DES. Разрабатываемому стандарту было присвоено рабо- чее наименование AES (Advanced Encryption Standard). Отбор проходил в два этапа, после первого среди претендентов осталось 15 кандидатов, после второго - 5. И вот, 2 октября 2000 года было принято окончательное решение. В качестве предлагаемого стандарта был выбран алгоритм Rijndael (произносится "Рейн- дал"). Этот алгоритм был разработан Винсентом Райманом (Vin- cent Rijrnan) и Иоан Дамен (Joan Daemen) и представляет собой алгоритм, не использующий сети Фейстела. Е1ри описании алгоритма используется поле Галуа GF(2S), по- строенное как расширение поля GF(2) по корням неприводимого многочлена т(х) = хх + х4 + xJ + х + 1. Данный многочлен выбран из соображений эффективности представления элементов поля. Элементарные операции, использующиеся в алгоритме, выпол- няются в указанном поле. Алгоритм Rijndael представляет собой блочный шифр с пере- менной длиной блока и переменной длиной ключа. Длины блока и ключа могут быть выбраны независимо равными 128, 192 или 256 бит. Шифр является последовательностью итераций, выпол- няемых над некоторой промежуточной структурой, называемой состоянием. (Эта терминология заимствована из теории конеч- ных автоматов.) Состояние может быть представлено в виде прямоугольного массива байтов. В массиве 4 строки, а число столбцов, обозначаемое как Nb, равно длине блока, деленной на 32. Ключ шифрования аналогичным образом представляется в виде прямоугольного байтового массива с 4 строками. Количест- во столбцов, обозначаемое Nk, равно длине ключа, деленной на 32. Входные и выходные значения алгоритма представляются в
виде одномерных байтовых массивов соответствующей длины. Состояние и ключевой массив заполняются из этих массивов вначале по столбцам, а затем по строкам. Количество итераций обозначается Nr зависит от Nb и Nk в соответствии со следующей таблицей: Nr Nb = 4 Nb = 6 Nb = 8 Nk = 4 10 12 14 Nk = 6 12 12 14 Nk = 8 14 14 14 Итерационное преобразование состоит из четырех различных преобразований. На С-подобном псевдокоде это выглядит так: Round (State, RoundKey) { ByteSub(State); ShiftRow( State); MixColumn(State); AddRoundKey(State, RoundKey); Последняя итерация несколько отличается от всех остальных: FinalRound (State, RoundKey) { ByteSub(State); ShiftRow( State); AddRoundKey(State, RoundKey); Отдельные преобразования описываются ниже. ByteSub Это блок нелинейной обратимой байтовой замены (S-бокс), состоящий из двух операций: 1. Каждый байт заменяется на мультипликативный обрат- ный к нему в поле GF(2X). Байт со значением '00'h ото- бражается в себя. 2. Над каждым байтом выполняется аффинное преобразо- вание в поле GF(2), задаваемое следующим уравнением:
У(} У\ У2 Уз У4 У5 Уб Ут _ = 1 0 0 0 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 1 111110 0 0 0 111110 0 0 0 111110 0 0 0 1 1 1 1 1 хп Х( х2 х3 х4 *5 х6 х7 + 1 1 0 0 0 1 1 0 Это аффинное преобразование может быть описано в полиноми- альном виде как h(x) = (х7 + х' + х2 + х) + а(х)( х1 + хй + х5 + х4 +1) mod(xs +1). Полином, на который производится умножение, выбран взаимно простым с модулем, так что умножение является обратимым. Обратным к ByteSub будет преобразование, состоящее из об- ратного аффинного преобразования и взятия мультипликативного обратного в GF(2S). ShiftRow Это преобразование является циклическим сдвигом влево строк массива состояния на различную величину. Строка 0 не сдвигается, строка 1 сдвигается на С1 позиций, строка 2 - на С2 и строка 3 - на СЗ позиций. Величины сдвига приведены в таблице: Nb Cl С2 СЗ 4 1 2 3 6 1 2 3 8 1 3 4 Обратным преобразованием будет циклический сдвиг строк массива вправо на то же количество позиции. MixColumn В этом преобразовании столбцы массива состояния рассмат- риваются как полиномы над полем GF(2X). Преобразование заключается в умножении столбца по модулю х4 +1 на фиксиро- ванный полином с(х) = 'ОЗЬ'х3 + 'Olh'x2 + 'Olh'x + '02h'. Этот полином является взаимно простым с х4 +1 и поэтому ум- ножение обратимо. В матричной форме данное преобразование можно представить как
Ь(\ й! л2 л3 02 03 01 01 02 03 01 01 02 03 01 01 01 01 03 02 а0 (7[ а3 Обратное преобразование представляет собой умножение на полином, мультипликативно обратный кс(х) по модулю х4 +1: d(x) = 'OBh'x3 + 'ODh'x2 + '09h'x + 'OEh'. AddRoundKey Добавление ключа итерации осуществляется простым побито- вым сложением по модулю 2 каждого байта массива состояния с соответствующим байтом массива ключа. Это преобразование является обратным самому себе. Алгоритм обработки ключа. Ключи итерации получаются из ключа шифрования с помо- щью Алгоритма обработки ключа, состоящего из двух компо- нентов - расширения ключа и выбора ключа итерации. Основные принципы его построения следующие: • Общее число бит ключей итерации равно длине блока, ум- ноженной на количество итераций плюс один. (Например, для блока 128 бит и 10 итераций потребуется 1408 бит ключей итерации). • Ключ шифрования расширяется до расширенного ключа. • Ключи итерации берутся из расширенного ключа следую- щим образом: первый ключ итерации состоит из первых Nb слов, второй - из следующих Nb слов и т.д. Алгоритм расширения ключа Расширенный ключ представляет собой линейный массив 4- байтовых слов и обозначается как W[Nb * (Nr + 1)]. Функция расширения ключа зависит от Nk. Существует две версии - для Nk < 6 и для Nk > 6. KeyExpansion(byte Key[4*Nk], word W[Nb*(Nr+l)]) { for(i = 0; i < Nk; i++) W[i] = (Key[4*i],Key[4*i+l],Key[4*i+2],Key[4*i+3]); for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if (i %Nk==0)
temp = SubByte(RotByte(temp)) л Rcon[i / Nk]; W[i] = W[i - Nk] л temp; } } Здесь SubByte(W) - функция, возвращающая слово, в котором каждый байт является результатом применения блока замены шифра к байту, находящемуся на соответствующей позиции во входном слове. Функция RotByte(W) - циклический сдвиг байтов в слове, так что входное слово (a, h, с, d) преобразуется в слово (/?, с, d, а). Для Nk > 6 алгоритм выглядит так: KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+l)]) { for(i = 0; i < Nk; i++) W[i] = (key[4*i],key[4*i+l],key[4*i+2],key[4*i+3]); for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if(i%Nk = 0) temp = SubByte(RotByte(temp)) Л Rcon[i / Nk]; else if (i % Nk == 4) temp = SubByte(temp); W[i] = W[i - Nk] л temp; } } Константы итерации Rcon не зависят от Nk и определяются как Rconfz] = (RC[z], '00', '00', '00'), где RC[z] являются представлениями элементов поля GF(2X) со значениями х ', т.е. RC[1] = 1 (т.е. '0Г), и RC[z] = х (т.е. 'O2')RC[z -1]. Выбор ключа итерации Ключ итерации с номером z задается словами из буфера рас- ширенного ключа, начиная с W[Nb * z] и до W[Nb * (z + 1)]. Итак, процесс шифрования состоит из трех этапов: • начального добавления подключа; • Nr - 1 итераций; • конечной итерации. На псевдокоде это выглядит следующим образом: Rijndael(State,CipherKey) {
KeyExpansion(CipherKey,ExpandedKey) ; AddRoundKey(State,ExpandedKey); For( i=l ; i<Nr ; i++ ) Round(State,ExpandedKey + Nb*i) ; FinalRound(State,ExpandedKey + Nb*Nr); }• 2.4.3. Алгоритм RC6 В качестве одного из кандидатов фирмой RSA Data Security, Inc. был представлен алгоритм RC6 прошедший второй тур отбора. В нем предусматривается использование четырех рабо- чих регистров, а также введена операция целочисленного умно- жения, позволяющая существенно увеличить возмущения, вно- симые каждым циклом шифрования, что приводит к увеличению стойкости и/или возможности сократить число циклов. RC6 является полностью параметризованным алгоритмом шифрования. Конкретная версия RC6 обозначается как RC6- w/r/h, где и’ обозначает длину слова в битах, г - ненулевое количество итерационных циклов шифрования, ah - длину ключа в байтах. Во всех вариантах RC6-u7/7A работает с четырьмя побитовыми словами, используя шесть базовых операций, обозначаемых следующим образом: а + Ь — целочисленное сложение по модулю 2"; а - Ь — целочисленное вычитание по модулю 2"; а © h - побитовое "исключающее ИЛИ" побитовых слов; а х Ь - целочисленное умножение по модулю 2"; а « h - циклический сдвиг побитового слова влево на вели- чину, заданную login’ младшими битами /?; а» h - циклический сдвиг побитового слова вправо на вели- чину, заданную lo&w младшими битами /?; Шифрование при помощи RC6-w/r//? описывается следующим образом: Вход: Исходный текст, записанный в 4 побитовых входны регистрах Л, В, С, D\ Число циклов шифрования г; Ключевая таблица .S'[0; ... 2г + 3] побитовых слов. Выход: Шифрованный текст в регистрах Л, В, С, D. Процедура: В = В + S[0] £) = £) + 5[1]
for z = 1 to r do { t = (B x (2B + 1)) « log2 w и = (D x (2D + 1)) « log2 w A = ((A © /) « u) + 5[2z] C = ((C®u)«t) + S[2i + 1] (Л; B„ C; D) = (В; C; D; A) /1-/11 S[2r + 2] C = C + S[2r + 3] Расшифрование в этих обозначениях выглядит очень похоже: Вход: Шифрованный текст, записанный в 4 w-битовых вхо; ных регистрах А, В, С, D; Число циклов шифрования г; Ключевая таблица S[0; ... 2г + 3] w-битовых слов. Выход: Исходный текст в регистрах А, В, С, D. Процедура: C = C-S[2r + 3] А = А - ,5'[2л + 2] for i = г downto 1 do { (A; B„ C; D) = (D; A; B„ C) u = (Dx (2D + 1)) « log2 w t = (B x (2B + 1)) « log2 w C = ((C-S[2i + l])»/)®u A = ((A - 5[2z]) » zz) © t £> = £>-S[l] 5 = 5-5[0] Алгоритм вычисления ключей для RC6-w/r/b выглядит сле- дующим образом: Пользователь задает ключ длиной b байтов. Достаточное чис- ло ненулевых байтов дописываются в конец, чтобы получилось целое число слов. Затем эти байты записываются начиная с младшего в массив из с слов, т.е. первый байт ключа записывает- ся в £[0], и т.д., a L[c - 1] при необходимости дополняется со стороны старших разрядов нулевыми байтами. В результате работы алгоритма генерации ключей будет вычислено 2г + 4 слов, которые будут записаны в массиве S[0; ...; 2г + 3].
Константы Р32 = В7Е15163И and O32 = 9E3779B9h - это кон- станты, получаемые из двоичного представления е —2, где е - основание натуральных логарифмов, и ф - 1, где ф - золотое сечение, соответственно. Подобные же константы могут быть аналогичным образом получены и для RC6 с другим размером слова. Выбор констант является в некотором роде произвольным, и поэтому можно использовать и другие константы, получая при этом "частные" версии алгоритма. Вход: Определенный пользователем /?-байтовый ключ, пре; варительно загруженный в массив ДО;...с - 1]; Число циклов шифрования г. Выход: Ключевая таблица ДО;.. .2г +4] из w-битовых слов. Процедура: Д0]=Д, for i = 1 to 2r + 3 do Д/]=Д/-1] + е№. A = В = z = j = 0 v = 3 x max{c, 2r + 4} for s = 1 to v do { A = 5[z] =(5[z] \ Л \ B) «3 В = L[f] = (L\j] + A + В) «(A+B) i = (i + 1) mod (2r + 4) j = (/+!) mod c Структура шифра RC6 является обобщением сети Фейстела. Блок текста разбивается не на 2, а на 4 подблока, и на каждой итерации изменяются 2 подблока из четырех. При этом в конце итерации шифрования производится циклический сдвиг подбло- ков влево (при расшифровании, соответственно, вправо). Однако, такое обобщение привело к тому, что было утеряно свойство инвариантности блоков шифрования и расшифрования, хотя это и не является определяющим в оценке данного алгоритма. 2.4.4. Российский стандарт шифрования ГОСТ 28147-89 В Российской Федерации установлен единый стандарт крип- тографического преобразования текста для информационных систем. Он рекомендован к использованию для защиты любых данных, представленных в виде двоичного кода, хотя не исклю- чаются и другие методы шифрования. Данный стандарт форми-
ровался с учетом мирового опыта и, в частности, были приняты во внимание недостатки и нереализованные возможности алго- ритма DES, поэтому использование стандарта ГОСТ предпочти- тельнее. Данный алгоритм также построен с использованием сети Фей- стела. Рис 2.4. Алгоритм шифрования ГОСТ 28147-89. Режим простой замены. Введем ассоциативную операцию конкатенации, используя для нее мультипликативную запись. Кроме того будем использо- вать следующие операции сложения: А © В - побитовое сложение по модулю 2; А [+] В - сложение по модулю 2j2; А {+} В - сложение по модулю 232-!;. Алгоритм криптографического преобразования предусматри- вает несколько режимов работы. Во всех режимах используется ключ W длиной 256 бит, представляемый в виде восьми 32- разрядных чисел X(z). W = Х(7)Х(6)Х(5)Х(4)Х(3)Х(2)Х(1)Х(0)
Для расшифрования используется тот же ключ, но процесс расшифрования является инверсным по отношению к исходному. Базовым режимом работы алгоритма является режим простой замены. Пусть открытые блоки разбиты на блоки по 64 бит в каждом, которые обозначим как То. Очередная последовательность бит Го разделяется на две по- следовательности 5(0) и А(0) по 32 бита (левый и правый блоки). Далее выполняется итеративный процесс шифрования, описы- ваемый следующими формулами: для z = 1-5-24 |Л(/) = RK(A(i - 1) [+] ® 5(/ -1) _ |5(z) = A(i -1) для z = 25-ьЗ 1 A(i) = RK(A(i -1) [+] У(32 Ч)) ® 5(/ -1) _ 5(z) = A(i -1) и для z = 32 р(32) = 4(31) [5(32) = RK(А(31) [+] ) ® 5(31) Здесь z обозначает номер итерации. Заметим, что подобно DES, на последнем цикле перестановка половин блока не произ- водится. Функция шифрования включает две операции над 32- разрядным аргументом -К() и 5(). Первая операция является подстановкой. Блок подстановки К состоит из 8 узлов замены с памятью по 64 бита каж- дый. Поступающий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идущих 4-разрядных вектора, каждый из который преобразуется в 4-разрядный вектор соответ- ствующим узлом замены, представляющим из себя таблицу из 16 целых чисел в диапазоне 0...15. Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем полученные 4-разрядные векторы вновь последовательно объединяются в 32-разрядный выходной. Вторая операция - циклический сдвиг 32-разрядного вектора, полученного в результате подстановки К на 11 шагов влево.
64-разрядный блок зашифрованных данных Тш представляется в виде ТШ = Л(32)7?(32). Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично. Следует учитывать, что данный режим шифрования рекомен- дуется использовать только для шифрования ключевой информа- ции. Для шифрования данных следует использовать два других режима. Второй режим шифрования называется режимом гаммирова- ния. Открытые данные, разбитые на 64-разрядные блоки где m определяется объемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатыва- ется блоками по 64 бита, т.е. гш=(С,к,г^). Уравнение шифрования данных в режиме гаммирования мо- жет быть представлено в следующем виде: =A(Yi [+] С2, Z; _, {+} С,) Ф . В этом уравнении обозначает 64-разрядный блок зашиф- рованного текста, А - функцию шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа). С\ = 01010104h и С2 = 0101010lh - константы, заданные в ГОСТ 28147-89. Величины У, и Z, определяются итерационно по мере формирования гаммы следующим образом: (Уо, Z«) = . l(.S'), где .S' - 64-разрядная двоичная последователь- ность; (У, Z,) = (У, ! [+] С2, Z ! {+} Q), i = 1, 2, ..., m. 64-разрядная последовательность S, называемая синхропосыл- кой, не является секретным элементом шифра, но ее наличие необходимо как на передающей стороне, так и на приемной.
Режим гаммирования с обратной связью очень похож на ре- жим гаммирования. Как и в последнем, разбитые на 64-разрядные блоки открытые данные зашифровываются путем поразряд- ного сложения по модулю 2 с гаммой шифра Гш, которая выраба- тывается блоками по 64 бита: ГШ=(Г^,К,Г^). Уравнения шифрования данных в режиме гаммирования с об- ратной связью выглядят следующим образом: = A(S) ® = Гщ} Ф 7q^ , = А(Т^~1)) Ф Т(£ Ф . 2.4.5. Алгоритмы SAFER®, SAFER++ Алгоритм SAFER+ был предложен калифорнийской корпора- цией Cylink совместно с Армянской академией наук как один из кандидатов на принятие в качестве нового стандарта шифрования AES и прошел первый тур отбора. Он является еще одним при- мером шифра, не использующего структуру сети Фейстела. Шифр работает с блоками длиной 128 бит и с ключами длиной 128, 192 или 256 бит, в соответствии с требованиями NIST к новому стандарту. Процедуры шифрования и расшифрования представляют собой последовательность итераций, число кото- рых зависит от длины ключа и равно 8, 12 и 16 соответственно. При шифровании после (а при расшифровании - перед) всех итераций производится еще одно подмешивание подключа. Каждая итерация состоит из четырех слоев - подмешивания первого подключа, нелинейной обратимой замены, подмешива- ния второго подключа и линейного перемешивания. При этом используются только байтовые операции, что делает этот шифр особенно привлекательным для реализации на микропроцессорах малой разрядности. Слои подмешивания первого и второго подключа имеют сход- ную структуру. На z-й итерации используются два подключа K2,.i и К2, длиной по 128 бит. При добавлении первого подключа байты 1, 4, 5, 8, 9, 12, 13 и 16 текстового блока складываются с соответствующими байтами подключа поразрядно по модулю2, а байты 2, 3, 6, 7, 10, 11, 14 и 15 складываются с байтами подключа
по модулю 256. Второй подключ в конце итерации добавляется аналогично, только те байты, которые складывались поразрядно, теперь складываются по модулю 256, и наоборот. Слой нелинейной замены устроен следующим образом. Значе- ние х байта j преобразуется в 45’ (mod 257) для байтов с номера- ми j - 1,4, 5, 8, 9, 12, 13 и 16. При этом если х - 128, то 45128 (mod 257) = 256 представляется нулем. Значения байтов с номерами j = 2, 3, 6, 7, 10, 11, 14 и 15 преобразуются в log45(x), при этом если х - 0, то log4s(0) представляется числом 128. Нетрудно заметить, что эти операции являются обратимыми (в действительности, они обратны друг другу). Производить вычисления экспонент и логарифмов при шифровании и расшифровании не обязательно- можно заранее вычислить таблицы замены (всего для их хране- ния потребуется 512 байтов) и использовать их при работе. Линейное перемешивание представляет собой умножение тек- стового блока справа на специальную невырожденную матрицу М. При этом все операции выполняются побайтно по модулю 256. Подмешивание подключа K2,+i производится так же, как и подмешивание первого подключа в каждой итерации. При расшифровании вначале подмешивается подключ K2,+i, при этом операция сложения по модулю 256 заменяется на вычи- тание. Затем выполняются итерации расшифрования. z-я итерация расшифрования выполняет преобразование, об- ратное к r-z+1-й итерации шифрования (г - число итераций) и также содержит 4 слоя. Вначале текстовый блок умножается на матрицу М 1, обратную к матрице шифрования. Затем подмешивается подключ К2,..2,+2, так же, как и второй подключ в итерации шифрования, только сложение с ключом по модулю 256 заменяется вычитанием. После этого производится обратная нелинейная замена, т.е. те байты, которые при шифровании возводились в степень, лога- рифмируются, и наоборот. И, наконец, подмешивается подключ K2r.2,+i (с учетом тех же замечаний, что относились к подмешиванию подключа К2,..2,+2). Для завершения описания алгоритма осталось указать, как из ключа пользователя получаются подключи для итераций.
м = 221 1 16 82142421 144 1111842121421122 1 144214242 16 8221 1 1122212142841111 44214242 16 81 1 1 122 2221214284111111 1 14242 16 82122441 1 1121428421112211 21 16 8112211444242 2184111111224221 4242441 1221 1 16 821 2142221111118421 42221 1441 14221 16 8 4211112211212184 16 811221144214242 8411111122212142 При обработке ключа пользователя применяются так называе- мые слова смещения В2, В2, В22 длиной по 16 байт, которые вычисляются по формулам: _|45(45l7'+/mod257) mocj 257, z = 2К 17 [4517/+7 mod257,z = 18K 33 где B,i —/-й байт z-ro слова смещения (j = 1... 16). При этом значе- ние B,j—256 представляется нулем. Слова смещения являются константами и могут быть вычислены заранее. Для длины ключа в 128 бит используются только слова В2, ... В{2, для ключа в 192 бита используются слова смещения В2,...,В2$, а для ключа в 256 бит используются все слова. Генерация подключей осуществляется по следующему алго- ритму: В качестве первого подключа используются первые шестна- дцать байтов пользовательского ключа. Далее пользовательский ключ записывается в ключевой регистр размером на один байт больше длины ключа. После этого все байты ключа суммируются
поразрядно по модулю 2 и результат записывается в дополни- тельный байт регистра. После чего для получения требуемых подключей повторяется итеративная процедура, заключающаяся в следующем: ’2-21-21-14-82-41-11-21-1 -4 4 -2 4 -2 2 -8 16 -2 4 -1 1 -1 2 -1 1 1-21-12-41-11-11-22-24-8 -2 4 -2 2 -2 4 -1 1 -1 1 -1 2 -4 4 -8 16 1-12-41-11-21-21-14-82-2 -1 1 -2 4 -1 1 -1 2 -2 4 -2 2 -8 16 -4 4 2-41-11-21-12-24-81-11-2 -2 4 -1 1 -1 2 -1 1 -4 4 -8 16 -2 2 -2 4 М = 1-11-21-12-44-82-21-21-1 -1 1 -1 2 -1 1 -2 4 -8 16 -4 4 -2 4 -2 2 1-21-14-82-21-11-21-12-4 -1 2 -1 1 -8 16 -4 4 -2 2 -2 4 -1 1 -2 4 4-82-21-21-11-21-12-41-1 -8 16 -4 4 -2 4 -2 2 -1 2 -1 1 -2 4 -1 1 1-14-82-21-21-12-41-11-2 -2 2 -8 16 -4 4 -2 4 -1 1 -2 4 -1 1 -1 2 1. Содержимое каждого байта в регистре циклически сдви- гается влево на 3 позиции; 2. Производится выборка 16 байт из регистра. При этом для получения подключа К, выбираются идущие подряд байты регистра, начиная с z-ro и далее по циклу; 3. Выбранные байты складываются с соответствующими байтами слова смещения 5, по модулю 256. Результат сложения и является подключом К,. Алгоритм SAFER++ является дальнейшим развитием алго- ритма SAFER+ и был представлен на европейский конкурс алго- ритмов NESSIE. Этот алгоритм работает с блоками длиной 128 бит, но предусмотрен режим "обратной совместимости" для блоков 64 бита. Длина ключа может быть 128 или 256 бит. Основная структура алгоритма осталась без изменений. Коли- чество итераций равно 7 или 10 в зависимости от длины ключа.
Структура итераций в целом тоже осталась прежней. Итерация зашифрования состоит из слоя подмешивания подключа, слоя нелинейной замены, еще одного слоя подмешивания подключа и линейного обратимого преобразования. Основное отличие алго- ритма заключается в структуре линейного преобразования, кото- рое сделано более эффективным с вычислительной точки зрения. Рассмотрим его более подробно. Вначале производится предварительная перестановка байтов в соответствии с перестановкой [9, 6, 3, 16, I, 14, 11, 8, 5, 2, 15, 12, 13, 10, 7, 4]. Затем байты группируются по 4 и к каждой четверке применяется 4-точечное псевдопреобразование Адамара. После этого производится еще одна такая же перестановка, и еще раз применяется псевдопреобразование Адамара. 4-точечное псевдопреобразование Адамара задается невырож- денной матрицей, имеющей обратную: 2 111 1 0 0-1 12 11 1 0 10-1 н4 = ,Н4Ч = 112 1 0 0 1-1 1111 -1 -1 -1 4 Замечательная особенность этого преобразования заключается в том, что умножение на матрицы может быть реализовано путем всего лишь шести операций сложения (вычитания). Если входные байты обозначить как a, b, с, d, а выходные как А, В, С, D, то вычисления будут проводиться по формулам: D = a + b + c + d(3 сложения), A = D + а (1 сложение), В = D + b (1 сложение), C = D + с (1 сложение), и обратно: а = А - <7(1 вычитание), h = В - d (1 вычитание), с = С- d(\ вычитание), d = D-a-b-c(3 вычитания). Алгоритм расширения ключа претерпел незначительные из- менения. Слова смещения Вх, B2r+i вычисляются по следую-
щим формулам (слово В\, как и в алгоритме SAFER+, не исполь- зуется, можно считать его равным 0): 45(45|7,+ / mod257) mod257, / = 2К 15,./ = 1К 16 4517/+7' mod 257, i = 16К 21,./ = IK 16 Процедура генерации подключей итераций проводится от- дельно для подключей с четными и нечетными номерами. Для генерации подключей с нечетными номерами берутся первые 16 байт пользовательского ключа. Для генерации подключей с четными номерами берутся вновь первые 16 байт пользователь- ского ключа, если используется ключ 128 бит, либо оставшиеся 16 байт, если используется ключ 256 бит. Далее вычисляется байтовая контрольная сумма выбранных 16 байт, которая добав- ляется к ним справа. Затем из полученного расширенного ключа происходит выборка 16 байт подключа итерации с заданным номером. Выборка происходит следующим образом. Для получе- ния подключа Ki берутся 16 байт, начиная с 1, для подключа К-, - 16 байт, начиная с 3, и т.д. по циклу. Выбранные байты склады- ваются с байтами соответствующего слова смещения. После чего каждый байт расширенного ключа циклически сдвигается на 6 бит влево для нечетных подключей и на 3 бита для четных под- ключей. Процедура повторяется до получения всех требуемых подключей итерации. 2.5. Режимы применения блочных шифров Для шифрования исходного текста произвольной длины блоч- ные шифры могут быть использованы в нескольких режимах Мы рассмотрим четыре режима применения блочных шифров, наи- более часто встречающиеся в системах криптографической защи- ты информации, а именно режимы электронной кодированной книги (ЕСВ - Electronic Code Book), сцепления блоков шифрован- ного текста (СВС - Cipher Block Chaining), обратной связи но шифрованному тексту (CFB - Cipher Feedback) и обратной связи но выходу (OFB - Output Feedback). В режиме электронной кодированной книги каждый блок ис- ходного текста шифруется блочным шифром независимо от других (см. Рис. 2.5).
Стойкость режима ЕСВ равна стойкости самого шифра. Одна- ко, структура исходного текста при этом не скрывается. Каждый одинаковый блок исходного текста приводит к появлению одина- кового блока шифрованного текста. Исходным текстом можно легко манипулировать путем удаления, повторения или переста- новки блоков. Скорость шифрования равна скорости блочного шифра. Режим ЕСВ допускает простое распараллеливание для увели- чения скорости шифрования. К несчастью, никакая обработка невозможна до поступления блока (за исключением генерации ключей). Заметим, что режим ЕСВ соответствует режиму простой замены ГОСТ. В режиме сцепления блоков шифрованного текста (СВС) ка- ждый блок исходного текста складывается поразрядно по модулю 2 с предыдущим блоком шифрованного текста, а затем шифрует- ся (см. Рис 2.6). Для начала процесса шифрования используется синхропосылка (или начальный вектор), которая передается в канал связи в открытом виде. Стойкость режима СВС равна стойкости блочного шифра, ле- жащего в его основе. Кроме того, структура исходного текста скрывается за счет сложения предыдущего блока шифрованного текста с очередным блоком открытого текста. Стойкость шифро- ванного текста увеличивается, поскольку становится невозмож- ной прямая манипуляция исходным текстом, кроме как путем удаления блоков из начала или конца шифрованного текста. с, = EA(m,); = D^c,) Рис. 2.5. Режим электронной кодировочной книги. Скорость шифрования равна скорости работы блочного шиф- ра, но простого способа распараллеливания процесса шифрова- 42
ния не существует, хотя расшифрование может проводиться параллельно. т,_ 1 т. Cj_\ с. с, = Ек(т/ © c,_i); /и, =D^(c,) © c,_i Рис. 2.6. Режим сцепления блоков шифрованного текста. Одной из потенциальных проблем режима СВС является воз- можность внесения контролируемых изменений в последующий расшифрованный блок исходного текста. Например, если зло- умышленник изменит один бит в блоке, то весь блок будет рас- шифрован неверно, но в следующем блоке появится ошибка в соответствующей позиции. Есть ситуации, когда такое нежела- тельно. Для борьбы с этой угрозой исходный текст должен со- держать определенную избыточность. Известны модификации режима СВС. Рассмотрим некоторые из них. Режим сцепления блоков шифрованного текста с распро- странением (РСВС - Propagating СВС) отличается тем, что по модулю 2 складывается как предыдущий блок шифрованного, так и исходного текста: с, = Еф/и, © с, 1 © /и, j), = с, 1 © i © D*(c,). Режим сцепления блоков шифрованного текста с контрольной суммой (СВСС -СВС with Checksum) отличается тем, что к по- следнему блоку исходного текста перед шифрованием прибавля- ется сумма по модулю два всех предыдущих блоков исходного текста. Это дает возможность проконтролировать целостность передаваемого текста с небольшими дополнительными наклад- ными расходами. В режиме обратной связи по шифрованному тексту (CFB) предыдущий блок шифрованного текста шифруется еще раз, и
для получения очередного блока шифрованного текста результат складывается поразрядно по модулю 2 с блоком исходного тек- ста. Для начала процесса шифрования также используется на- чальный вектор (см. Рис 2.7). т, । т, с, =/и, © ЕДс,_i); т, = ) © т, Рис. 2.7. Режим обратной связи по шифрованному тексту. Стойкость режима CFB равна стойкости блочного шифра, ле- жащего в его основе и структура исходного текста скрывается за счет использования операции сложения по модулю 2. Манипули- рование исходным текстом путем удаления блоков из начала или конца шифрованного текста становится невозможным. В режиме CFB если два блока шифрованного текста идентичны, то резуль- таты их шифрования на следующем шаге также будут идентич- ны, что создает возможность утечки информации об исходном тексте. Скорость шифрования равна скорости работы блочного шифра и простого способа распараллеливания процесса шифрования также не существует. Этот режим в точности соответствует режиму гаммирования с обратной связью алгоритма ГОСТ 28147. Режим обратной связи по выходу (OFB) подобен режиму CFB за исключением того, что величины, складываемые по модулю 2 с блоками исходного текста, генерируются независимо от исход- ного или шифрованного текста. Для начала процесса шифрования также используется начальный вектор. Режим OFB обладает преимуществом перед режимом CFB в том смысле, что любые битовые ошибки, возникшие в процессе передачи, не влияют на расшифрование последующих блоков. Однако, возможна простая манипуляция исходным текстом путем изменения шифрованного текста. Существует модификация этого режима под названием
режим обратной связи по выходу с нелинейной функцией (OFBNLF - OFB with a NonLinear Function). В этом случае на каждом шаге меняется также и ключ шифрования: с;- = = Ek(ki_iy, Pi =Dki(ci\ki = Ek(ki-\)- mj_ I trij Cj = /77/ © x,; m, =C[ © x,; Sj = E^s'/j) Рис. 2.8. Режим обратной связи по выходу. Хотя в этом случае простого способа распараллеливания про- цесса шифрования также не существует, время можно сэконо- мить, выработав ключевую последовательность заранее. В некоторых рассмотренных выше режимах шифрование бло- ка зависит от шифрования предыдущего блока. Например, пред- ставим аппаратное устройство шифрования, работающее в режи- ме СВС. Даже если там будут три микросхемы, осуществляющие шифрование, только одна сможет работать в данный момент времени. Следующей микросхеме понадобится результат работы предыдущей. Решение заключается в перемежении нескольких потоков шифрования. Вместо одного потока в режиме СВС можно использовать четыре. Первый, пятый и далее каждый четвертый блоки будут шифроваться на одной микросхеме с одной синхропосылкой. Второй, шестой и далее каждый четвер- тый блок будут обрабатываться второй микросхемой со второй синхропосылкой и т. д. Таким образом, например, имея три микросхемы, осуществляющие шифрование со скоростью 33 Мбит/с, можно шифровать трафик в канале со скоростью I00 Мбит/с.
2.6. Потоковые шифры 2.6.1. Общие сведения о потоковых шифрах. Потоковые шифры представляют собой разновидность гамми- рования и преобразуют открытый текст в шифрованный последо- вательно по 1 биту. Генератор ключевой последовательности, иногда называемый генератором бегущего ключа, выдает после- довательность бит /<ь кг, ..., к, ... Эта ключевая последователь- ность складывается по модулю 2 с последовательностью бит исходного текста р\, рг, ..., р„ ... для получения шифрованного текста: с, =р, © к. На приемной стороне шифрованный текст складывается по моду- лю 2 с идентичной ключевой последовательностью для получе- ния исходного текста: с, © к =Pi © к © к =р,- Стойкость системы целиком зависит от внутренней структуры генератора ключевой последовательности. Если генератор выдает последовательность с небольшим периодом, то стойкость систе- мы будет невелика. Напротив, если генератор будет выдавать бесконечную последовательность истинно случайных (не псевдо- случайных!) бит, то мы получим одноразовый блокнот с идеаль- ной стойкостью. Реальная стойкость потоковых шифров лежит где-то посреди- не между стойкостью простой моноалфавитной подстановки и одноразового блокнота. Генератор ключевой последовательности выдает поток битов, который выглядит случайным, но в действи- тельности является детерминированным и может быть в точности воспроизведен на приемной стороне. Чем больше генерируемый поток похож на случайный, тем больше усилий потребуется от криптоаналитика для взлома шифра. Однако, если каждый раз при включении генератор будет вы- давать одну и ту же последовательность, то взлом криптосистемы будет тривиальной задачей. Перехватив два шифрованных текста, злоумышленник может сложить их по модулю 2 и получить два исходных текста, сложенных также по модулю 2. Такую систему раскрыть очень просто. Если же в руках противника окажется
пара исходный текст - шифрованный текст, задача вообще стано- вится тривиальной. По этой причине все потоковые шифры предусматривают ис- пользование ключа. Выход генератора ключевой последователь- ности зависит от этого ключа. В этом случае простой криптоана- лиз будет невозможен. Потоковые шифры наиболее пригодны для шифрования не- прерывных потоков данных, например, в сетях передачи данных. Структуру генератора ключевой последовательности можно представить в виде конечного автомата с памятью, состоящего из трех блоков: блока памяти, хранящего информацию о состоянии генератора, выходной функции, генерирующей бит ключевой последовательности в зависимости от состояния, и функции переходов, задающей новое состояние, в которое перейдет гене- ратор на следующем шаге. 2.6.2. Самосинхронизирующиеся шифры В 1946 году в США была запатентована базовая идея так на- зываемых самосинхронизируютихся потоковых шифров (или шифрования с автоключом - CipherText Auto Key (СТАК)). Она заключается в том, что внутреннее состояние генератора является функцией фиксированного числа предшествующих битов шиф- рованного текста. Поскольку внутреннее состояние зависит только от п бит шифрованного текста, генератор на приемной стороне войдет в синхронизм с передающей стороной после получения п бит. Реализация этого подхода выглядит следующим образом. Ка- ждое сообщение предваряется случайным заголовком длиной п бит. Этот заголовок шифруется и передается в линию. На прием- ной стороне заголовок расшифровывается. Результат расшифро- вания будет неверным, но после обработки п бит заголовка оба генератора будут синхронизированы. Недостатком системы является распространение ошибок. При искажении одного бита генератор на приемной стороне выдаст п неверных бит ключевой последовательности, пока ошибочный бит не будет вытолкнут из памяти, что приведет к ошибочному расшифрованию п бит исходного текста. Кроме того, самосинхронизирующиеся шифры уязвимы для атак типа "воспроизведение". Злоумышленник записывает неко- 47
торое количество бит шифрованного текста. Затем, позднее, он подменяет биты трафика записанными - "воспроизводит" их. После некоторого количества "мусора", пока приемная сторона не синхронизируется, старый шифрованный текст будет расшиф- ровываться нормально. У приемной стороны нет никаких средств определения того, что принимаемые данные не являются акту- альными. Самосинхронизирующиеся потоковые шифры могут быть реа- лизованы в виде блочных шифров, используемых в режиме обратной связи по шифрованному тексту (см. 2.5). При этом за один раз может шифроваться произвольное число бит, меньшее либо равное длине блока. Проиллюстрируем это на примере шифрования по одному байту за цикл. Блочный шифр работает над очередью размером, равным дли- не блока. Первоначально очередь заполняется синхропосылкой. Затем очередь шифруется и левые 8 бит складываются с первыми 8 битами исходного текста. Полученные 8 бит шифрованного текста передаются в линию, очередь сдвигается влево на 8 бит, левые биты отбрасываются, а правые заполняются 8 битами шифрованного текста, переданными в линию. Далее процедура повторяется. Число 8 взято только для примера. За один цикл работы блочного алгоритма может шифроваться и 1 бит, хотя это будет не слишком эффективно с точки зрения скорости работы схемы. В режиме CFB синхропосылка должна быть уникальна для каждого сообщения в течение срока действия ключа. Если это будет не так, злоумышленник сможет восстановить исходный текст. В случае возникновения ошибки в шифрованном тексте на приемной стороне в общем случае возникнут ошибки при рас- шифровании текущего и последующих |_WhJ блоков, где т - размер блока, и - число бит, шифруемых за 1 цикл, т.е. пока ошибочный бит шифрованного текста не будет вытеснен из памяти. 2.6.3. Синхронные шифры В этом случае выходные значения генератора не зависят от исходного или шифрованного текстов. Такие потоковые шифры носят название синхронных.
Основная сложность в данном подходе заключается в необхо- димости синхронизации генераторов ключа на передающей и приемной сторонах. Если в процессе передачи произошло выпа- дение или вставка хотя бы одного бита, то вся последователь- ность битов шифрованного текста после ошибочного бита не сможет быть расшифрована. Если такое произойдет, стороны должны провести повторную синхронизацию. При этом синхро- низация должна быть проведена так, чтобы никакой отрезок ключевой последовательности не повторился, так что очевидное решение возвратиться к некоторому предыдущему состоянию генератора не подходит. Е1оложительным свойством синхронных потоковых шифров является отсутствие эффекта распространения ошибок. Один искаженный бит при передаче приведет к искажению только одного бита текста при расшифровании. Синхронные шифры также защищают от вставок и выбрасы- ваний отрезков шифрованного текста из потока. Такие операции приведут к нарушению синхронизации, что будет сразу же обна- ружено на приемной стороне. Однако, такие шифры уязвимы к изменению отдельных бит. Если злоумышленник знает исходный текст, то он сможет изме- нять биты в потоке шифрованного текста таким образом, что он будет расшифровываться так, как необходимо злоумышленнику. Синхронный потоковый шифр может быть реализован в виде блочного шифра, работающего в режиме обратной связи по выходу (см. 2.5). Е1одобно описанному в п. 2.6.2 примеру, режим OFB может быть реализован с любым размером обратной связи, меньшим размера блока. Однако, данный способ не рекомендует- ся, так как при этом снижается период генератора до примерно 2” 2. Е1ри длине блока 64 это будет около 232, чего явно недоста- точно. В этом случае выходная функция очень часто выбирается про- стой, например, суммой по модулю 2 нескольких бит состояния или вообще одним битом состояния. Криптографическая стой- кость обеспечивается функцией перехода к следующему состоя- нию, которая зависит от ключа. Иногда данный режим называют режимом с внутренней обратной связью, поскольку обратная связь является внутренней по отношению к алгоритму генерации ключевой последовательности.
Вариантом этого режима является схема, когда ключ задает начальное состояние генератора, после чего последний работает без дальнейшего вмешательства. Еще одним способом построения потокового шифра является использование счетчика в качестве входного значения для блоч- ного шифра. После каждого цикла шифрования блока значение счетчика увеличивается, чаще всего на единицу. Свойства данно- го режима в отношении распространения ошибок и синхрониза- ции будут такими же, как и для режима OFB. В качестве счетчика может быть использован любой генератор псевдослучайных чисел, вне зависимости от его криптографической стойкости. При использовании потокового шифра в режиме счетчика вы- бирается простая функция перехода и сложная, зависящая от ключа функция выхода. Функция перехода может быть простым счетчиком, увеличивающимся на единицу на каждом такте. 2.6.4. Примеры потоковых шифров 2.6.4.1. RC4 RC4 представляет собой потоковый шифр с переменной дли- ной ключа, разработанный в 1987 г. Роном Ривестом для компа- нии RSA Data Security, Inc. В течение 7 лет этот шифр лицензи- ровался компанией только на условиях неразглашения. Однако, в 1994 г. он был анонимно опубликован в Интернете и с тех пор стал доступен для независимого анализа. Описывается шифр очень просто. Алгоритм работает в режи- ме OFB. Ключевая последовательность не зависит от исходного текста. Структура алгоритма включает блок замены размерно- стью 8x8: 50, ..., $255- Блок замены представляет собой зависи- мую от ключа переменной длины перестановку чисел 0, ..., 255. Имеется два счетчика i и/, первоначально равные 0. Для генери- рования псевдослучайного байта выполняются следующие дейст- вия: z = (z + 1) mod 256 j = (j + 5,) mod 256 переставить 5,- и Sj t = (Si + Sj) mod 256 к = St.
Затем байт к складывается по модулю 2 с байтом исходного текста для получения шифрованного. Инициализация блока замены также проста. Вначале он за- полняется линейно: So = 0, Si = 1, ..., S255 - 255. Затем заполняется еще один 256-байтный массив ключом, при этом ключ может повторяться необходимое число раз для заполнения всего масси- ва: /го, ..., /<255- Счетчик j устанавливается в 0. После чего произво- дятся следующие действия: for i = 0 to 255 j = (j + к, + 5,) mod 256 переставить S, и Sr Шифрование по этому алгоритму примерно в 10 раз быстрее, чем шифрование DES при программной реализации. Возможно обобщение алгоритма на большие длину слова и размер блока замены. Так, можно построить шифр с боком заме- ны размерностью 16 х 16 (потребуется 128 Кбайт памяти) и длиной слова 16 бит. Этап инициализации будет значительно медленнее, необходим цикл до 65535, если мы хотим в точности следовать конструкции, но получившийся в результате алгоритм будет более быстрым. 2.6.4.2. SEAL SEAL (Software Encryption ALgorifhm) представляет собой приспособленный для программной реализации потоковый шифр, разработанный Филом Рогэвэем и Доном Копперсмитом из компании IBM. Алгоритм оптимизирован для 32-разрядных процессоров. Для эффективной работы ему требуются 8 32- разрядных регистров и кэш объемом несколько килобайт. Одним из замечательных свойств этого шифра является то, что он не является потоковым шифром в традиционном смысле, а представляет собой семейство псевдослучайных функций. 160- битовый ключ к и 32-битовое значение и (индекс) шифр преобра- зует в /.-битовую строку к(п). L может принимать любое значе- ние, меньшее 64 килобайт. Такой шифр мы будем обозначать SEAL(/r, и, к). Предполагается, что если к выбирается случайно, то к(п) будет вычислительно неотличима от случайной /.-битовой функции от и.
На практике это дает еще одно преимущество. Большинство шифров генерирует битовые последовательности в одном на- правлении. Зная ключ к и позицию i, определить значение /-го бита ключевой последовательности можно только вычислив все биты до z-ro один за другим. В случае семейства псевдослучай- ных функций мы получаем простой доступ к любому элементу ключевой последовательности. Это оказывается весьма полез- ным. Предположим, что необходимо зашифровать содержимое же- сткого диска компьютера по 512-байтным секторам. Тогда сектор с номером п будет шифроваться с помощью ключевой последова- тельности /фи). При этом легко может быть обеспечен доступ к произвольному сектору диска. Данный шифр также облегчает проблему синхронизации, свойственную традиционным потоковым шифрам. Сообщение с номером и будет шифроваться с ключевой последовательностью /фи), и и будет передаваться вместе с сообщением. Получателю не нужно будет хранить состояние генератора ключевой последова- тельности и беспокоиться о потерянных сообщениях и их влия- нии на процесс расшифрования. Алгоритм SEAL предусматривает использование трех завися- щих от ключа таблиц: R, S, и Т. Эти таблицы заполняются на предварительном этапе при помощи алгоритма, основанного на SHA (см. 4.3.1), и зависят только от ключа. Заполнение таблиц можно описать с помощью функции Ga(z), которая представляет собой функцию сжатия из алгоритма SHA. а — 160-битное значение, / - 32-битный индекс. Значение а ис- пользуется для инициализации внутренних регистров А, В, С, D, и Е в алгоритме SHA, а 512-битный блок для обработки пред- ставляет собой строку /||048<). Выходное значение функции G также имеет длину 512 бит. Построим теперь функцию Г с выходным значением длиной 32 бита, переиндексировав функцию G: ЕД/) = > гДе ДЛЯJ = Lz75J || H^+l || H52j+2 || //Д+31| h457+4 = Ga( j). Теперь опреде- лим: T[i]=Ta(i), 0 <z<512, 5[/] = ГДОхЮОО + j), 0 <j < 256, R[k] = 7Д0x2000 + к), 0 < к < 256.
Собственно алгоритм генерации ключевой последовательно- сти может быть описан на псевдокоде следующим образом: function SEAL(a; и; L) у = 0; for / = 0 to оо do Initialized; /; А; В', С; D; иц и2; и2; и4); for z = 1 to 64 do 1 P = A&0xlfc;B = B + T[P/4]; A= A»> 9; В = В ® A; 2 0 = 5&Ox7fc; C=C© T[Q/4]; В = В »> 9; C=C + B; 3 P = (P + C) & 0x7fc; D = D + 71/74]; С = C »> 9; D = D © C; 4 Q = (Q + £>) & 0x7fc; A = A © Д2/4]; D = D»> 9; A = A + D-, 5 Р = (Р + Л)&0х7Гс;5=5©Г[Р/4];Л=Л»>9; 6 0 = (0 + 5)&Ox7fc; C = C+ I\Q!4]-B=B>»9- 7 /’ = (/’ +Q&0x7fc; £) = £)© 71^/4]; C = C»> 9; 8 Q = (0 + £)) & 0x7fc; Л = Л + 7J0/4];£> = £>>» 9; 9 у =y || В + 5[4z - 4] || C + 5[4z - 3] || D + 5[4z - 2] || A + 5[4z -i]; 10 if |y| > L then return (у(1У1 ... yL j); 11 if odd(i) then (А; В; C; D) = (A + пу В + nyC © ny D® и2) else (А; В; C; D) = (A + пу, В + ny,C © ny D® и4); end; end; end. Алгоритм использует подпрограмму инициализации, которая, используя таблицы R и Т, устанавливает начальные значения внутренних переменных и регистров. procedure Initialized; /; А; В; С; D; пу, пу пу п4) А = п®В[41]; В = (п »> 8)©Я[4/+ 1]; C = d »> 16) ®A[4Z + 2]; £) = d >» 24)®A[4Z+3]; for j = 1 to 2 do P = A & 0x7fc; B = B+ T[P/4]; A=A»> 9; P = B& 0x7fc; C = C + 71/74]; В = В »> 9; P = C& 0x7fc; D = D+ T[P/4]-, C=C»> 9;
Р = D & 0x7fc; A = A + Д/74]; D = D»> 9; end; (щ; «2; «з; «4) = CD; В', A\ C); P = A & 0x7fc; B = B + T\P/A]-, A = A»> 9; P = £&0x7fc; C = C+ T[P/4];B=B»> 9; P = C & 0x7fc; D = D + T[PI4]\ C = C»> 9; P = D &. 0x7fc; A = A + 71/74]; £> = £>>» 9; end. Таблица T представляет собой блок замены размерностью 9 х 32. На каждом шаге 9 бит одного регистра (А, В, С или D) ис- пользуются как указатель в таблице Т. Значение, извлеченное из Т, складывается (арифметически или порязрядно по модулю 2) со следующим регистром (вновь А, В, С или D). Затем первый регистр циклически сдвигается на 9 позиций. На некоторых шагах второй регистр дополнительно модифицируется путем сложения по модулю 2 со сдвинутым первым регистром. После 8 шагов каждый регистр маскируется сложением по модулю 2 с некоторым значением из .S' и выдается в ключевую последова- тельность. Итерация завершается сложением регистров А и С с зависимыми от и значениями щ, п2, п2, и4. Какое конкретно значе- ние выбирается, зависит от четности номера итерации. Таким образом, основные идеи, лежащие в основе этого алгоритма, можно сформулировать следующим образом: 1. Использование большого секретного зависящего от клю- ча блока замены Т; 2. Перемежение операций, не коммутирующих друг с дру- гом (сложение и исключающее ИЛИ); 3. Использование внутреннего состояния, явно не прояв- ляющегося в потоке данных (значения и„ используемые в конце итерации для модификации регистров А и С); 4. Изменение шаговой функции в зависимости от номера шага и изменение итерационной функции в зависимости от номера итерации. 5. Использование известных и отработанных алгоритмов для заполнения таблиц. Шифр SEAL требует пять элементарных машинных операции в пересчете на один байт текста при шифровании и расшифрова- нии. Таким образом, он является одним из самых быстрых про- граммно реализуемых алгоритмов.
2.6.4.3. WAKE Алгоритм WAKE (от англ. Word Auto Key Encryption - шиф- рование слов с автоключом) был предложен Дэвидом Уилером. На выходе мы получаем последовательность 32-битовых слов, которые могут служить в качестве гаммы шифра. WAKE работа- ет в режиме CFB - предыдущее слово шифрованного текста используется для генерации следующего слова ключевой после- довательности. В алгоритме используется специальный блок замены S из 256 32-битных слов. При этом старшие байты этих слов являются перестановкой чисел от 0 до 255, а остальные три младших байта выбираются случайными. Работа алгоритма описывается сле- дующим образом: Вначале инициализируется блок замены на основе ключа. За- тем инициализируются четыре регистра А, В, С и D начальными значениями, также зависящими от ключа (возможно другого): а(], /?о, с(), Д). Очередное слово ключевой последовательности получа- ется по формуле: /г, = d,. После этого изменяется значение регистров: <2,+ 1 = М(<2„ dj), hi+l = М(/?„ <2,+i), с,+1 = М(с„ /?,+1), <7,+i = М(г/„ с,+1), где М(х, у) = (х + у) » 8 © S(A- + у) & 255, здесь 8 младших бит суммы х + у используются для входа в таблицу замены. Хотя Уилер предложил способ генерации блока замены, мо- жет быть использован и другой алгоритм выбора перестановки и случайного заполнения. Данный шифр является достаточно быстрым, хотя и нестойким к атакам по выбранному исходному тексту.
3. АСИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ 3.1. Общие положения Еще одним обширным классом криптографических систем яв- ляются так называемые асимметричные или двухключевые сис- темы. Эти системы характеризуются тем, что для шифрования и для расшифрования используются разные ключи, связанные между собой некоторой зависимостью. При этом данная зависи- мость такова, что установить один ключ, зная другой, с вычисли- тельной точки зрения очень трудно. Один из ключей (например, ключ шифрования) может быть сделан общедоступным, и в этом случае проблема получения общего секретного ключа для связи отпадает. Если сделать общедоступным ключ расшифрования, то на базе полученной системы можно построить систему аутенти- фикации передаваемых сообщений. Поскольку в большинстве случаев один ключ из пары делается общедоступным, такие системы получили также название криптосистем с открытым ключом. Исходное Отправитель Зашифр. Получатель сообщение (А) сообщение (В) Открыты йк Закрытый ключ (Ко) ключ (Ks) Рис 3.1. Схема асимметричной криптосистемы. Криптосистема с открытым ключом определяется тремя алго- ритмами: генерации ключей, шифрования и расшифрования. Алгоритм генерации ключей открыт, всякий может подать ему на вход случайную строку г надлежащей длины и получить пару ключей (/сь /с2). Один из ключей (например, к\) публикуется, он называется открытым, а второй, называемый секретным, хранит- ся в тайне. Алгоритмы шифрования Ек и расшифрования Dk таковы, что для любого открытого текста т Dk (£/q(™)) = т .
Рассмотрим теперь гипотетическую атаку злоумышленника на эту систему. Противнику известен открытый ключ к\, но неизвестен соответствующий секретный ключ /<2. Противник перехватил криптограмму d и пытается найти сообщение т, где d = Ek (m). Поскольку алгоритм шифрования открыт, противник может просто последовательно перебрать все возможные сооб- щения длины и, вычислить для каждого такого сообщения /и, криптограмму dt = Ek (mj) и сравнить <7, с d. То сообщение, для которого di = d и будет искомым открытым текстом. Если пове- зет, то открытый текст будет найден достаточно быстро. В худ- шем же случае перебор будет выполнен за время порядка 2"Г(и), где Т(п) - время, требуемое для шифрования сообщения длины п. Если сообщения имеют длину порядка 1000 битов, то такой перебор неосуществим на практике ни на каких самых мощных компьютерах. Мы рассмотрели лишь один из возможных способов атаки на криптосистему и простейший алгоритм поиска открытого текста, называемый обычно алгоритмом полного перебора. Используется также и другое название: «метод грубой силы». Другой простей- ший алгоритм поиска открытого текста - угадывание. Этот оче- видный алгоритм требует небольших вычислений, но срабатыва- ет с пренебрежимо малой вероятностью (при больших длинах текстов). На самом деле противник может пытаться атаковать криптосистему различными способами и использовать различ- ные, более изощренные алгоритмы поиска открытого текста. Кроме того, злоумышленник может попытаться восстановить секретный ключ, используя знания (в общем случае несекретные) о математической зависимости между открытым и секретным ключами. Естественно считать криптосистему стойкой, если любой такой алгоритм требует практически неосуществимого объема вычислений или срабатывает с пренебрежимо малой вероятностью. (При этом противник может использовать не только детерминированные, но и вероятностные алгоритмы.) Это и есть теоретико-сложностный подход к определению стойкости. Для его реализации в отношении того или иного типа криптогра- фических систем необходимо выполнить следующее: 1) дать формальное определение системы данного типа; 2) дать формальное определение стойкости системы;
3) доказать стойкость конкретной конструкции системы дан- ного типа. Здесь сразу же возникает ряд проблем. Во-первых, для применения теоретико-сложностного подхода необходимо, построить математическую модель криптографиче- ской системы, зависящую от некоторого параметра, называемого параметром безопасности, который может принимать сколь угодно большие значения (обычно для простоты предполагается, что параметр безопасности может пробегать весь натуральный ряд). Во-вторых, определение стойкости криптографической систе- мы зависит от той задачи, которая стоит перед противником, и от того, какая информация о схеме ему доступна. Поэтому стой- кость систем приходится определять и исследовать отдельно для каждого предположения о противнике. В-третьих, необходимо уточнить, какой объем вычислений можно считать «практически неосуществимым». Из сказанного выше следует, что эта величина не может быть просто констан- той, она должна быть представлена функцией от растущего параметра безопасности. В соответствии с тезисом Эдмондса алгоритм считается эффективным, если время его выполнения ограничено некоторым полиномом от длины входного слова (в нашем случае - от параметра безопасности). В противном случае говорят, что вычисления по данному алгоритму практически неосуществимы. Заметим также, что сами криптографические системы должны быть эффективными, т. е. все вычисления, пред- писанные той или иной схемой, должны выполняться за полино- миальное время. В-четвертых, необходимо определить, какую вероятность можно считать пренебрежимо малой. В криптографии принято считать таковой любую вероятность, которая для любого поли- нома/» и для всех достаточно больших п не превосходит \/р(п), где п - параметр безопасности. Итак, при наличии всех указанных выше определений, про- блема обоснования стойкости криптографической системы све- лась к доказательству отсутствия полиномиального алгоритма, который решает задачу, стоящую перед противником. Но здесь возникает еще одно и весьма серьезное препятствие: современное состояние теории сложности вычислений не позволяет доказы- 58
вать сверхполиномиальные нижние оценки сложности для кон- кретных задач рассматриваемого класса. Из этого следует, что на данный момент стойкость криптографических систем может быть установлена лишь с привлечением каких-либо недоказанных предположений. Поэтому основное направление исследований состоит в поиске наиболее слабых достаточных условий (в идеале - необходимых и достаточных) для существования стойких систем каждого из типов. В основном, рассматриваются предположения двух типов - общие (или теоретико-сложностные) и теоретико-числовые, т. е. предположения о сложности конкретных теоретико-числовых задач. Все эти предположения в литературе обычно называются криптографическими. Рассмотрим одно из таких предположений. Обозначим через S множество всех конечных двоичных слов, а через Z" - множество всех двоичных слов длины и. Под- множества L е Z в теории сложности принято называть языками. Говорят, что машина Тьюринга М работает за полиномиальное время (или просто, что она полиномиальна), если существует полином р такой, что на любом входном слове длины п машина М останавливается после выполнения не более, чем /?(/?) опера- ций. Машина Тьюринга Мраспознает (другой термин - принима- ет) язык L, если на всяком входном слове хе / машина Л/оста- навливается в принимающем состоянии, а на всяком словехtL- в отвергающем. Класс Р - это класс всех языков, распознаваемых машинами Тьюринга, работающими за полиномиальное время. Функция /: Z Z вычислима за полиномиальное время, если существует полиномиальная машина Тьюринга такая, что если на вход ей подано слово хе Z, то в момент останова на ленте будет записано значение /(х). Язык L принадлежит классу NP, если существуют предикат Р(х,у): LxS —> {0,1}, вычислимый за поли- номиальное время, и полином р такие, что L = {х| 3 у Р(х,у)& [у| < р(|х|)}. То есть язык/, принадлежит NP, если для всякого слова из L длины п можно угадать некоторую строку полиномиальной от и длины и затем с помощью предиката Р убедиться в правильности догадки. Ясно, что Р с NP. Является ли это включение строгим - одна из самых известных нерешенных задач математики. Боль- шинство специалистов считают, что оно строгое (так называемая
гипотеза Р Ф NP). В классе NP выделен подкласс максимально сложных языков, называемых NP-полными: любой NP-полный язык распознаваем за полиномиальное время тогда и только тогда, когда Р = NP. Нам еще потребуется понятие вероятностной машины Тью- ринга. В обычных машинах Тьюринга (их называют детермини- рованными) новое состояние, в которое машина переходит на очередном шаге, полностью определяется текущим состоянием и тем символом, который обозревает головка на ленте. В вероятно- стных машинах новое состояние может зависеть еще и от слу- чайной величины, которая принимает значения 0 и 1 с вероятно- стью 1/2 каждое. Можно считать, что вероятностная машина Тьюринга имеет дополнительную случайную ленту, на которой записана бесконечная двоичная случайная строка. Случайная лента может читаться только в одном направлении и переход в новое состояние может зависеть от символа, обозреваемого на этой ленте. Рассмотрим теперь следующий естественный вопрос: не явля- ется ли гипотеза Р Ф NP необходимым и достаточным условием для существования стойких криптографических схем? В самом деле, необходимость во многих случаях почти оче- видна. Вернемся к рассмотренному выше примеру. Определим следующий язык: L = {(/<|Д/)| 3 сообщение m: d = Ек (т) и /и, = I}. Ясно, что L е NP: можно просто угадать открытый текст т и проверить за полиномиальное время, что d = Ек (т) и i-й бит т равен I. Если да, то входное слово принимается, в против- ном случае - отвергается. В предположении Р = NP существует детерминированный по- линомиальный алгоритм, распознающий язык L. Зная к\ и d, с помощью этого алгоритма можно последовательно, по биту, вычислить открытый текст т. Тем самым доказано, что крипто- система нестойкая. Что же касается вопроса о достаточности предположения Р Ф NP, то здесь напрашивается следующий подход: выбрать какую- либо NP-полную задачу и построить на ее основе криптографи- ческую схему, задача взлома которой (т. е. задача, стоящая перед 60
противником) была бы NP-полной. Такие попытки предпринима- лись в начале 80-х годов, в особенности в отношении криптоси- стем с открытым ключом, но к успеху не привели. Результатом всех этих попыток стало осознание следующего факта: даже если Р Ф NP, то любая NP-полная задача может оказаться трудной лишь на некоторой бесконечной последовательности входных слов. Иными словами, в определение класса NP заложена мера сложности «в худшем случае». Для стойкости же криптогра- фической схемы необходимо, чтобы задача противника была сложной «почти всюду». Таким образом, стало ясно, что для криптографической стойкости необходимо существенно более сильное предположение, чем Р Ф NP. А именно, предположение о существовании односторонних функций. 3.2. Односторонние функции и функции-ловушки Центральным понятием в теории асимметричных криптогра- фических систем является понятие односторонней функции. Неформально под односторонней функцией понимается эф- фективно вычислимая функция, для обращения которой (т.е. для поиска хотя бы одного значения аргумента по заданному значе- нию функции) не существует эффективных алгоритмов. Заметим, что обратная функция может и не существовать. Под функцией мы будем понимать семейство отображений {fn}, где fy. > S'", т = т(п). Для простоты предположим, что п пробегает натуральный ряд, а отображения/, определены всюду. Функция/называется честной, если 3 полином q(x), такой что V п q(m(n)) > п. Формально понятие односторонней функции описывается следующим образом: Определение 3.1. Честная функция / называется односторон- ней, если 1. Существует полиномиальный алгоритм, который для всякого х вычисляет/Ц); 2. Для любой полиномиальной вероятностной машины Тьюринга А выполнено следующее. Пусть строка х вы- брана случайным образом из множества S". Тогда для любого полинома/» и всех достаточно больших/? Р{ДЛ(/х))) =»} < 1/р(п).
Второе условие качественно означает следующее. Любая по- линомиальная вероятностная машина Тьюринга А может по данному у найти х из уравнения /(х) = у лишь с пренебрежимо малой вероятностью. Заметим, что требование честности опустить нельзя. Посколь- ку длина входного слова f(x) машины А равна /и, ей может не хватить полиномиального от т времени просто на выписывание строки х. Существование односторонних функций является необходи- мым условием стойкости многих криптосистем. Вернемся к примеру, приведенному в п. 3.1. Рассмотрим функцию/, такую, что/г) = к\. Она вычислима с помощью алгоритма G за полино- миальное время. Покажем, что если f - не односторонняя функ- ция, то криптосистема нестойкая. Предположим, что существует полиномиальный вероятностный алгоритм Л, обращающий / с вероятностью по крайней мере 1//>(и) для некоторого полинома/?. Злоумышленник может подать на вход алгоритма значение ключа /<1 и получить с указанной вероятностью некоторое значение г' из прообраза. Далее злоумышленник подает г' на вход алгоритма G и получает пару ключей (/ц, к21). Хотя к2 не обязательно совпада- ет с /<2, по определению криптосистемы Dk = т для любого открытого текста т. Поскольку к2 найден с вероятностью по крайней мере !/>(«), схема нестойкая. Функцией-ловушкой называется односторонняя функция, для которой обратную функцию вычислить просто, если имеется некоторая дополнительная информация, и сложно, если такая информация отсутствует. В качестве задач, приводящих к односторонним функциям, можно привести следующие. I. Разложение числа на простые сомножители. Вычислить произведение двух простых чисел очень просто. Однако, для решения обратной задачи - разложения заданного числа на простые сомножители, эффективного алгоритма в на- стоящее время не существует. 2. Дискретное логарифмирование в конечном простом поле (проблема Диффи-Хеллмана). Допустим, задано большое простое числор и пусть g - прими- тивный элемент поля GF(p~). Тогда для любого а вычислить
ga(mod p) просто, а вычислить а по заданным к = ga(mod p) и p оказы вается затрудн ител ьны м. Криптосистемы с открытым ключом основываются на одно- сторонних функциях-ловушках. При этом открытый ключ опре- деляет конкретную реализацию функции, а секретный ключ дает информацию о ловушке. Любой, знающий ловушку, может легко вычислять функцию в обоих направлениях, но тот, у кого такая информация отсутствует, может производить вычисления только в одном направлении. Прямое направление используется для шифрования и для верификации цифровых подписей, а обратное -для расшифрования и выработки цифровой подписи. Во всех криптосистемах с открытым ключом чем больше дли- на ключа, тем выше различие между усилиями, необходимыми для вычисления функции в прямом и обратном направлениях (для того, кто не обладает информацией о ловушке). Все практические криптосистемы с открытым ключом осно- вываются на функциях, считающихся односторонними, но это свойство не было доказано в отношении ни одной из них. Это означает, что теоретически возможно создание алгоритма, позво- ляющего легко вычислять обратную функцию без знания инфор- мации о ловушке. В этом случае, криптосистема, основанная на этой функции, станет бесполезной. С другой стороны, теоретиче- ские исследования могут привести к доказательству существова- ния конкретной нижней границы сложности обращения некото- рой функции, и это доказательство будет существенным событи- ем, которое окажет значительное позитивное влияние на развитие криптографии. 3.3. Асимметричные системы шифрования 3.3.1. Криптосистема Эль-Гамаля Система Эль-Гамаля - это криптосистема с открытым ключом, основанная на проблеме логарифма. Система включает как алго- ритм шифрования, так и алгоритм цифровой подписи. Множество параметров системы включает простое число р и целое число g, степени которого по модулю р порождают боль- шое число элементов Zp. У пользователя А есть секретный ключ а и открытый ключ у, где у = ga (mod р). Предположим, что поль- зователь В желает послать сообщение т пользователю А. Снача- ла В выбирает случайное число /г, меньшеер. Затем он вычисляет
yi = gk (modp) иу2 = m© (yk (mod />)), где © обозначает побитовое "исключающее ИЛИ". В посылает А пару(уьу2). После получения шифрованного текста пользователь А вы- числяет т = (у/ mod р) © у2. Известен вариант этой схемы, когда операция © заменяется на умножение по модулюр. Это удобнее в том смысле, что в первом случае текст (или значение хэш-функции) необходимо разбивать на блоки той же длины, что и число у4 (mod р). Во втором случае этого не требуется и можно обрабатывать блоки текста заранее заданной фиксированной длины (меньшей, чем длина числа р). Уравнение расшифрования в этом случае будет таким: /и =у2/у к mod р. Однако, схема Эль-Гамаля не лишена определенных недостат- ков. Среди них можно указать следующие: I. Отсутствие семантической стойкости. Если g - примитив- ный элемент^,, то за полиномиальное время можно определить, является ли некоторое число х квадратичным вычетом, или нет. Это делается возведением в степень х(р 1,/2 mod р. Если результат равен 1, то х - квадратичный вычет по модулю р, если -1, то х - квадратичный невычет. Далее пассивный противник проверяет, являются ли gk и g квадратичными вычетами. g' будет квадра- тичным вычетом тогда и только тогда, когда и gk, и g будут квадратичными вычетами. Если это так, то у2 = т-ук mod р будет квадратичным вычетом, тогда и только тогда, когда само сооб- щение т будет квадратичным вычетом. То есть пассивный про- тивник получает некоторую информацию об исходном тексте, имея лишь шифрованный текст и открытый ключ получателя. 2. Делимость шифра. Если дан шифрованный текст (уь у2), то мы можем получить другой шифрованный текст, изменив только вторую часть сообщения. В самом деле, умножив у2 Hag1' (м Ф 0), мы получим шифртекст для другого сообщения т' = m-g . Для защиты от подобных атак Шнорром и Якобссоном было предложено объединить схему шифрования Эль-Гамаля с цифро-
вой подписью Шнорра, что позволяет не только шифровать сообщение, но и аутентифицировать его. Зашифрование осуществляется следующим образом. Автор сообщения выбирает случайные к, s е Z,. далее от вычисляет gk mod р, ту mod р, с = h(g, gk, ту) и z = s + ск mod q. Шифрован- ный текст представляет собой четверку (gk, тук, с, z). Получив сообщение (/z,/,c,z), приемная сторона вначале ве- рифицирует его, проверяя выполнение равенства h(gz h с,h,f) = с . В случае успешной верификации открытый текст получается по формуле т = f/hх modр. Расшифрование корректно, поскольку h = gk, f = тук mod/;, так что f I hx = mgk<xg k<x mod p = m. Заметим, что вторая половина шифрованного текста (с, z) за- висит от исходного сообщения только через хэш-функцию h, которая статистически независима от т, и, следовательно, не содержит никакой информации об т. Указанными авторами было предложено обобщение данной схемы на случай, когда пространство сообщений М представляет собой произвольную аддитивную группу, например М - Z/'. Используются две статистически независимые хэш-функции Н : G2xM —> Z; и Нм : G —> М. В базовой схеме шифрования ту mod р заменяется на т + Нм(ук) е М. Верификация шифрованного текста (Л,f,с,z)остается без изменений, а расшифрование будет проводиться по формуле f - Нм (h x). 3.3.2. Криптосистема, основанная на проблеме Диффи- Хеллмана Данная система шифрования была представлена Мишелем Абдаллой, Михиром Беллэром и Филлипом Рогэвэем в рамках европейского проекта NESSIE (New European Schemes for Signatures, Integrity and Encryption). Эта система столь же эффек- тивна, что и система Эль-Гамаля, но обладает дополнительными свойствами безопасности. Более того, стойкость системы может быть доказана в предположении о стойкости лежащих в ее основе криптографических примитивов.
Данная криптосистема реализуема на основе любой цикличе- ской группы, для которой может быть сформулирована проблема Диффи-Хеллмана, например, в {Zp } или в группе точек на эл- липтической кривой (см. 3.3.5). Система строится из криптографических примитивов низкого уровня: групповой операции, симметричного шифра, функции хэширования (см. 4.3) и алгоритма вычисления кода аутентифи- кации сообщения-имитовставки (МАС). Стойкость доказывается на основе предположения о сложности решения соответствую- щей проблемы Диффи-Хеллмана и предположения о стойкости входящих в схему симметричных примитивов. Опишем криптографические примитивы, входящие в схему. Циклическая группа G = {g}. Мы будем использовать мульти- пликативную запись групповой операции. Алгоритмы, реали- зующие эту операцию, будут работать с представлениями эле- ментов группы в виде битовых строк фиксированной длины gLen е N. Способ кодирования G —> {0, 1не фиксируется и может выбираться, например, из соображений эффективности. Код аутентификации сообщения позволяет пользователям, обладающим общим секретным ключом, выработать битовую строку для аутентификации и проверки целостности данных. Пусть Msg = {0, 1} - пространство сообщений, тКеу = {0, 1}"'Лел - пространство ключей для вычисления МАС для некоторого rnLent N, Tag = {0, 1}'Лел - включающее множество всех воз- можных значений МАС для некоторого tLen е TV. В этих обозна- чениях код аутентификации сообщений представляет собой пару алгоритмов МАС = {MAC.gen, MAC.ver}. Алгоритм генерации МАС определяется как отображение MAC.gen(/c, х): mKey х Msg —> Tag и может быть вероятностным. Алгоритм верификации МАС является отображением MAC.ver(/r, х, т): mKey х Msg х Tag —>{0,1} со свойством MAC.ver(/c, х, MAC.gen(/c, х)) = 1. В качестве МАС можно использовать, например, блочный шифр с достаточной длиной блока и ключа в режиме сцепления блоков шифрованного текста.
Симметричный шифр позволяет пользователям, обладающим общим секретным ключом, обеспечить секретность. Пусть Msg, как и ранее, пространство сообщений, еКеу={0, 1}еЛея - про- странство ключей для некоторого eLen&N, Ctext = {0, 1} - включающее множество всех возможных значений шифрованно- го текста и Coins = {0, 1}°“ - множество строк бесконечной длины. В этих обозначениях шифр представляет собой пару алгоритмов SYM = {SYM.enc, SYM.dec}. Алгоритм зашифрования определя- ется как отображение SYM.enc(/c, х, г): eKey х Msg х Coins —> Ctext Алгоритм расшифрования является отображением SYM.dec(/c, у): eKey х Ctext —> Msg о {BAD}, где значение BAD выдается, если шифртекст у не является ре- зультатом зашифрования никакого открытого текста. Асимметричный шифр. Пусть Msg, Ctext, Coins определены как и ранее, РК с {0, 1}*, SK с {0, 1}* - множества открытых и секретных ключей. Асимметричный шифр определяется как тройка алгоритмов ASYM = {ASYM.enc, ASYM.dec, ASYM.key}. Алгоритм зашифрования является отображением AS YM.enc(/A, х, г): РК х Msg х Coins —> Ctext а расшифрования: AS YM.enc(.s7c, у): SKx Ctext —> Msg о {BAD} Алгоритм выработки ключа в качестве аргумента берет строку г е Coins и выдает пару ключей (plc, sk) е PKxSK. При этом должно выполняться следующее свойство: V (рк, sic): 3 г' е Coins: (pk, sic) = ASYM.key(r9> V г е Coins Vie Msg ASYM.dec(.s7c. ASYM.enc(/A, x, r)) = x. Функция хэширования является отображением следующего вида: Н: {0, lf;/еп j-q lynLen + eLen Теперь мы можем описать криптографические примитивы, не- посредственно составляющие рассматриваемую криптографиче-
скую систему. Графически процесс зашифрования представлен на рис. 3.1. Все ключевые пары в данном алгоритме выбираются так же, как и в криптосистеме Эль-Гамаля, т.е. пара (рк, sk) = (g', г) для некоторого случайного г. При отсылке сообщения выбирается некоторое случайное значение и и получателю отсылается g“, что обеспечивает неявный обмен ключами по семе Диффи-Хеллмана. Таким образом, зашифрованное сообщение состоит из одноразо- вого открытого ключа, текста, зашифрованного симметричным шифром, и кода аутентификации сообщения, выработанного с помощью алгоритма MAC.gen. Процесс расшифрования и аутентификации графически пред- ставлен на рис. 3.2. Элементы принятого сообщения также выде- лены двойной рамкой. Рис. 3.2. Процесс зашифрования. Двойной рамкой выделены элементы зашифрованного сообщения. Рассмотренная криптосистема является семантически стойкой и неделимой. В частности, неделимость обеспечивается тем, что значение g" подается на вход функции хэширования. Если этого не сделать, то возможна атака, подобная описанной в п. 3.3.2 на
шифр Эль-Гамаля. Дело в том, что в некоторых группах (включая Zp ) значения guv и g’ неоднозначно определяют значение g“. Т.е. могут существовать и Ф и', такие что g'v = guv. Пусть I = (р - 1)/2. Тогда gl = -I. Если нам дано зашифрованное сообщение ЕМ = g“ || епсМ || tag, то мы сможем вычислить новый шифртекст, ЕМ'=g" || encM ||tag, который с большой вероятностью будет соответствовать тому же самому открытому тексту. Пусть g =g g. В этом случае g = g g = g (g) = g -(-I) , и это равно g“’ тогда и только тогда, когда v - четное, т.е. в половине всех случаев. Таким образом, с вероятностью 1/2 вычисленный шифртекст будет являться результатом зашифрования того же самого исходного текста. Рис. 3.3. Процесс расшифрования и аутентификации. Эффективность предложенной схемы по существу та же, что и у шифра Эль-Гамаля, т.е. для зашифрования требуются две опе- рации возведения в степень, а для расшифрования - одна. Тем самым для больших сообщений скорость шифрования будет определяться скоростью работы симметричного шифра и алго- ритма вычисления кода аутентификации сообщения.
3.3.3. Криптосистема Ривеста-Шамира-Адлемана Система Ривеста-Шамира-Адлемана (Rivest, Shamir, Adleman - RS А) представляет собой криптосистему, стойкость которой основана на сложности решения задачи разложения числа на простые сомножители. Кратко алгоритм можно описать следую- щим образом: Пользователь А выбирает пару различных простых чисел и q-, , вычисляет ил = p-.q-, и выбирает число <Д, такое что НОД(с/л, ф(ид)) = I, где ф(и) - функция Эйлера (количество чисел, мень- ших и и взаимно простых с и. Если и = pq, где р и q - простые числа, то ф(и) = (р - 1)(<7 - I)). Затем он вычисляет величину еЛ, такую, что <7л-ел = 1 (mod ф(ил)), и размещает в общедоступной справочной таблице пару (еЛ, ил), являющуюся открытым клю- чом пользователя А. Теперь пользователь В, желая передать сообщение пользова- телю А, представляет исходный текст х = (%о, *1, i), хе Z„, 0 < i < п, по основанию иЛ: N = с(|+С1 ил+.... Пользователь В зашифровывает текст при передаче его поль- зователю А, применяя к коэффициентам с, отображение Ее „ : ЕЙЛ,„Л - с-->сел(тойиА), получая зашифрованное сообщение N'. В силу выбора чисел с/Л и ел, отображение Еед „л является взаимно однозначным, и обрат- ным к нему будет отображение Е</л,„л - с->c^A(modnA) Пользователь А производит расшифрование полученного со- общения N', применяя Ej „ . Для того чтобы найти отображение Ej „ , обратное по от- ношению к Ее „ , требуется знание множителей ил = рьЦк. Время выполнения наилучших из известных алгоритмов разло-
жения при п > 10145 на сегодняшний день выходит за пределы современных технологических возможностей. Существует вариант криптосистемы RSA, в которой вместо функции Эйлера используется функция Кармайкла X, где Х(и) - наименьшее целое t, такое что для любого целого х, взаимно простого с и, выполняется х = 1 mod и. Если и выбирается так, как описано выше, то Х(и) = Н()К(у? - 1, g - 1) 3.3.4. Криптосистемы Меркля-Хеллмана и Чора-Ривеста Криптосистемы Меркля-Хеллмана и Хора-Ри веста основаны на использовании односторонней функции, известной под назва- нием "задача укладки рюкзака. Пусть имеется и объектов, так что можно составить п- компонентный вектор f, так что z-й компонент f представляет собой место, занимаемое z-м объектом. Имеется рюкзак общим объемом К. Теперь задачу укладки рюкзака может быть сформулирована следующим образом: нам даны f и К, и требуется найти битовый вектор х, такой что fx=K. Доказано, что не существует эффектив- ного алгоритма вычисления х по f и К в общем случае. Таким образом, мы можем использовать вектор f для шифрования п- битового сообщения х путем вычисления произведения K=fx. Важно отметить, что выбор f является критическим. Напри- мер, предположим, что f выбирается в виде супервозрастающей последовательности. В этой ситуации для любого z /-1 /z >Хл • 7=1 В этом случае при данных f и К вычислить х очень просто. Мы проверим, является ли К большим, чем последний элемент f, и если да, то мы делаем последний элемент х равным 1, вычитаем это значение из К и рекурсивно решаем меньшую проблему. Этот метод работает, поскольку когда К больше последнего элемента f, даже если мы выберем х=(1 1 1 ... 1 0), то произведение fx все равно будет слишком маленьким, благодаря тому, что последова- тельность супервозрастающая. Таким образом, мы должны выби- рать 1 в последней позиции х.
Ясно, что выбор f очень важен - в зависимости от f мы можем получить, а можем и не получить одностороннюю функцию. Однако, именно существование этого простого случая позволяет нам создать функцию-ловушку, которую мы можем использовать для построения криптосистемы с открытым ключом. Пользователь А получает свой открытый ключ следующим образом: 1. Выбирает супервозраста ющую последовательность Г примерно из 100 элементов; 2. Выбирает случайное целое т, большее суммы элементов Г; 3. Выбирает другое случайное целое w, взаимно простое с т. 4. Теперь вычисляется Р ’ умножением каждого компонента Р на и> по модулю т; Г’ = Гw (mod /и) 5. И наконец, проводится случайная перестановка Р элемен- тов Р’ для получения открытого ключа f. Теперь А раскрывает ключ f и держит в секрете f, т, w и Р. Когда пользователь В хочет послать А сообщение (битовый вектор) х, он вычисляет .S' = fx и посылает это вычисленное 5. Если данная система является стойкой, тогда для внешнего на- блюдателя С вычисление х по 5 и публичному ключу f будет эквивалентно решению задачи рюкзака в общем случае. Допус- тим, что предположение о стойкости верно. В этом случае, хотя С не может расшифровать сообщение, А может это сделать, приме- няя секретные значения, которые она использовала при вычисле- нии f. Пользователь А может вычислить 5’=Рх, так что она сможет решить задачу рюкзака в случае супервозрастающей последова- тельности. Вычисление S' производится следующим образом. S'= f'x = f',- х(- modт = и1 nf'x mod/;/ = i i = w-1 ~У.Г/Х,- mod/и mi1.S’ mod/и i Таким образом, А просто умножает .S' на мультипликативное обратное и/ по модулю т, а затем решает задачу рюкзака в случае
супервозрастающей последовательности Г, и теперь она сможет прочитать сообщение. При получении ключа мы начинаем с супервозрастающей по- следовательности и затем скрываем имеющуюся в ней структуру. Другими словами, построенная последовательность выглядит так, что в ней нет никакой структуры. Но система может быть сделана еще более стойкой (или, по крайней мере, так будет казаться) путем повторения этого процесса скрытия структуры. Если мы выберем другие т и w, тогда мы сможем построить новый откры- тый ключ, который не может быть построен с использованием единственной пары (т, и>). Мы можем повторять это снова и снова, и система выглядит все более и более стойкой с каждой итерацией. В 1982 г Эди Шамир открыл атаку на криптосистему, исполь- зующую одну итерацию. Это оказалось началом падения систем, основанных на задаче рюкзака. Допустим, что перестановка не применяется, так что Г’ = f. Тогда для любого i f, = f ,w mod m По определению модульной конгруэнтности должен сущест- вовать вектор к, такой что для любого i - тк. = Г, где и - это мультипликативное обратное к w по модулю т (на- помним, что мы выбирали т и w взаимно простыми, так что это обратное существует). После этого в результате деления получа- ем: И ку Г; т f/ Поскольку т очень велико, выражение справа будет очень маленьким, поэтому покомпонентное частное к и f близко к и/т. Подставляя вместо i 1 и вычитая из первоначального уравнения, получим: f, f, mft mfx
Поскольку обе величины справа положительны и вычитае- мое очень мало, мы можем записать: JqJq < _£/_ f( f| mfj Также заметим, что поскольку Г супервозрастающая, каж- дый элемент должен быть меньше половины следующего, поэто- му для любого i имеем: Г, <т-2'п Далее мы можем записать: ki_k|J 2'" После несложных преобразований получаем: |к, т - к! fz| < т • 2'" Оказывается, что поскольку f открыт, всего лишь несколько этих неравенств (три или четыре) однозначно определяют к. Эти неравенства относятся к области целочисленного программиро- вания, поэтому к можно быстро найти, например, с помощью алгоритма Ленстры. А если мы знаем к, то мы можем легко раскрыть систему. Допустим, что мы выполним перестановку f до опубликова- ния, т.е. Р не является идентичной. Поскольку нам нужны только первые 3 или 4 элемента к, мы можем просто перебрать все варианты, количество которых определяется третьей или четвер- той степенью размерности к. В дальнейшем были разработаны методы вскрытия систем, использующих несколько итераций, и в настоящее время любая система, использующая модульное умножение для скрытия легко разрешимой задачи рюкзака, может быть эффективно раскрыта. Однако, рассмотренный метод не является единственным спосо- бом применения задачи рюкзака в криптографии. В 1986 г. Бен-Цион Чор предложил криптосистему, на сего- дняшний день единственную, не использующую модульное умножение для скрытия простой задачи укладки рюкзака. Это также единственная система, основанная на задаче укладки рюкзака, которая не раскрыта.
Во-первых, отметим, что любая супервозрастающая последо- вательность должна расти экспоненциально, поскольку мини- мальная супервозрастающая последовательность - это степени двойки. Во-вторых, отметим, что причина, по которой использу- ются супервозрастающие последовательности заключается в том, что любая Л-элементная сумма из нее уникальна. Другими слова- ми, если мы представим нашу последовательность в виде вектора f, функция скалярного произведения f на битовый вектор х будет однозначна и поэтому может быть обращена. Но оказывается возможным построить последовательность, растущую только полиномиально, но сохраняющую свойство единственности h- элементных сумм. Конструкция такой последовательности была опубликована в 1962 г. Пусть GF(p) - поле целых чисел по модулю простого числа р, и GF(p') - расширение степени h основного поля. Также пусть 1 - вектор, все элементы которого равны 1. С формальной точки зрения мы строим последовательность длины р, такую что для любого i от 0 дор - 1 1 < а, < р - 1 и для каждых различных х, у, таких что х*1 = у*1 = h, х*а и у*а также должны быть различны. Мы можем представлять векторы х и у как битовые (т.е. содержащие только 0 и 1). Далее построение проводится довольно просто. Во-первых, выберем t - алгебраический элемент степени h над GF(p), т.е. минимальный многочлен с коэффициентами из GF(p), корнем которого является /, имеет степень h. Далее выберем g - мульти- пликативный генератор (примитивный элемент) поля GF(p>‘\ т.е. для каждого элемента х из GF\p'} (кроме нуля) существует неко- торое z, такое, что g в степени i будет равно х. Теперь рассмотрим аддитивный сдвиг GF(p), т.е. множество t + GF(p) = {t + z | 0 < z <p- 1 } cz GF(ph) Пусть каждый элемент вектора а будет логарифмом по осно- ванию g соответствующего элемента из t+GF(p): ср = logg(/+z) Мы должны проверить, что а, определенная подобным обра- зом, удовлетворяет заданным свойствам. Определенно, каждый элемент в а будет лежать в заданном диапазоне, поскольку g
порождает GF(p,h). Теперь пусть у нас есть различные хну, такие что х*1 = у*1 = Л, но х*а = у*а. Тогда, возводя g в степень х*а и у*а, получим: z>-i р-i Поэтому мы также можем записать =n<«V' /-0 / -О и далее /=0 /=0 Теперь заметим, что произведение в обеих частях неравенства представляет собой приведенный многочлен от t степени h. Иными словами, если бы мы вычислили оба этих произведения и заменили значение t формальным параметром, например, z, тогда старшим членом на каждой стороне был бы х в степени h с коэф- фициентом 1. Мы знаем, что если мы подставим значение t вме- сто z, то значения этих двух полиномов будут равны. Поэтому вычтем один из другого, старшие члены сократятся, и если мы подставим t, то получим 0. Мы получили полином степени Л-1, корнем которого является t. Но это противоречит тому, что мы выбрали t алгебраическим элементом степени h. Таким образом, доказательство закончено и построение корректно. Хор разработал метод использования данного построения в качестве основы криптосистемы. Кратко он заключается в сле- дующем. Мы выбираем р и h достаточно маленькими, чтобы мы могли вычислять дискретные логарифмы в GF(ph'). Хор рекомен- дует р около 200, a h около 25. Затем мы выбираем t и g как указано выше. Для каждого из них будет много вариантов, и мы можем просто произвести случайный выбор (В действительности, будет так много пар <t,g>, что очень большое количество пользо- вателей могут использовать одинаковые р и Л, и вероятность того, что два пользователя выберут одинаковые ключи, будет пренебрежимо мала.). Затем мы следуем конструкции Боуза- Чоула. Мы вычисляем логарифмы по основанию g от t+i для каждого z, это даст нам а. Наконец, мы выбираем случайную
перестановку а, которая и будет нашим ключом. Мы публикуем результат перестановки а вместе с р и h. Величины t, g и исполь- зованная перестановка остаются в секрете. Чтобы послать сообщение А, В просто берет свое сообщение и вычисляет 5= х*а. В действительности, это не так уж и просто, поскольку сообщение должно быть длиной р бит и должно быть х*1 = h, но Хор представил довольно прямолинейный метод преобразования неограниченной битовой строки в несколько блоков, каждый из которых имеет требуемую форму. А получает .S'. Он возводит g в степень .S' и выражает результат в виде поли- нома от t степени h с коэффициентами из GF(p). Далее он вычис- ляет h корней этого полинома, затем применяет обратную под- становку и получает индексы элементов в х, содержащих едини- цы. Интересно отметить, что если кто-либо откроет эффективный метод вычисления дискретных логарифмов, то такой алгоритм не только не поможет вскрыть эту систему, но и облегчит генера- цию ключей, так как при этом мы должны вычислять дискретные логарифмы. До настоящего времени не было опубликовано ни одного эф- фективного метода вскрытия этой системы при знании только открытого ключа. 3.3.5. Криптосистемы, основанные на эллиптических кривых Рассмотренная выше криптосистема Эль-Гамаля основана на том, что проблема логарифмирования в конечном простом поле является сложной с вычислительной точки зрения. Однако, ко- нечные поля являются не единственными алгебраическими структурами, в которых может быть поставлена задача вычисле- ния дискретного логарифма. В 1985 году Коблиц и Миллер неза- висимо друг от друга предложили использовать для построения криптосистем алгебраические структуры, определенные на мно- жестве точек на эллиптических кривых. Мы рассмотрим случаи определения эллиптических кривых над простыми полями Галуа произвольной характеристики и над полями Галуа характеристи- ки 2.
Определение 3.2. Пусть р > 3 - простое число. Пусть а, b е. GF(p) такие, что 4а2 + 27/?2 Ф 0. Эллиптической кривой Е над полем GF(p) называется множество решений (х, у) уравнения у2 = х2 + ах + Ь (3.1) над полем GF(p') вместе с дополнительной точкой называемой точкой в бесконечности. Представление эллиптической кривой в виде уравнения (3.1) носит название эллиптической кривой в форме Вейерштрасса. Обозначим количество точек на эллиптической кривой Е через #Е. Теорема Хассе гласит, что #Е =р + 1-1, где И =£ 277. #Е называется порядком кривойE,at-следом кривойЕ. Зададим бинарную операцию на Л' (в аддитивной записи) сле- дующими правилами: (1) ОО + оо = оо* (ii) V (х, у) е Е, (х, у) + °° = (х, у); (iii) V (х, у) е Е, (х, у) + (х, -у) = (iv) V (хь yi) е Е, (х2, у2) х2, (хь yj + (х2, у2) = (х3, Уз), где Хз = X2 - Х1 - х2, Уз =?1(Х1 -х3) — У1, И х2 ~ Х1 (v) V (Х1, У1) е Е, У1 Ф 0, (Xi, yj) + (хь yi) = (х3, у3), где х3 = X2 - 2xi, уз =?l(xi -х3) -yi и Зх[2 + а Л. —----------. 2У1 Множество точек эллиптической кривой Е с заданной таким образом операцией образует абелеву группу. Если #Е = р + 1, то кривая Е называется суперсингулярной. Эллиптическая не являющаяся суперсингулярной кривая Е над полем 6'Л’(2"') характеристики 2 задается следующим образом.
Определение 3.3. Пусть т > 3 - целое число. Пусть а, b е. GE(2'”), h^O. Эллиптической кривой Е над полем GF(2"') называ- ется множество решений (х, у) уравнения у1 + ху = х' + ах1 + h (3.2) над полем GF(2"') вместе с дополнительной точкой называе- мой точкой в бесконечности. Количество точек на кривой Е также определяется теоремой Хассе: q + 1 - 2y/q <# E<q +1 + 2y/q , где q = 2"'. Более того, #Е четно. Операция сложения на Е в этом случае задается следующими правилами: (1) ОО + ОО = ОО* (ii) V (х, у) е Е, (х, у) + °° = (х, у); (iii) V (х, у) е Е, (х, у) + (х, х + у) = (iv) V (хь yi) е Е, (х2, у2) е Е, xj Ф х2, (хь yi) + (х2, у2) = (х3, Уз), где х2 = X2 + X + Xi + х2 + а, уз = X(xj + х3) + х3 + уь и у _ У1 + У 2 Х| + х2 (v) V (xj, У1) е Е, Х1 Ф 0, (хь yj + (хь у0 = (х3, уз), где 2 х3 - -И + Х( Уз = х2 + (X + 1)хз И Я = х1 + —. Х( В этом случае множество точек эллиптической кривой Е с за- данной таким образом операцией также образует абелеву группу. Группа точек на кривой имеет простую структуру, а именно она является абелевой группой ранга 1 или 2, т.е. изоморфна прямому произведению двух циклических групп Zn xZn где щ
и «2 - целые числа, «2 делит щ и щ делит q - 1, где q - порядок поля коэффициентов, при этом щ может быть равно 1. Индекс подгруппы Z„ в группе точек называют кофактором эллипти- ческой кривой. Пользуясь операцией сложения точек на кривой, можно есте- ственным образом определить операцию умножения точки Р е Е на произвольное целое число и: пР = Р + Р+ ...+Р, где операция сложения выполняется и раз. Теперь построим одностороннюю функцию, на основе кото- рой можно будет создать криптографическую систему. Пусть Е - эллиптическая кривая, Р е Е- точка на этой кривой. Выберем целое число и < #Е. Тогда в качестве прямой функции выберем произведение пР. Для его вычисления по оптимальному алгоритму потребуется не более 21og2« операций сложения. Обратную задачу сформулируем следующим образом: по задан- ным эллиптической кривой Е, точке Р е Е и произведению пР найти и. В настоящее время все известные алгоритмы решения этой задачи требуют экспоненциального времени. Теперь мы можем описать криптографический протокол, ана- логичный известному протоколу Диффи-Хеллмана. Для установ- ления защищенной связи два пользователя А и В совместно выбирают эллиптическую кривую Е и точку Р на ней. Затем каждый из пользователей выбирает свое секретное целое число, соответственно а и Ь. Пользователь А вычисляет произведение аР, а пользователь В - ЬР. Далее они обмениваются вычислен- ными значениями. При этом параметры самой кривой, координа- ты точки на ней и значения произведений являются открытыми и могут передаваться по незащищенным каналам связи. Затем пользователь А умножает полученное значение на а, а пользова- тель В умножает полученное им значение на Ь. В силу свойств операции умножения на число а-ЬР = = h-аР. Таким образом, оба пользователя получат общее секретное значение (координаты точки аЬР), которое они могут использовать для получения ключа шифрования. Отметим, что злоумышленнику для восста- новления ключа потребуется решить сложную с вычислительной
точки зрения задачу определения а и b по известным Е, Р, аР и ЬР.
4. ЭЛЕКТРОННЫЕ ЦИФРОВЫЕ ПОДПИСИ 4.1. Постановка задачи Передача сообщения отправителем (пользователь А) получа- телю (пользователь В) предполагает передачу данных, побуж- дающую пользователей к определенным действиям. Передача данных может представлять собой передачу фондов между бан- ками, продажу акций или облигаций на автоматизированным рынке, а также передачу приказов (сигналов) по каналам электро- связи. Участники нуждаются в защите от множества злонамерен- ных действий, к которым относятся: - отказ - отправитель впоследствии отказывается от пере- данного сообщения; - фальсификация - получатель подделывает сообщение; - изменение - получатель вносит изменения в сообщение; - маскировка - пользователь маскируется под другого. Для верификации (подтверждения) сообщения М (пользова- тель А - пользователю В) необходимо следующее: - Отправитель (пользователь А) должен внести в М подпись, содержащую дополнительную информацию, зависящую от М и, в общем случае, от получателя сообщения и известной только отправителю закрытой информации кА. - Необходимо, чтобы правильную подпись М: SIG{kA, М, идентификатор В } в сообщении для пользователя В нельзя было составить без кЛ. - Для предупреждения повторного использования устарев- ших сообщений процедура составления подписи зависеть от времени. - Пользователь В должен иметь возможность удостоверить- ся, что SIG{kA, М, идентификатор В} - есть правильная подпись М пользователем А. Рассмотри эти пункты подробнее. 1. Подпись сообщения - определенный способ шифрования М путем криптографического преобразования. Закрываемым эле- ментом кЛ в преобразовании Идентификатор В, М>^> SIG{kA, М, идентификатор В} является ключ криптопреобразования.
Во всех практических криптографических системах кА при- надлежит конечному множеству ключей К. Исчерпывающая проверка всех ключей, задаваемых соответствующими парами <М, идентификатор В> SIG{kA, М, идентификатор В}. в общем должна привести к определению ключа кЛ злоумышлен- ником. Если множество К достаточно велико и ключ к определен методом случайного выбора, то полная проверка ключей невоз- можна. Говоря, что составить правильную подпись без ключа невозможно, мы имеем в виду, что определение SIG{kA, М, идентификатор В} без кА с вычислительной точки зрения эквива- лентно поиску ключа. 2. Доступ к аппаратуре, программам и файлам системы обра- ботки информации обычно контролируется паролями. Подпись - это вид пароля, зависящий от отправителя, получателя информа- ции и содержания передаваемого сообщения. 3. Подпись должна меняться от сообщения к сообщению для предупреждения ее повторного использования с целью проверки нового сообщения. Цифровая подпись отличается от рукописной, которая обычно не зависит от времени составления и данных. Цифровая и рукописная подписи идентичны в том смысле, что они характерны только для данного владельца. 4. Хотя получатель информации не может составить правиль- ную подпись, он должен уметь удостоверять ее подлинность. В обычных коммерческих сделках, таких, например, как продажа недвижимой собственности, эту функцию зачастую выполняет третье, независимое доверенное лицо (нотариус). Установление подлинности подписи - это процесс, посредст- вом которого каждая сторона устанавливает подлинность другой. Обязательным условием этого процесса является сохранение тайны. Во многих случаях нам приходится удостоверять свою личность, например, подписью или водительскими правами при получении денег по чеку либо фотографией в паспорте при пере- сечении границы. Для того чтобы в системе обработки данных получатель мог установить подлинность отправителя, необходи- мо выполнение следующих условий. - Отправитель (пользователь А) должен обеспечить получа- теля (пользователя В) удостоверяющей информацией
AUTH{kA, М, идентификатор В}, зависящей от секретной информации кл, известной только пользователю А. - Необходимо, чтобы удостоверяющую информацию AUTH{kA, идентификатор В} от пользователя А пользова- телю В можно было дать только при наличии ключа кЛ. - Пользователь В должен располагать процедурой проверки того, что AUTH{kA, идентификатор В} действительно под- тверждает личность пользователя А. - Для предупреждения использования предыдущей прове- ренной на достоверность информации процесс установле- ния подлинности должен иметь некоторую зависимость от времени. Отметим, что установление подлинности и верификация пере- даваемого сообщения имеют сходные элементы: цифровая под- пись является удостоверением подлинности информации с до- бавлением требования о ее зависимости от содержания переда- ваемого сообщения. 4.2. Алгоритмы электронной цифровой подписи 4.2.1. Цифровые подписи, основанные на асимметричных криптосистемах Для формирования системы ЭЦП можно использовать крипто- графическую систему Ривеста-Шамира-Адлемана. Пользователь А вырабатывает цифровую подпись предназна- ченного для пользователя В сообщения М с помощью следующе- го преобразования SIG(M) = Ew(EJa,„a (М)). При этом он использует: - свое секретное преобразование Ej „ ; - открытое преобразование Ее „в пользователя В. Затем он передает пользователю В пару <М, SIG(M)>. Пользователь В может верифицировать это подписанное со- общение сначала при помощи своего секретного преобразования Ej „в с целью получения Е</Л,„Л (М) =Е^„в (SIG(M)) = Е^„в (Eeaj„B (ErfAj„A (М))).
и затем открытого Ее „ ния М: пользователя А для получения сообще- М = Еел,„л (Е^„л (М)). Затем пользователь В производит сравнение полученного сооб- щения М с тем, которое он получил в результате проверки циф- ровой подписи, и принимает решение о подлинно- сти/подложности полученного сообщения. В рассмотренном примере проверить подлинность ЭЦП может только пользователь В. Если же требуется обеспечение возмож- ности верификации ЭЦП произвольным пользователем (напри- мер, при циркулярной рассылке документа), то алгоритм выра- ботки ЭЦП упрощается, и подпись вырабатывается по формуле SIG(M)= Е^„л (М), а пользователи осуществляют верификацию с использованием открытого преобразования отправителя (пользователя А): М = Еел1„л (SIG(M)) = Еел1„л (Ed^ (М)). Вместо криптосистемы RSA для подписи сообщений можно использовать и любую другую асимметричную криптосистему. Недостатком подобного подхода является то, что производи- тельность асимметричной криптосистемы может оказаться не- достаточной для удовлетворения предъявляемым требованиям. Возможным решением является применение специальной эффек- тивно вычислимой функции, называемой хэш-функцией или функцией хэширования. Входом этой функции является сообще- ние, а выходом - слово фиксированной длины, много меньшей, чем длина исходного сообщения. ЭЦП вырабатывается по той же схеме, но при этом используется не само сообщение, а значение хэш-функции от него. Это существенным образом ускорит выра- ботку и верификацию ЭЦП. Требования, предъявляемые к функ- циям хэширования, а также примеры хэш-функций рассмотрены в п. 4.3. Очень часто бывает желательно, чтобы электронная цифровая подпись была разной, даже если дважды подписывается одно и то же сообщение. Для этого в процесс выработки ЭЦП необходимо
внести элемент "случайности". Способ сделать это был предло- жен Эль-Гамалем, аналогично тому, как это делается в системе шифрования, носящей его имя. Выбирается большое простое число р и целое число g, являю- щееся примитивным элементом в Z,,. Эти числа публикуются. Затем выбирается секретное число х и вычисляется открытый ключ для проверки подписи у = gx (mod р). Далее для подписи сообщения М вычисляется его хэш- функция т = h(M). Выбирается случайное целое к: 1 < к < (р - 1), взаимно простое ср - 1, и вычисляется r = gk (modр). После этого с помощью расширенного алгоритма Евклида решается относи- тельно s уравнение т = xr + ks (mod р - 1). Подпись образует пара чисел (г, .s). После выработки подписи значение к уничтожается. Получатель подписанного сообщения вычисляет хэш- функцию сообщения т = h(M) и проверяет выполнение равенства у г (modр) = = gm. Корректность этого уравнения очевидна: У г = g V' = g r + = gm (mo d/Д. Еще одна подобная схема была предложена Шнорром. Как обычно, р - большое простое число, q - простой делитель (р - 1), g - элемент порядка q в Zp, к - случайное число, х и у = gx (mod р) — секретный и открытый ключи соответственно. Уравнения выработки подписи выглядят следующим образом: r = gk (modр);е = h(m, г); s = к + хе (mod q). Подписью является пара (г, .s). На приемной стороне вычисля- ется значение хэш-функции е = h(m, г) и проверяется выполнение равенства г = gye(mod />), при этом действия с показателями степени производятся по модулю q. Другой вариант подписи Шнорра выглядит так. Для подписи сообщения т автор выбирает случайное к е Z4, вычисляет g mod р,е = h(g\ т) и z = к + хе mod q. Подписью является тройка (т, е, z). Проверка подписи заключается в проверке равенства h(gzy е, т) = е. В самом деле, gy ‘ = gk+ xeg хе = gk. 4.2.2. Стандарт цифровой подписи DSS Новая редакция стандарта на выработку и верификацию циф- ровой подписи DSS (Digital Signature Standard) принята в США 7 января 2000 г. (FIPS PUB 186-2) Согласно этому стандарту, 86
электронная цифровая подпись может вырабатывается по одному из трех алгоритмов: DSA (Digital Signature Algorithm), основан- ному на проблеме логарифма в конечном поле, ANSI Х9.31 (RSA DSA) или ANSI Х9.63 (ЕС DSA - алгоритм выработки подписи, основанной на проблеме логарифма в группе точек эллиптиче- ской кривой над конечным полем). Опишем алгоритм DSA. 1. Предварительный этап - выбор параметров. Выбираются числа р, q и g, такие, что р - простое число, 21 1 < р < 21, где I кратно 64 и 512 < I < 1024; q - простой делитель числа р — 1 длиной 160 бит (2159 < q < 2|й(|); g — элемент порядка q в Zp. g выбирается в виде g = h{p l,z‘', где 1 < h < р - 1 и h(p 1,/<? > 1. Эти три числа являются открытыми данными и могут быть общими для группы пользователей. Выбирается секретный ключ х, 0 < х < q, и вычисляется от- крытый ключ для проверки подписи у = gv (mod р). 2. Выработка электронной цифровой подписи. Вычисляется значение хэш-функции от сообщения h(m). При этом используется алгоритм безопасного хэширования SHA-1 (Secure Hashing Algorithm), на который ссылается стандарт (FIPS PUB 180-1). Значение хэш-функции h(m) имеет длину 160 бит. Далее подписывающий выбирает случайное или псевдослу- чайное значение k, Q < к< q, вычисляет к'1 (mod q), и вырабатыва- ет пару значений: r~ g (mod /?)(mod q'y, s = кл (h(m) + xr) (mod q~) Эта пара значений (г, х) и является электронной подписью под сообщением М. После выработки цифровой подписи значение к уничтожается. 3. Верификация электронной цифровой подписи. Пусть было принято сообщение т\. Тогда уравнение проверки выглядит следующим образом: = • у’ ' (modp)(mod<7). В самом деле:
gh(m)i . ys (modp)(modq) = gh<m) i -g'1’' (modp)(mod<y)- = g’’l(A("',+ ")(modp)(mod<7) --. ,r' (*HM(modp)(mod^) - = g(k > (Л(и)+-« )(modp)(mod<7) -g* (modpXmodg) . Алгоритм выработки ЭЦП, основанный на эллиптических кривых, может быть описан следующим образом: I. Выбор параметров. Стандарт определяет поля, над которыми задаются эллиптиче- ские кривые. Это простые поля Галуа и поля Галуа характеристи- ки 2. Выбор полей в стандарте сделан исходя из требования повышения вычислительной эффективности машинных операций умножения в поле. Для этого в качестве простых модулей выбра- ны так называемые обобщенные числа Мерсенна (Табл. 4.1). Стандарт фиксирует кривые, которые должны использоваться в алгоритмах, и примерные базовые точки на этих кривых. Поль- зователь может либо воспользоваться приведенными в стандарте базовыми точками, либо сгенерировать свои, если, например, ему понадобится обеспечить криптографическое разделение сетей ЭВМ. В частности, кривые Р-192 ... Р-521 представляют собой эллиптические кривые простого порядка г вида у1 = х3 - Зх + b над полем GF(p). Таблица 4.1. Кривая Р Р-192 2192 _ 264 - 1 Р-224 2224 - 29(1 + 1 Р-256 2256 _ 2224 + 2192 + 296 _ J Р-384 2ЗМ _ 2128 _ 296 + 232 _ 1 Р-521 2321 - 1 Для задания кривых над полями характеристики 2 выбраны порождающие многочлены, указанные в табл. 4.2. При этом возможно использовать представление полей как в полиномиаль- ном, так и в нормальном базисах. Таблица 4.2. Кривая Порождающий многочлщ хо Тип нормальной базиса К-163, В-163 tlbi + t' + ? + ? + ! 4 К-233, В-233 tliS + //4 + 1 2
К-283, В-283 /2Ю + ?2 +/7 +t5 +1 6 К-409, В-409 + 1 4 К-571, В-571 t211 + /1и + t2 + t2 + 1 10 Коэффициенты h заданы для каждого размера поля. Например, кривая Р-521 задается коэффициентом h = 051 953eb961 8elc9alf 929а21а0 Ь68540ее a2da725b 99b315f3 Ь8Ь48991 8efl09el 56193951 ec7e937b 1652c0bd 3bblbfO7 3573df88 3d2c34fl ef451fd4 6Ь503ГО0 (в шестнадцатеричном виде) и имеет порядок г = 68647976601306097149819007990813932172694353 00143305409394463459185543183397655394245057746333217197 53296399637136332111386476861244038034037280889270700544 9 (в десятичной записи). Поскольку определенные в стандарте кривые имеют простой порядок, группы точек на них являются циклическими (кофактор этих кривых равен 1) и порядок базовой точки и в точности равен г. Для каждого из полей 6'Л’(2"') в стандарте указаны по 2 кри- вых: псевдослучайная вида у2 + ху = х2 + х' + Ь, имеющая кофак- тор 2, и специальная кривая Коблица, или аномальная двоичная кривая вида у2 + ху = х2 + ах2 + 1, где а - 0 или 1. Кофактор кри- вой Коблица равен 2, если а - 1 и 4, если а - 0. Например, для поля GF(2163) псевдослучайная кривая задается коэффициентом h = 2 0а601907 Ь8с953са 1481еЫ0 51217874 4a3205fd, а кривая Коблица коэффициентом а = 1. Генерация ключевой пары. Пользователь выбирает в качестве секретного ключа целое число d, 0 < d < и, где и - порядок базо- вой точки G на эллиптической кривой. Далее он вычисляет Q = dG и публикует Q в качестве открытого ключа. 2. Выработка ЭЦП. Для того, чтобы подписать сообщение т, пользователь: 1. выбирает случайное число к, 0 < к < и - 1; 2. вычисляет kG = (х\, yi), г = х\ mod и. Если г - 0, то пе- рейти к шагу 1; 3. вычисляет к 1 mod и; 4. вычисляет е = SHA(m). Выбор варианта функции хэши- рования осуществляется в зависимости от используемо- го поля. 5. вычисляет= к 1 (е + dr) mod и. Если - 0, то перейти к шагу 1; 6. Подписью сообщения т является пара (г, s).
3. Верификация ЭЦП. Для проверки подписи получатель сообщения выполняет сле- дующие действия: 1. проверяет, что г и лежат на интервале (0, и). 2. вычисляет е = SHA(m); 3. вычисляет w = .v 1 mod и; 4. вычисляет щ = ew mod и и и2 = rw mod и; 5. вычисляет X = irG + иХ). Если Х = то подпись отвер- гается, иначе, вычислить v = mod и, где Х= (хь yj; 6. Принять подпись, если и только если v = г. Корректность схемы доказывается несложно. Если сообщение т действительно подписано отправителем, то = к 1 (е + dr) mod и. Откуда к = s \е + dr) = s 'е + .v 'rd = we + wrd = щ + u-rl (mod и). Таким образом, uxG + u2Q = (щ + u2d)G = kG, и поэтому v = г, как и требуется. 4.2.3. Стандарт цифровой подписи ГОСТ Р 34.10-94 Российский стандарт ЭЦП разрабатывался позже первона- чального варианта американского, поэтому параметры этого алгоритма выбраны с учетом возросших возможностей потенци- ального противника по вскрытию криптосистем. В частности, увеличена длина значения хэш-функции, что снижает вероят- ность столкновений, и, соответственно, порядок элемента- генератора, что делает более сложным решение задачи дискрет- ного логарифма для восстановления секретного ключа. При описании алгоритма будут использоваться следующие обозначе- ния: В - множество всех конечных слов в алфавите В = {0,1}. |А| - длина слова А Vk(2) - множество всех двоичных слов длины к. А1|В - конкатенация слов А и В, также обозначается как АВ. Ак - конкатенация к экземпляров слова А. <N>k - слово длины к, содержащее запись N(mod 2к), где N - неотрицательное целое. © - побитовое сложение слов по модулю 2. [+] - сложение по правилу А [+] В = <А+В>к (к = |А| = |В|).
т - передаваемое сообщение. mi - полученное сообщение h - хэш-функция, отображающая последовательность т в сло- во h(m) е У25й(2). -,509 , --,512 - -,1020 - --,1024 р — простое число, 2 <р < 2 , либо 2 <р < 2 -,254 - - -,250 , q - простое число, 2 < q < 2 и q является делителем для (р -1). а - целое число, 1 < а <р - 1, при этом a^mod р) = 1. к - целое число, 0 < к < q. х - секретный ключ пользователя для формирования подписи, 0 < х < q. у - открытый ключ для проверки подписи, у = al(modр). Система ЭЦП включает в себя процедуры выработки и про- верки подписи под данным сообщением. Цифровая подпись, состоящая из двух целых чисел, вычисля- ется с помощью определенного набора правил, изложенных в стандарте. Числа/?, q и а, являющиеся параметрами системы, не являются секретными. Конкретный набор их значений может быть общим для группы пользователей. Целое число к, которое генерируется в процедуре подписи сообщения, должно быть секретным и долж- но быть уничтожено сразу после выработки подписи. Число к снимается с физического датчика случайных чисел или выраба- тывается псевдослучайным методом с использованием секретных параметров. Процедура выработки подписи включает в себя следующие шаги: 1. Вычислить h(m) - значение хэш-функции h от сообщения т. Если h(m)(mod q) - 0, то присвоить h(m) значение О255 1. 2. Выработать целое число к, Q < к< q. 3. Вычислить два значения: г' = a*(modр) и г = г' (mod q). Ес- ли г = 0, то перейти к шагу 2 и выработать другое значение числа к. 4. С использованием секретного ключа х пользователя вы- числить значение s = (xr + /di(m))(mod q). Если s - 0, то пе- рейти к шагу 2, в противном случае закончить работу ал- горитма. Заметим, что сообщение, дающее нулевое значение хэш- функции, не подписывается. В противном случае уравнение
подписи упростилось бы до s = xr (mod q) и злоумышленник легко мог бы вычислить секретный ключх. Проверка цифровой подписи возможна при наличии у получа- теля открытого ключа отправителя, пославшего сообщение. Уравнение проверки будет следующим: r = (asMm'> • у~' (modp))(mod<7). В самом деле, (ash(ni] • y^r'hl-ni> (modp))(mod<7) -(д'flim> ,а-'- ^ Мт) (modp))(mod^) = (modp)(mod<7) (x'' l/' /'l'"l J ' l(modp)(mod<7) _ = ak (modp)(mod<7) = r. Вычисления по уравнению проверки реализуются следующим образом: 1. Проверить условия: 0 < .s< q и 0 < г < q. Если хотя бы одно из этих условий не выполнено, то подпись считается не- действительной. 2. Вычислить h(wi|) - значение хэш-функции h от полученно- го сообщения т{. Если h(mi)(mod q) - 0, присвоить h(mi) значение 02551. 3. Вычислить значение v = (h(wii))'' 2(mod q), что является не чем иным, как мультипликативным обратным к h(mi) (mod q). Вообще говоря, алгоритм проверки можно несколько ускорить, если вычислять h^iX^mod q) с помощью рас- ширенного алгоритма Евклида, а не путем возведения в степень. 4. Вычислить значения: zi = .s v(mod q') и z2 = (q - r)v(mod q) 5. Вычислить значение U = (aZl yZ2 (mod p))(modq) 6. Проверить условие г = и При совпадении значений г и и получатель принимает реше- ние о том, что полученное сообщение подписано данным отпра- вителем и в процессе передачи не нарушена целостность сообще-
ния, т.е. mi = т. В противном случае подпись считается недейст- вительной. 4.2.4. Алгоритм цифровой подписи, основанный на эллипти- ческих кривых Берется эллиптическая кривая Е в форме Вейерштрасса над простым полем. Задается величина J(E), называемая инвариан- том эллиптической кривой: J(£) = 1728—------- (mod р) . 4а +2711 Коэффициенты а и h кривой Е определяются по известному инварианту следующим образом: а = Зк (mod р), J(E\ h = 2к (mod о), гОе к =------(mod о), J(E\ + 0,1728 1 1728-Д£) 1 Точку Q будем называть точкой кратности к, к е Z, если для некоторой точки Р выполнено равенство Q = кР. Параметрами схемы ЭЦП являются следующие значения: р — модуль эллиптической кривой, простое число,р > 2255; эллиптическая кривая, задаваемая инвариантом J(E) или ко- эффициентами а и Ь; целое число т - порядок группы точек эллиптической кривой Е; простое число q - порядок циклической подгруппы группы то- чек эллиптической кривой Е, для которого выполнены следую- щие условия: {т = nq, не Z, п > 1 2255 < q < 2256 базовая точка Р Ф °° на кривой, имеющая порядок q, т. е. удов- летворяющая равенству qP = Координаты этой точки обозна- чим через (хр, уЦ; хэш-функция, отображающая сообщения произвольной длины в множество двоичных векторов длины 256. Хэш-функция уста- навливается стандартом Р 34.11-94.
Каждый пользователь схемы ЭЦП должен обладать личной ключевой парой: секретный ключ пользователя - целое число d,0 < d < <7; открытый ключ пользователя - точка О с координатами (хч, уД, удовлетворяющая равенству dP = О. Параметры ЭЦП должны удовлетворять следующим услови- ям: р‘ * 1 (mod q), для всех целых /=1,2, ... В, где В удовлетворяет неравенству В > 11; т Ф /г, J(E) = 0, 1728. ЭЦП под сообщением М вырабатывается по следующему ал- горитму: 1. Вычислить хэш-функцию сообщения М -,h = h(M). 2. Вычислить целое число а, двоичным представлением кото- рого является вектор h, и определить е = а (mod q) . 3. Вычислить случайное целое число к, удовлетворяющее не- равенствам О < к < q-, 4. Вычислить точку эллиптической кривой С=кР и положить г = хс (mod q), где хс - х-координата точки С. Если г - 0, то вернуться на шаг 3. 5. Вычислить значение .v = (rd + ке) (mod q). Если .V = 0, то вернуться на шаг 3. 6. Вычислить двоичные вектора, соответствующие числам г и .S. Определить цифровую подпись £ = (г ||.?) как конкатенацию двух двоичных векторов. Для проверки подписи £ под полученным сообщением М не- обходимо выполнить следующие действия.
1. По полученной подписи вычислить целые числа г и s. Ес- ли выполнены неравенства 0 < г < q, 0 < л< q, то перейти к сле- дующему шагу. В противном случае подпись не верна. 2. Вычислить хэш-функцию полученного сообщения М :h = h(M). 3. Вычислить целое число а, двоичным представлением кото- рого является вектор h и определить е = a (mod q). 4. Вычислить значение v = е 1 (mod <?). 5. Вычислить значения Z| = sv (mod q), z2 = -rv (mod q). 6. Вычислить точку эллиптической кривой С = z{P + z2Q и оп- ределить R = хс (mod q), где хс - т-координата точки С. 7. Если выполнено равенство R = г, то подпись принимается, в противном случае подпись не верна. 4.2.5. Цифровые подписи, основанные на симметричных криптосистемах На первый взгляд, сама эта идея может показаться абсурдом. Действительно, общеизвестно, что так называемая «современ- ная», она же двухключевая криптография возникла и стала быст- ро развиваться в последние десятилетия именно потому, что ряд новых криптографических протоколов типа протокола цифровой подписи не удалось эффективно реализовать на базе традицион- ных криптографических алгоритмов, широко известных и хоро- шо изученных к тому времени. Тем не менее, это возможно. И первыми, кто обратил на это внимание, были родоначальники криптографии с открытым ключом У. Диффи и М. Хеллман, опубликовавшие описание подхода, позволяющего выполнять процедуру цифровой подписи одного бита с помощью блочного шифра. Прежде чем изложить эту идею, сделаем несколько замечаний о сути и реализациях цифровой подписи. Стойкость какой-либо схемы подписи (т.е. выполнение требо- ваний, описанных в п. 4. L) доказывается обычно установлением
равносильности соответствующей задачи вскрытия схемы какой- либо другой, о которой известно, что она вычислительно нераз- решима. Практически все современные алгоритмы ЭЦП основа- ны на так называемых «сложных математических задачах» типа факторизации больших чисел или логарифмирования в дискрет- ных полях. Однако, доказательство невозможности эффективного вычислительного решения этих задач отсутствует, и нет никаких гарантий, что они не будут решены в ближайшем будущем, а соответствующие схемы взломаны - как это произошло с «ранце- вой» схемой цифровой подписи. Более того, с бурным прогрес- сом средств вычислительных техники «границы надежности» методов отодвигаются в область все больших размеров блока. Всего пару десятилетий назад, на заре криптографии с открытым ключом считалось, что для реализации схемы подписи RSA достаточно даже 128-битовых чисел. Сейчас эта граница отодви- нута до 1024-битовых чисел - практически на порядок, - и это далеко еще не предел. Это приводит к необходимости переписы- вать реализующие схему программы, и зачастую перепроектиро- вать аппаратуру. Ничего подобного не наблюдается в области классических блочных шифров, если не считать изначально ущербного и непонятного решения комитета по стандартам США ограничить размер ключа алгоритма DES 56-ю битами, тогда как еще во время обсуждения алгоритма предлагалось использовать ключ большего размера. Схемы подписи, основанные на класси- ческих блочных шифрах, свободны от указанных недостатков: - во-первых, их стойкость к попыткам взлома вытекает из стойкости использованного блочного шифра, поскольку классические методы шифрования изучены гораздо боль- ше, а их надежность обоснована намного лучше, чем на- дежность асимметричных криптографических систем; - во-вторых, даже если стойкость использованного в схеме подписи шифра окажется недостаточной в свете прогресса вычислительной техники, его легко можно будет заменить на другой, более устойчивый, с тем же размером блока данных и ключа, без необходимости менять основные ха- рактеристики всей схемы - это потребует только мини- мальной модификации программного обеспечения; Итак, вернемся к схеме Диффи и Хеллмана подписи одного бита сообщения с помощью алгоритма, базирующегося на любом 96
классическом блочном шифре. Предположим, в нашем распоря- жении есть алгоритм зашифрования оперирующий блоками данных X размера и и использующий ключ размером ик: |А| = и, \К\ = пк. Структура ключевой информации в схеме следующая: секретный ключ подписи к$ выбирается как произвольная (слу- чайная) пара ключей /г(), к\ используемого блочного шифра: /<s = (/со,/<1); Таким образом, размер ключа подписи равен удвоенному размеру ключа использованного блочного шифра: |/<s| =2|к| =2ик. Ключ проверки представляет собой результат шифрования двух блоков текстаи А) с ключами к0 и к\ соответственно: /<v = (Cn, С0= (E/JXflXE/JX,)) где являющиеся параметром схемы блоки данных несекретны и известны проверяющей подпись стороне. Таким образом, размер ключа проверки подписи равен удвоенному размеру блока ис- пользованного блочного шифра: |/<v| = 2|А| =2и. Алгоритм Sig выработки цифровой подписи для бита t (t е {0,1}) заключается просто в выборе соответствующей полови- ны из пары, составляющей секретный ключ подписи: s = S(t) = kt. Алгоритм Ver проверки подписи состоит в проверке уравне- ния Eki(Xf) = Ct, которое, очевидно, должно выполняться для нашего t. Получателю известны все используемые при этом величины. Таким образом, функция проверки подписи будет следующей: Покажем, что данная схема работоспособна, для чего прове- рим выполнение необходимых свойств схемы цифровой подписи:
1. Невозможность подписать бит t, если неизвестен ключ подпи- си. Действительно, для выполнения этого злоумышленнику потребовалось бы решить уравнение Es(Xt) = Ct относительно s, что эквивалентно определению ключа для известных блоков шифрованного и соответствующего ему открытого текста, что вычислительно невозможно в силу использования стойкого шифра. 2. Невозможность подобрать другое значение бита t, которое подходило бы под заданную подпись, очевидна: число воз- можных значений бита всего два и вероятность выполнения двух следующих условий одновременно пренебрежимо мала в просто в силу использования криптостойкого алгоритма: ВД0 = С(), Е.т = с. Таким образом, предложенная Диффи и Хеллманом схема цифровой подписи на основе классического блочного шифра обладает такой же стойкостью, что и лежащий в ее основе блоч- ный шифр, и при этом весьма проста. Однако, у нее есть два существенных недостатка. Первый недостаток заключается в том, что данная схема по- зволяет подписать лишь один бит информации. В блоке большего размера придется отдельно подписывать каждый бит, поэтому даже с учетом хэширования сообщения все компоненты подписи - секретный ключ, проверочная комбинация и собственно под- пись получаются довольно большими по размеру и более чем на два порядка превосходят размер подписываемого блока. Предпо- ложим, что в схеме используется криптографический алгоритм £к. с размером блока и ключа, соответственно и и Предполо- жим также, что используется функция хэширования с размером выходного блока ин. Тогда размеры основных рабочих блоков будут следующими: размер ключа подписи: h*s = 2ин ик. размер ключа проверки подписи: пс = 2пнп. размер подписи: щ = «н • «к- Если, например, в качестве основы в данной схеме будет ис- пользован шифр ГОСТ 28147-89 с размером блока п = 64 бита и размером ключа «к = 256 бит, и для выработки хэш-блоков будет
использован тот же самый шифр в режиме выработки имитов- ставки, что даст размер хэш-блока ин = 64 то размеры рабочих блоков будут следующими: размер ключа подписи: h*s = 2ин ик = 2-64-256 бит= 4096 байт; размер ключа проверки подписи: пс = 2ини = 2-64-64 бит 1024 байта. размер подписи: hs = «н • «к = 64-256 бит - 2048 байт. Второй недостаток данной схемы, быть может, менее заметен, но столь же серьезен. Дело в том, что пара ключей выработки подписи и проверки подписи могут быть использованы только один раз. Действительно, выполнение процедуры подписи бита сообщения приводит к раскрытию половины секретного ключа, после чего он уже не является полностью секретным и не может быть использован повторно. Поэтому для каждого подписывае- мого сообщения необходим свой комплект ключей подписи и проверки. Это практически исключает возможность использова- ния рассмотренной схемы Диффи-Хеллмана в первоначально предложенном варианте в реальных системах ЭЦП. Однако, несколько лет назад Березин и Дорошкевич предло- жили модификацию схемы Диффи-Хеллмана, фактически устра- няющую ее недостатки. Центральным в этом подходе является алгоритм «односторон- ней криптографической прокрутки», который в некотором роде может служить аналогом операции возведения в степень. Как обычно, предположим, что в нашем распоряжении имеется крип- тографический алгоритм /Д с размером блока данных и ключа соответственно и и бит, причем и<ик. Пусть в нашем распо- ряжении также имеется некоторая функция отображения п- битовых блоков данных в «к-битовые Y ~ ,11к(Х). \Х\ = п, У | = «к- Определим рекурсивную функцию Rk «односторонней прокрутки» блока данных Т размером и бит к раз (к > 0) при помощи следующей формулы: [Г, к = 0, где X — произвольный несекретный «-битовый блок данных, являющийся параметром процедуры прокрутки. По своей идее
функция односторонней прокрутки чрезвычайно проста, надо всего лишь нужное количество раз (к) выполнить следующие действия: расширить «-битовый блок данных Т до размера ключа использованного алгоритма шифрования (ик), на полученном расширенном блоке как на ключе зашифровать блок данных X, результат зашифрования занести на место исходного блока дан- ных (Г). По определению операция Rk(T) обладает двумя важ- ными для нас свойствами: 1. Аддитивность и коммутативность по числу прокручиваний: Rm(T) = RMT)) = Rk(R,(T)). 2. Односторонность или необратимость прокрутки: если извест- но только некоторое значение функции Rk(T), то вычислитель- но невозможно найти значение Rn(T) для любого к' < к — ес- ли бы это было возможно, в нашем распоряжении был бы спо- соб определить ключ шифрования по известному входному и выходному блоку алгоритма Е^. что противоречит предполо- жению о стойкости шифра. Теперь покажем, как указанную операцию можно использо- вать для подписи блока Т, состоящего из пт битов. Секретный ключ подписи /<х выбирается как произвольная па- ра блоков /to, /<1, имеющих размер блока данных используемого блочного шифра, т.е. размер ключа выработки подписи равен удвоенному размеру блока данных использованного блочного шифра: |/<s| = 2и; Ключ проверки подписи вычисляется как пара блоков, имею- щих размер блоков данных использованного алгоритма по сле- дующим формулам: кс = (Со,С1) = (Rzni i(A'o), R?ni В этих вычислениях также используются несекретные блоки данных X) и Xi, являющиеся параметрами функции «односторон- ней прокрутки», они обязательно должны быть различными. Таким образом, размер ключа проверки подписи также равен удвоенному размеру блока данных использованного блочного шифра: |/<с| = 2и. Вычисление и проверка ЭЦП будут выглядеть следующим об- разом:
Алгоритм Sign, выработки цифровой подписи для ит-битового блока Т заключается в выполнении «односторонней прокрутки» обеих половин ключа подписи Т и 2"-1-7’раз соответственно: 5 = Sign\T) = (50,5.) = RT(k(^R2„T А Т(к{)). Алгоритм Кег„т проверки подписи состоит в проверке истин- ности соотношений R2„r (л’О) = Со, RT (л’() = С(, которые, оче- видно, должны выполняться для подлинного блока данных Т: Rin' 1 r(^o) = Rin' 1 = Rin' 1 т+т(ко) = R2"> 1(/со) = Со, Rt(si) = RARin' 1 Д/ci)) = Rr+2n' i т(к\) = R2n< i(/<i) = Ci. Таким образом, функция проверки подписи будет следующей: [1, R2„т (?()) = Со&RT(si) = С[, Ver(T,s,kc) = \ 1 ' 1 [Q,R2nT_{T(s(]^C(]\RT(s{^C{. Покажем, что для данной схемы выполняются необходимые условия работоспособности схемы подписи: Предположим, что в распоряжении злоумышленника есть ит- битовый блок Г, его подпись 5 = CsoAi), и ключ проверки /<с = (С0,С1). Пользуясь этой информацией, злоумышленник пытается найти правильную подпись s’= для другого ит- битового блока Г. Для этого ему надо решить следующие урав- нения относительно s(\ и Д: ^2Л| 1 г(,?о) = Со, Rt<s[) = Cl В распоряжении злоумышленника есть блок данных Т с под- писью 5 = (,?«,,?i), что позволяет ему вычислить одно из значений 5(),Д, даже не владея ключом подписи: (а) если Т < Т', то su = RT'(ka) = Rf f(RT(ko)^ = Rt' t(so)> (b) если Т > Г, то л'! = R2n< 1 т'(к\) = Rt T'(,Rin' 1 r(^i)) = Rt rC'i). Однако для нахождения второй половины подписи (sj и Sn в случаях (а) и (Ь) соответственно) ему необходимо выполнить прокрутку в обратную сторону, т.е. найти Д(А), располагая
только значением для большего к, что является вычислительно невозможным. Таким образом, злоумышленник не может подде- лать подпись под сообщением, если не располагает секретным ключом подписи. Второе требование также выполняется: вероятность подобрать блок данных Г, отличный от блока Т, но обладающий такой же цифровой подписью, чрезвычайно мала и может не приниматься во внимание. Действительно, пусть цифровая подпись блоков Т и Т' совпадает. Тогда подписи обоих блоков будут равны соответ- ственно: 5 = S„t(T) = CwO = (RAku), ! r(/fl)), s' = Sni(T') = (.<>,.s'!) = (Rr(kA, R^ i r№)), но s=s’, следовательно: Rr(ko) — Rr(ku) и Rin‘ i r(ki) = R?ni i r(k\). Положим для определенности T< Т, тогда справедливо сле- дующее: Rr т(ко) = /to, Rr т(к\) = /<1, где /<о = RAJA), к\ = Rin< i r(JA) Последнее условие означает, что прокручивание двух различ- ных блоков данных одно и то же число раз оставляет их значения неизменными. Вероятность такого события чрезвычайно мала и может не приниматься во внимание. Таким образом рассмотренная модификация схемы Диффи- Хеллмана делает возможным подпись не одного бита, а целой битовой группы. Это позволяет в несколько раз уменьшить размер подписи и ключей подписи/проверки данной схемы. Однако надо понимать, что увеличение размера подписываемых битовых групп приводит к экспоненциальному росту объема необходимых вычислений и начиная с некоторого значения делает работу схемы также неэффективной. Граница «разумного размера» подписываемой группы находится где-то около десяти бит, и блоки большего размера все равно необходимо подписывать «по частям». Теперь найдем размеры ключей и подписи, а также объем не- обходимых для реализации схемы вычислений. Пусть размер
хэш-блока и блока используемого шифра одинаковы и равны и, а размер подписываемых битовых групп равен ит. Предположим также, что если последняя группа содержит меньшее число би- тов, обрабатывается она все равно как полная ит-битовая группа. Тогда размеры ключей подписи/проверки и самой подписи сов- падают и равны следующей величине: 2 I Ks 1=1 Кс 1=1 .V |= 2иГ—-1 = 2— бит, Пу п? где обозначает округление числа х до ближайшего целого в сторону возрастания. Число операций шифрования тре- буемое для реализации процедур схемы, определяются нижесле- дующими соотношениями: при выработке ключевой информации оно равно: IVк = 2 (2"' - 1)Г—1 =--, Ylj- Ylj- при выработке и проверке подписи оно вдвое меньше: = (2я' - 1)Г—1 = —-. Размер ключа подписи и проверки подписи можно дополни- тельно уменьшить следующими приемами: 1. Нет необходимости хранить ключи подписи отдельных бито- вых групп, их можно динамически вырабатывать в нужный момент времени с помощью генератора криптостойкой гаммы. Ключом подписи в этом случае будет являться обычный ключ использованного в схеме подписи блочного шифра. Например, если схема подписи будет построена на алгоритме ГОСТ 28147-89, то размер ключа подписи будет равен 256 битам. 2. Аналогично, нет необходимости хранить массив ключей проверки подписи отдельных битовых групп блока, достаточ- но хранить его значение хэш-функции этого массива. При этом алгоритм выработки ключа подписи и алгоритм проверки подписи будут дополнены еще одним шагом - вычислением хэш-функции массива проверочных комбинаций отдельных битовых групп.
Таким образом, проблема размера ключей и подписи решена, однако, второй недостаток схемы - одноразовость ключей - не преодолен, поскольку это невозможно в рамках подхода Диффи- Хеллмана. Для практического использования такой схемы, рас- считанной на подпись N сообщений, отправителю необходимо хранить N ключей подписи, а получателю - N ключей проверки, что достаточно неудобно. Эта проблема может быть решена в точности так же, как была решена проблема ключей для множе- ственных битовых групп - генерацией ключей подписи для всех N сообщений из одного мастер-ключа и свертывание всех прове- рочных комбинаций в одну контрольную комбинацию с помо- щью алгоритма вычисления хэш-функции. Такой подход решил бы проблему размера хранимых ключей, но привел бы к необхо- димости вместе подписью каждого сообщения высылать недос- тающие 2V-1 проверочных комбинаций, необходимых для вычис- ления хэш-функции массива всех контрольных комбинаций отдельных сообщений. Ясно, что такой вариант не обладает преимуществами по сравнению с исходным. Упомянутыми выше авторами был предложен механизм, позволяющий значительно снизить остроту проблемы. Его основная идея - вычислять кон- трольную комбинацию (ключ проверки подписи) не как хэш- функцию от линейного массива проверочных комбинаций всех сообщений, а попарно - с помощью бинарного дерева. На каждом уровне проверочная комбинация вычисляется как хэш-функция от конкатенации двух проверочных комбинаций младшего уров- ня. Чем выше уровень комбинации, тем больше отдельных клю- чей проверки "учитывается" в ней. Предположим, что наша схема рассчитана на 1L сообщений. Обозначим через z-тую комби- нацию /-того уровня. Если нумерацию комбинаций и уровней начинать с нуля, то справедливо следующее условие: 0 < z < 1L l, а z-ая проверочная комбинация /-того уровня рассчитана на 21 сообщений с номерами от i-2l до (z +1)-2-1 включительно. Число комбинаций нижнего, нулевого уровня равно 2Л, а самого верхне- го, /.-того уровня - одна, она и является контрольной комбинаци- ей всех 2l сообщений, на которые рассчитана схема. На каждом уровне, начиная с первого, проверочные комбинации рассчиты- ваются по следующей формуле:
Ц,/+" =H(C^ II c^+1), где через Л||5 обозначен результат конкатенации двух блоков данных А и В, а через Н(Х) - процедура вычисления хэш- функции блока данныхХ Уровень Рис. 4.1. Двоичное дерево для схемы ЭЦП на 8 сообщений При использовании указанного подхода вместе с подписью сообщения необходимо передать неЛМ, как в исходном вариан- те, а только log2TV контрольных комбинаций. Передаваться долж- ны комбинации, соответствующие смежным ветвям дерева на пути от конечной вершины, соответствующей номеру использо- ванной подписи, к корню. Пример организации проверочных комбинаций в виде двоич- ного дерева в схеме на восемь сообщений приведена на рисунке 4.1. Так, при передаче сообщения № 5 (контрольная комбинация выделена рамкой) вместе с его подписью должны быть переданы контрольная комбинация сообщения № 4 (С^'1), общая для сооб- щений №№ 6-7 (С1!,1 ’) и общая для сообщений №№ 0-3 (С^ ), все они выделены на рисунке другим фоном. При проверке подписи значение будет вычислено из со- общения и его подписи, а итоговая контрольная комбинация, подлежащая сравнению с эталонной, по следующей формуле: С= = C^,J) II Сз1’)). Необходимость отправлять вместе с подписью сообщения до- полнительную информацию, нужную для проверки подписи, на самом деле не очень обременительна. Действительно, в системе
на 1024=210 подписей вместе с сообщением и его подписью необходимо дополнительно передавать 10 контрольных комби- наций, а в системе на 1048576 = 220 подписей - всего 20 комби- наций. Однако, при большом числе подписей, на которые рассчи- тана система, возникает другая проблема - хранение дополни- тельных комбинаций, если они рассчитаны предварительно, или их выработка в момент формирования подписи. Дополнительные контрольные комбинации, которые переда- ются вместе с подписью и используются при ее проверке, выра- батываются при формировании ключа проверки по ключу подпи- си и могут храниться в системе и использоваться в момент фор- мирования подписи, либо вычисляться заново в этот момент. Первый подход предполагает затраты дисковой памяти, так как необходимо хранить 2£+1-2 значений хэш-функции всех уровней, а второй требует большого объема вычислений в момент форми- рования подписи. Можно использовать и компромиссный подход - хранить все хэш-комбинации начиная с некоторого уровня I, а комбинации меньшего уровня вычислять при формировании подписи. В рассмотренной выше схеме подписи на 8 сообщений можно хранить все 14 контрольных комбинаций, используемых при проверки (всего их 15, но самая верхняя не используется), тогда при проверке подписи их не надо будет вычислять заново. Можно хранить 6 комбинаций начиная с уровня 1 (d^, d^\ d?\ 6^ , ।’*), тогда при проверке подписи сообщения № 5 необ- ходимо будет заново вычислить комбинацию d"\ а остальные (d^,d3'}) взять из таблицы, и т.д.. Указанный подход позволяет достичь компромисса между быстродействием и требованиям к занимаемому количеству дискового пространства. Отметим, что отказ от хранения комбинаций одного уровня приводит к эконо- мии памяти и росту вычислительных затрат примерно вдвое, то есть зависимость носит экспоненциальный характер. 4.3. Функции хэширования Функция хэширования Н представляет собой отображение, на вход которого подается сообщение переменной длины М, а выходом является строка фиксированной длины Н(М). В общем случае Н(М) будет гораздо меньшим, чем М, например, Н(М)
может быть 128 или 256 бит, тогда как М может быть размером в мегабайт или более. Функция хэширования может служить для обнаружения мо- дификации сообщения. То есть, она может служить в качестве криптографической контрольной суммы (также называемой кодом обнаружения изменений (MDC - Manipulation Detection Code) или проверкой целостности сообщения (MIC - Message Integrity Check)). Теоретически возможно, что два различных сообщения могут быть сжаты в одну и ту же свертку (так называемая ситуация "столкновения"). Поэтому для обеспечения стойкости функции хэширования необходимо предусмотреть способ избегать столк- новений. Полностью столкновений избежать нельзя, поскольку в общем случае количество возможных сообщений превышает количество возможных выходных значений функции хэширова- ния. Однако вероятность столкновения должна быть низкой. Для того, чтобы функция хэширования могла должным обра- зом быть использована в процессе аутентификации, функция хэширования Н должна обладать следующими свойствами: 1. Н может быть применена к аргументу любого размера; 2. Выходное значение Н имеет фиксированный размер; 3. 11(т) достаточно просто вычислить для любого х. Ско- рость вычисления хэш-функции должна быть такой, что- бы скорость выработки и проверки ЭЦП при использова- нии хэш-функции была значительно больше, чем при ис- пользовании самого сообщения; 4. Для любого у с вычислительной точки зрения невозмож- но найти х, такое что Н(х)=у. 5. Для любого фиксированного х с вычислительной точки зрения невозможно найти х' Ф х, такое что Н(х')=Н(х). Свойство 5 гарантирует, что не может быть найдено другое сообщение, дающее ту же свертку. Это предотвращает подделку и также позволяет использовать Н в качестве криптографической контрольной суммы для проверки целостности. Свойство 4 эквивалентно тому, что Н является односторонней функцией. Стойкость систем с открытыми ключами зависит от того, что открытое криптопреобразование является односторон- ней функцией-ловушкой. Напротив, функции хэширования явля- ются односторонними функциями, не имеющими ловушек.
Классическая хэш-функция является открытым преобразова- нием. В специальном случае, когда она зависит от ключа, резуль- тат ее вычисления носит название кода аутентификации сооб- щения (МАС - Message Authentication Code). 4.3.1. Функция хэширования SHA Алгоритм безопасного хэширования SHA (Secure Hash Algo- rithm) принят в качестве стандарта США в 1992 г. и предназначен для использования совместно с алгоритмом цифровой подписи, определенным в стандарте DSS. При вводе сообщения М алго- ритм вырабатывает 160-битовое выходное сообщение, называе- мое сверткой (Message Digest), которая и используется при выра- ботке ЭЦП. Рассмотрим работу алгоритма подробнее. Прежде всего исходное сообщение дополняется так, чтобы его длина стала кратной 512 битам. При этом сообщение дополняется даже тогда, когда его длина уже кратна указанной. Процесс происходит следующим образом: добавляется единица, затем столько нулей, сколько необходимо для получения сообщения, длина которого на 64 бита меньше, чем кратная 512, и затем добавляется 64-битовое представление длины исходного сообще- ния. Далее инициализируются пять 32-битовых переменных сле- дующими шестнадцатеричными константами: А = 67452301 В = EFCDAB89 С = 98BADCFE D= 10325476 E = C3D2E1FO, Далее эти пять переменных копируются в новые переменные а, Ь, с, d и е соответственно. Главный цикл может быть довольно просто описан на псевдо- коде следующим образом: for (t = 0; t < 80; /++){ temp = (a «< 5)+f,(6, c, d) + e + Wz + K,; e = d,d = c,c = b «< 30; b = a,a = temp', где «< - операция циклического сдвига влево; 108
К, - шестнадцатеричные константы, определяемые по сле- дующим формулам: 5А827999, / = 0..19 6ED9EBA1, t = 20.39 8F1BBCDC, t = 40. 59 ’ CA62C1D6, / = 60..79 функции ft(x, у, z) задаются следующими выражениями: XaYv-iXaZ, t = 0..19 f(x,y,z)t= X®Y®Z, t = 20..39, 60..79 XaYvXaZvYaZ, t = 40..59 значения W, получаются из 32-битовых подблоков 512- битового блока расширенного сообщения по следующему прави- лу: [М., t = 0..19 wt = ‘ [(Wt_3®Wt_8®Wt_14®Wt_16)<«l, t = 16..79 После окончания главного цикла значения a, h, с, d и е скла- дываются с содержимым А, В, С, D и Е соответственно и осуще- ствляется переход к обработке следующего 512-битового блока расширенного сообщения. Выходное значение хэш-функции является конкатенацией значений А, В, С, D и Е. 4.3.2. Функции хэширования SHA-256, SHA-512 и SHA-384 Стойкость функции хэширования к поиску столкновений при- мерно равна 2я 2, где п - длина выходного значения функции. В связи с разработкой в США нового стандарта шифрования с длиной ключа 128, 192 и 256 бит, потребовалось создать "сопро- вождающие" алгоритмы, обеспечивающие такой же уровень стойкости. В этом пункте описаны алгоритмы вычисления функ- ций хэширования с длиной выходного значения 256, 512 и 384 бита, которые предполагается принять в качестве нового стандар- та США. Рассмотрим вначале алгоритм SEIA-256. Его описание можно разбить на две части - описание функции сжатия и алгоритма обработки сообщения. Функция сжатия представляет собой по 109
сути алгоритм блочного шифрования с размером блока 256 бит промежуточного значения функции хэширования с использова- нием очередного текстового блока в качестве ключа. Помимо обычных обозначений, при описании функции мы будем исполь- зовать следующие: R" - сдвиг слова вправо на и позиций и S" - циклический сдвиг слова вправо и позиций. Размер слова равен 32 битам. Сложение производится по модулю 2j2. Стартовый вектор хэширования //0) представляет собой набор из 8 32- разрядных слов, получаемых взятием дробной части квадратных корней первых 8 простых чисел: //0) = {6а09е667, ЬЬ67ае85, 3c6ef372, a54ff53a, 510e527f, 9Ь05688с, If83d9ab, 5be0cdl9}. Далее вычисление происходит по следующей схеме. 1. Предварительная обработка. Хэшируемое сообщение внача- ле дополняется битовой строкой так, что его длина становится кратной 512 битам. Способ дополнения аналогичен использован- ному в алгоритме SHA-1: добавляется 1, затем столько нулей, чтобы длина стала на 64 меньше кратной 512 и затем добавляется 64-битовое представление длины исходного сообщения. 2. Сообщение разбивается на блоки по 512 бит Л^1>, Л/*2), ..., Л#°. 3. Основной цикл: for i = 1 to N { UN - количество блоков в дополненном сообще- нии // Инициализировать регистры a, b, с, d, e,f g, h (i - 1)-м // промежуточным значением хэш-функции а = Н ।' "; h = Н ; с. = Н ,d=H е = Н ',f=H ,g=H \h , 2 ’J о ’ ° / ’ л ’ Применить функцию сжатия SHA-256 к регистрам а, Ь;..., /7. for / = 0 to 63 { Вычислить Ch(e,f g), Maj(a, h, c), So(a), Si(e), and Wj И Определения см. ниже l\ = h + Si(e) + Ch(e, f g) + + Wj ?2 = Xn(a) + Maj(a, b, c) h=g-,g=f,f= C e = d+ Tj
d = с; с = b; b = a; a = T\ + T-, } // вычислить i-e промежуточное значение H(.i} = a + ;H(‘} = b + ;K ; H{'} =h + H(‘A) I I Z Z ft ft } //(W) = (H(/V), H(N), H(N), H(N) H(N)^ H(N), H(N), ^N)) и буд£т искомым значением хэш-функции сообщения М. В SHA-256 используются шесть логических функций, аргу- менты и значения которых - 32-битовые слова. С7г(х; у; z) = (х л у) © (—>х л z) Maj(x, у, z) =(х л у) © (х л z) © (у л z) ад =s\x) © .s-l5(x) © s22(x) Si(x) =56(x) © .S’"(x) © S25(x) ад =S\x) © Sis(x) © R3(x) ад =s17(x) © s19(x) © л10(х) Блоки расширенного сообщения Ибз вычисляются сле- дующим образом: for j = 16 to 63 { Wj = ,) +№, 7 + ад 15) + 16 } Слова-константы K{}, берутся как первые 32 бита дроб- ных частей кубических корней первых 64 простых чисел, и в 16- ричном виде представлены здесь: 428a2f98 71374491 bScOfbcf e9b5dba5 3956c25b 59fl 1 Ifl 923f82a4 ablcSedS d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deblfe 9bdc06a7 cl9bfl74 e49b69cl efbe4786 0fcl9dc6 240calcc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7 сбеООЫЗ d5a79147 06ca6351 14292967 27b70a85 2elb2138 4d2c6dfc 53380dl3 650a7354 766a0abb 81c2c92e 92722c85 a2bfe8al a81a664b с24Ь8Ь70 c76c51a3 dl92e819 d6990624 f40e3585 106aa070 19a4cll6 le376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2 Функция SHA-512 подобна по своей структуре SHA-256, но работает с размером слова 64 бита. Вначале текст дополняется
так, чтобы его длина была кратна 1024. Процедура дополнения аналогична: добавляется 1, затем столько нулей, что длина текста станет на 128 меньше, нежели кратная 1024, а затем 128-битовое представление длины исходного текста. Стартовый вектор хэширования также задается аналогично: берутся первые 64 бита дробных частей квадратных корней первых 8 простых чисел: Н(0) = {6а09е667ВЬсс908, ЬЬ67ае8584саа73Ь, 3c6ef372fe94f82b, a54ff53a5fld36fl, 510e527fade682dl, 9b05688c2b3e6clf, 1 f83d9abfb4 lbd6b, 5be0cd 19137e2179}. Далее исходный текст разбивается на блоки по 1024 бита Л/1}, Л/2), ..., После чего блоки обрабатываются последовательно. Основной цикл вычислений выглядит точно так же, как и в случае SHA-256, только вычисляемые функции и производимые операции определены на 64-битовых словах, а не на 32-битовых (в частности, сложение выполнятся по модулю 2й4). Функция сжатия отличается только количеством итераций в цикле: for / = 0 to 79 { Вычислить Ch(e,f g), Maj(a, b, с), Д/а), 2Де), and T\ = h + Zi(e) + Ch(e, f g) + Kj + Wj Д = Д)(а) + Maj(a, b, c) h=g-,g=f,f=e-,e = d+T\ d= c\c = b\b = a;a = 1\ + Д Искомым значением хэш-функции исходного сообщения М будет H(N) = (h[N) , H(2N), H(2N), H(4N) ,H(sN), H[N), H(yN), H(SN)). Отличия есть только в определении некоторых используемых логических функций, а именно: ЭД =S2S(x) © .S'54(x) © .S”9(x) ЭД =S14(x) © S18(x) © S41^) ад =5'(x) © Ли © r’(x) ад -s'l9(xj © s61^) © Блоки расширенного сообщения Wo, ..., И79 вычисляются ана- логично SHA-256: Wf = М(‘}, j = 0,...,15 ; for / = 16 to 79 { Wj = (510Д- ,) +Wj 7 + GO(WI 15) + wf 16
Слова-константы Ко, берутся как первые 64 бита дроб- ных частей кубических корней первых 80 простых чисел, и в 16- ричном виде представлены здесь: 428a2198d728ac22 7137449123cf65cd b5c0fbcfcc4d3b2f c9b5dba58189dbbc 3956c25bf348b538 59fl 1 lflb605d019 923ffi2a4afl 9419b ablc5cd5da6d8118 d807aa98a3030242 12835b0145706fbc 243185bc4cc4b28c 550c7dc3d5ffb4c2 72bc5d74f27b896f 80dcblfc3bl696bl 9bdc06a725c71235 cl9bfl74cf692694 c49b69cl9cfl4ad2 cfbc4786384f25c3 0fcl9dc68b8cd5b5 240calcc77ac9c65 2dc92c6f592b0275 4a7484aa6ca6c483 5cb0a9dcbd41fbd4 761988da831153b5 983c5152cc66dfab a831c66d2db43210 b00327c898fb213f bf597fc7bccfl)cc4 c6c00bf33da88fc2 d5a79147930aa725 06ca635lc003826f 142929670a0c6c70 27b70a8546d22ffc 2clb21385c26c926 4d2c6dfc5ac42acd 53380dl39d95b3df 650a73548baf63dc 766a0abb3c77b2a8 8 Ic2c92c47cdacc6 92722c851482353b a2bfc8al4cfl0364 a8 la664bbc423001 c24b8b70d0189791 c76c5 la30654bc30 dl92c819d6cf5218 d69906245565a910 f40c35855771202a 106aa07032bbdlb8 19a4cll6b8d2d0c8 1с376с085141аЬ53 2748774cdf8ccb99 34b0bcb5cl9b48a8 391c0cb3c5c95a63 4cd8aa4ac3418acb 5b9cca4f7763c373 682c6ff3d6b2b8a3 748f82cc5dcfb2fc 78a5636f43172f60 84c87814alfOab72 8cc70208 la6439cc 90bcfffa23631c28 a4506ccbdc82bdc9 bcf9a3f7b2c67915 c67178f2c372532b ca273cccca26619c dl86b8c721c0c207 cada7dd6cdc0cblc f57d4f7fcc6cdl78 061067aa72176fba 0a637dc5a2c898a6 11319804bcf90dac lb710b3513 lc47 lb 28db77f523047d84 32caab7b40c72493 3c9cbc0al5c9bcbc 431d67c49cl00d4c 4cc5d4bccb3c42b6 597f299cfc657c2a 5fcb6fab3ad6facc 6c44198c4a475817. Функция SHA-384 определяется точно так же, как и функция SHA-512 с тем исключением, что в качестве стартового вектора хэширования берутся первые 64 бита квадратных корней простых чисел с девятого по шестнадцатое: Н(0) = {cbbb9d5dcl059ed8, 629a292a367cd507, 9159015a3070ddl7, 152fecd8f70e5939, 67332667ffc00b31, 8eb44a8768581511, db0c2e0d64f98fa7, 47b5481dbefa4fa4}. Далее выход функции обрезается до 384 левых бит и эти биты берутся в качестве значения функции хэширования SHA-384. 4.3.3. Функция хэширования ГОСТ Р 34.11-94 При описании функции хэширования будут использоваться те же обозначения, что использовались при описании алгоритма выработки цифровой подписи согласно ГОСТ Р 34.10, и, кроме того, пусть М - последовательность двоичных символов, подлежащих хэшированию.
h - хэш-функция, отображающая последовательность М в сло- во h(M) е V256(2). ЕДА) - результат шифрования слова А на ключе К с исполь- зованием алгоритма шифрования по ГОСТ 28147 в режиме про- стой замены. Н - стартовый вектор хэширования. Общие положения Под хэш-функцией h понимается отображение h: В V256(2). Для определения хэш-функции необходимы: алгоритм вычисления шаговой функции хэширования к, где к: V256(2)xV256(2) V256(2); описание итеративной процедуры вычисления значения хэш-функции h. Алгоритм вычисления шаговой функции хэширования состоит из трех частей: генерации четырех 256-битных ключей; шифрующего преобразования - шифрования 64-битных подслов слова Н на ключах К, (i - 1,2, 3, 4) с использо- ванием алгоритма ГОСТ 28147 в режиме простой заме- ны; перемешивающего преобразования результата шифрова- ния. Генерация ключей. Рассмотрим X = (Z>256, Ь255, ..., hi) е V256(2). Пусть X = Х4|И*2Д1 = Р1б||Т115||. • -||Т]1 = ЫЫ1-• гдех,е V64(2), i = 1..4; т]2е V16(2)J- 1.. 16; ^eVs(2), к= 1..32. Обозначим А(Х) = (эц © х2)||х4||хз||х2. Задается преобразование Р: V256(2)—»У25б(2) слова Е,з2||.. .||S,i в слово £,ф<з2)||£,(фЦ1||...||£,ф(1), где <p(z+l+4(/c-l)) - 8z + к, i = 0..3, к = 1..8. Для генерации ключей необходимо использовать следующие исходные данные: слова Н, М е V256(2);
константы: слова С, (i - 2,3,4), имеющие значения С2-С4-025л и С - 1V1160241160s(0s18)21V(081s)4(1s08)4. При вычислении ключей реализуется следующий алгоритм: 1. Присвоить значения z= 1, U=H, V = M. 2. Выполнить вычисление W-IJ © V, К,- P(W). 3. Присвоить z = z + 1. 4. Проверить условие z = 5. При положительном исходе пе- рейти к шагу 7. При отрицательном - перейти к шагу 5. 5. Выполнить вычисление U = А(П) © С„ V = A(A(V)), W - U © V, К, - P(W); 6. Перейти к шагу 3 7. Конец работы алгоритма. Шифрующее преобразование На данном этапе осуществляется шифрование 64-битных под- слов слова Н на ключах К, (z = 1, 2, 3, 4). Для шифрующего преобразования необходимо использовать следующие исходные данные: H~h4 |h3|h2|hj, h,e V64(2), z - 1..4 и набор ключей Кь К2, К3, Кд. После выполнения шифрования получают слова © = Ек..(Ь,), где z = 1, 2, 3, 4, т.е. в результате получается вектор S = s4||s3||s2||si. Перемешивающее преобразование На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига. Исходными данными являются слова Н, М е У25й(2) и слово S е V256(2). Пусть отображение V: V256(2) —> V25<,(2) преобразует слово Т|1б||...||г|1, Г|,-е Vj6(2), i = 1..16 в слово
П1 ©Г|2©Г|з©Г|4©Г| |3©Т| 16| |Т| 1б|I... I |Т]2. Тогда в качестве значения шаговой функции хэширования при- нимается слово к(М,Н) = уй1(Н © у(М © y12(S))), где \|/ - z-я степень преобразования \|Л Процедура вычисления хэш-функции Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последователь- ность Me В . Параметром является стартовый вектор хэширова- ния Н - произвольное фиксированное слово из У25б(2). Процедура вычисления функции h на каждой итерации ис- пользует следующие величины: М е В - часть последовательности М, не прошедшая проце- дуры хэширования на предыдущих итерациях; Н е У25б(2) - текущее значение хэш-функции; S е У25б(2) - текущее значение контрольной суммы; L е У25й(2) - текущее значение длины обработанной на пре- дыдущих итерациях части последовательности М. Алгоритм вычисления функции h включает в себя следующие три этапа: Этап 1 Присвоить начальные значения текущих величин М := М; Н •= Н; S •= О256; L •= О256 Этап 2 Проверить условие |М|>256. Если да, то перейти к этапу 3. В противном случае выполнить последовательность вычислений: L := <L+|M|>256; М' := О256 |м| ||М; S := S [+] М' Н := К(М',Н); Н := k(L,H); Н := к(£,Н); Конец работы алгоритма. Н содержит значение хэш-функции. Этап 3 Вычислить подслово Ms е У25б(2) слова М (M=MP||Ms). Далее выполнить последовательность вычислений: Н := k(Ms,H); L := <L+256>256; S := S [+] Ms; М := МР Перейти к этапу 2.
4.3.4. Функция хэширования MD5 Предположим, что нам дано сообщение длиной h бит, где h - произвольное неотрицательное целое число, и пусть биты сооб- щения записаны в следующем порядке: mo W11 ... m(h I). Для вычисления свертки сообщения выполняются следующие пять шагов. Шаг 1. Добавление битов заполнения. Сообщение дополняется (расширяется) так, что его длина (в битах) становится сравнимой с 448 по модулю 512. Расширение выполняется всегда, даже если длина сообщения уже сравнима с 448 по модулю 512 Расширение выполняется следующим образом: к сообщению добавляется один бит, равный 1, а оставшиеся биты заполняются нулевыми значениями. Таким образом, количество добавленных битов может лежать в диапазоне от 1 до 512 включительно. Шаг 2. Добавление длины. 64-битное представление длины сообщения h (до добавления битов расширения) дописывается к результату предыдущего шага. В том маловероятном случае, когда длина сообщения превысит 264, используются только младшие 64 бита представле- ния. Эти биты добавляются в виде двух 32-разрядных слов, при этом младшее слово дописывается первым. После этой операции длина сообщения в точности кратна 512 битам и, аналогично, кратна 16 (32-разрядным) словам. Обозначим M[O..N-1] слова полученного сообщения. Шаг 3. Инициализация буфера свертки. Буфер из четырех слов (А, В, С, D) используется для вычисле- ния свертки сообщения. Эти регистры инициализируются сле- дующими шестнадцатеричными значениями: А = 01234567, В = 89abcdef, С = fedcba98, D = 76543210. Шаг 4. Обработка сообщения блоками ио 16 слов. Определим сначала 4 вспомогательные функции, аргументом и результатом каждой из которых являются 32-битовые слова.
F(X,Y,Z) = XY v -,(X) Z G(X,Y,Z) = XZ v Y -,(Z) H(X,Y,Z) = X © Y © Z I(X,Y,Z) = Y © (X v -,(Z)). На этом шаге используется таблица из 64 слов Т[1...64], по- строенная на основе функции синуса. Пусть T[z] обозначает z-й элемент таблицы, который равен целой части от 4294967296 xabs(sin(z)), где z выражено в радианах. Выполняются следующие шаги. /* Обработать каждый 16-словный блок. */ for z = 0 to N/16 - 1 do /* Копирование z-ro блока в X. */ For j = 0 to 15 do X[/]=M[z*16+j], /* Сохранение А в AA, В в ВВ, С в СС, и D в DD. */ АА = А вв = в сс = с DD = D /* Эта п 1. */ /* Пусть [abed к s z] обозначает операцию а = b + ((а + F(b,c,d) + X[/r] + T[z]) « у). */ /* Выполните следующие 16 операций */ [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] /* Шаг 2. */ /* Пусть [abed ks z] обозначает операцию a = b + ((a + G(b,c,d) + X[/r] + T[z]) « y). */ /* Выполните следующие 16 операций */ [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] a = b + ((a + H(b,c,d) + X[k] + T[i]) «< s). */ /* Шаг 2. */ /* Пусть [abed к s z] обозначает операцию a = b + ((a + + X[/<] + T[z]) « s). */ /* Выполните следующие 16 операций */ [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 1142] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] /* Шаг 4. */ /* Пусть [abed к s z] обозначает операцию a = b + ((a + l(b,c,d) + X[/<] + T[z]) « s). */ /* Выполните следующие 16 операций */ [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] /* Затем выполните следующие операции сложения */ А = А + АА В = В + вв с = с + сс D = D + DD end /* цикла по z */ Шаг 5. Выход.
Свертка сообщения содержится в регистрах А, В, С, D. Т.е., мы начинаем с младшего байта А и заканчиваем старшим байтом D. Этим завершается описание алгоритма MD5.
5. УПРАВЛЕНИЕ КРИПТОГРАФИЧЕСКИМИ КЛЮЧАМИ отсутствует в электронной версии 6. ИМИТОЗАЩИТА ИНФОРМАЦИИ В АСУ отсутствует в электронной версии 7. ВОПРОСЫ РЕАЛИЗАЦИИ КРИПТОГРАФИЧЕСКИХ СИСТЕМ отсутствует в электронной версии
ЛИТЕРАТУРА 1. Баричев С.Г., Гончаров В.В., Серов Р.Е. Основы современ- ной криптографии. М., "Горячая линия-Телеком", 2001. 2. Варфоломеев А.А., Жуков А.Е., Пудовкина М.А. Поточные криптосистемы. Основные свойства и методы анализа стойкости. М., ПАИМС, 2000. 3. Введение в криптографию. Под общ. ред. Ященко В.В. М., МЦНМО-ЧеРо, 1998. 4. Герасименко В.А. Защита информации в автоматизирован- ных системах обработки данных., кн. 1, 2. М., Энергоатомиздат, 1994. 5. ГОСТ 28147-89. 6. ГОСТ Р 34.10-94. 7. ГОСТ Р 34.10-94. 8. Конхейм А. Г. Основы криптографии. М., Радио и связь, 1987. 9. Мафтик С. Механизмы защиты в сетях ЭВМ. М., Мир, 1993. 10.Мельников В.В. Защита информации в компьютерных сис- темах. М., Финансы и статистика, 1997. Н.Молдовян А.А., Молдовян Н.А., Советов Б.Я. Криптогра- фия. СПб., "Лань", 2000. 12 .Молдовян Н.А. Скоростные блочные шифры. СПб, Изда- тельство СПбГУ, 1998. 13 .Нечаев В.И. Элементы криптографии (Основы теории за- щиты информации). М., Высшая школа, 1999. 14 .Основы криптозащиты АСУ. Под ред. Б.П. Козлова. М., МО, 1996. 15 .Романец Ю.В., Тимофеев П.А., Шаньгин В.Ф. Защита ин- формации в компьютерных системах и сетях. М., Радио и связь, 1999. 16 .Ухлинов А.М. Управление безопасностью информации в автоматизированных системах. М. МИФИ, 1996.