Курсовой проект по дисциплине «Методы и средства защиты компьютерной информации». Тема: «Передача аутентичного информационного сообщ - davaiknam.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Программа-минимум кандидатского экзамена по специальности 05. 1 66.83kb.
Рабочая программа по дисциплине «Методы и средства защиты информации»... 1 124.88kb.
Вопросы к экзамену по дисциплине «программно-аппартаные средства... 1 23.74kb.
Учебное пособие Часть Методы и средства защиты информации 9 1777.27kb.
Краткая аннотация курса Методы и средства защиты компьютерной информации 1 11.46kb.
Учебно-методический комплекс по дисциплине выбору «Информационная... 4 597.21kb.
Курсовая работа по дисциплине: «Методы и средства защиты информации» 1 124.31kb.
Информация о материальном мире. Сигналы и данные. Данные и методы. 1 29.99kb.
Семинар для it-специалистов, специалистов компьютерной безопасности... 1 11.6kb.
Передача информации (раздел Информационные процессы в системах) 1 55.1kb.
4. организационные меры защиты информации в ас организационная структура... 1 156.12kb.
Интерактивные системы доказательства с нулевым разглашением 1 118.03kb.
Направления изучения представлений о справедливости 1 202.17kb.

Курсовой проект по дисциплине «Методы и средства защиты компьютерной информации». - страница №1/1

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ЧУВАШСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

им. И. Н. УЛЬЯНОВА

Технический институт

факультет Дизайна и компьютерных технологий

Кафедра компьютерных технологий

Методы и средства защиты компьютерной информации

Курсовая работа

Чебоксары 2009 г.

Задание на курсовой проект

по дисциплине

«Методы и средства защиты компьютерной информации».

Тема:

«Передача аутентичного информационного сообщения по каналу связи»

Разработать на основе заданного варианта протокол установления связи с абонентом, а также аутентификацию и передачу информационного сообщения.

Проект должен включать пояснительную записку и графический материал на 2 листах А3.

В пояснительной записке должны быть отражены следующие вопросы:



  1. Общая теория взаимодействия двух абонентов по открытому каналу связи;

  2. Установление связи;

  3. Распределение ключей;

  4. Аутентификацию;

  5. Передачу секретной информации;

  6. Проверку целостности информации.

  7. Выбор протокола взаимодействия;

  8. Алгоритмы и блок-схемы;

  9. Демонстрационная программа взаимодействия.

Графическая часть выполняется с соблюдением требований ЕСКД и включает разработанные алгоритмы и блок-схемы.

Варианты задания определяются выбранными типами аутентификации, шифрования, электронно-цифровой подписи и т.п. Они могут быть выбраны самим студентом при согласовании с преподавателем. Например, вариант:

• Аутентификация с помощью алгоритма Фиата и Шамира;

• Электронная цифровая подпись Шнорра;

• Контроль целостности передаваемых сообщений ГОСТ.
Литература.


  1. Брюс Шнайер. Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С.

  2. Государственный Стандарт Российской Федерации ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма 1994г.

  3. А.П.Алферов, А.Ю.Зубов, А.С.Кузьмин, А.В.Черемушкин. Основы криптографии. Москва, Гелиос АРВ, 2002.

Методические указания


В качестве примера приводится вариант проекта (см. приложение 1).
Приложение 1.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Чувашский государственный университет им. И. Н. Ульянова

Технический институт

Факультет дизайна и компьютерных технологий

Кафедра компьютерных технологий

Курсовой проект

Тема: Передача аутентичного информационного сообщения по каналу связи

Дисциплина: Методы и средства защиты информации

Выполнила

студентка группы 21-04

Илларионова М. В.
Проверил

Преподаватель

Михайлов А. Л.

Чебоксары 2007






Задание
Разработать на основе заданного варианта протокол установления связи с абонентом, а также аутентификацию и передачу информационного сообщения:

• Аутентификация с помощью алгоритма Фиата и Шамира;

• Электронная цифровая подпись Шнорра;

• Контроль целостности передаваемых сообщений ГОСТ.






СОДЕРЖАНИЕ

Введение………………………………………………………………………………….3


Глава 1. Основные понятия современной криптографии ……………......…5

1.2. Основные способы использования алгоритмов с открытым ключом….…..........7

Глава 2. Аутентификация……………………………………….…………9

2.1. Протоколы аутентификации……………………………..……………9

2.2. Схема аутентификации Фиата и Шамира……………..…………….10

Глава 3. Электронная подпись……………………………...……………..11

3.1. Основные понятия……………………………………..……………...11

3.2. Схема электронной подписи Шнорра………………...……………...12

Глава 4. Хеш-функции……………………………………………..…………………...13

4.1. Отечественный стандарт на функцию хеширования…………..…..14

Глава 5. Протокол установления связи с абонентом…………………………..…......16

Листинг………………………………………………………………………..................17


Литература……………………………………………………………………..…………21

Введение


Проблема защиты информации путем ее преобразования, исключающего ее прочтение посторонним лицом, волновало человеческий ум с давних времен. История криптографии - ровесница истории человеческого языка. Более того, первоначально письменность сама по себе была криптографической системой, так как в древних обществах ею владели только избранные.

С широким распространением письменности криптография стала формироваться как самостоятельная наука. Первые криптосистемы встречаются уже в начале нашей эры. Так, Цезарь в своей переписке использовал уже более или менее систематический шифр, получивший его имя.

Бурное развитие криптографические системы получили в годы первой и второй мировых войн. Начиная с послевоенного времени и по нынешний день, появление вычислительных средств ускорило разработку и совершенствование  криптографических методов.

Почему проблема использования криптографических методов в информационных системах (ИС) стала в настоящий момент особо актуальна?

С одной стороны, расширилось использование компьютерных сетей, в частности глобальной сети Internet, по которым передаются большие объемы информации государственного, военного, коммерческого и частного характера, не допускающего возможность доступа к ней посторонних лиц.

С другой стороны, появление новых мощных компьютеров,  технологий сетевых и нейронных вычислений сделало возможным дискредитацию криптографических систем еще недавно считавшихся  практически не раскрываемыми.

В первой главе данной работы можно познакомиться с основными понятиями современной криптографии.

Во второй главе работы  с протоколом аутентификации (идентификации) Фиата и Шамира.

Третья глава данной работы рассказывает о схеме электронной подписи Шнорра.

В четвертой главе будет рассказано о контроле целостности передаваемых сообщений ГОСТ



Глава 1. Основные понятия современной криптографии


Проблемой защиты информации путем ее преобразования занимается  криптология (kryptos - тайный, logos - наука). Криптология разделяется на два  направления - криптографию и криптоанализ. Цели этих направлений прямо  противоположны.

Криптография занимается поиском и исследованием математических методов преобразования информации.

Сфера интересов криптоанализа -  исследование возможности расшифровывания информации без знания ключей.

В этой работе  основное внимание будет уделено криптографическим методам.

Современная криптография включает в себя четыре крупных раздела:

Симметричные криптосистемы.

Криптосистемы с открытым ключом.

Системы электронной подписи.

Управление ключами.

Основные направления  использования криптографических методов - передача конфиденциальной информации по каналам связи (например, электронная почта), установление подлинности передаваемых сообщений, хранение информации (документов, баз данных) на носителях в зашифрованном виде.

Криптография дает возможность преобразовать информацию таким образом, что ее прочтение (восстановление) возможно только при знании ключа.

В качестве информации, подлежащей шифрованию и дешифрованию, будут рассматриваться тексты, построенные на некотором алфавите. Под этими терминами понимается следующее.

Алфавит - конечное множество используемых для кодирования информации знаков.

Текст - упорядоченный набор из элементов алфавита.

В качестве примеров алфавитов, используемых в современных ИС можно привести следующие:

 алфавит Z33 - 32 буквы русского алфавита и пробел;

 алфавит Z256 - символы, входящие в стандартные коды ASCII и КОИ-8;

 бинарный алфавит - Z2 = {0,1};

 восьмеричный алфавит или шестнадцатеричный алфавит;

Шифрование - преобразовательный процесс: исходный текст, который носит также название открытого текста, заменяется шифрованным текстом.

Дешифрование - обратный шифрованию процесс. На основе ключа шифрованный текст преобразуется в исходный.

Ключ - информация, необходимая для беспрепятственного шифрования и дешифрования текстов.

Криптографическая система представляет собой семейство T преобразований открытого текста. Члены этого семейства индексируются, или обозначаются символом k; параметр k является ключом. Пространство ключей K - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита.

Криптосистемы разделяются на симметричные и с открытым ключом.

В симметричных криптосистемах и для шифрования, и для дешифрования используется один и тот же ключ.

В системах с открытым ключом используются два ключа - открытый и закрытый, которые математически связаны друг с другом. Информация шифруется с помощью открытого ключа, который доступен  всем желающим, а расшифровывается с помощью закрытого ключа, известного только получателю сообщения. Термины распределение ключей и управление ключами относятся к процессам системы обработки информации, содержанием которых является составление и распределение ключей между пользователями.

Электронной (цифровой) подписью называется присоединяемое к тексту его криптографическое преобразование, которое позволяет при получении текста другим пользователем проверить авторство и подлинность сообщения.

Криптостойкостью называется характеристика шифра, определяющая его стойкость к дешифрованию без знания ключа (т.е. криптоанализу). Имеется несколько показателей криптостойкости, среди которых:

количество всех возможных ключей;

среднее время, необходимое для криптоанализа.

Преобразование Tk определяется соответствующим алгоритмом и значением параметра k. Эффективность шифрования с целью защиты информации зависит от сохранения тайны ключа и криптостойкости шифра.

Требования к криптосистемам

Процесс криптографического закрытия данных может осуществляться как программно, так и аппаратно. Аппаратная реализация отличается существенно большей стоимостью, однако ей присущи и преимущества: высокая производительность, простота, защищенность и т.д. Программная реализация более практична, допускает известную гибкость в использовании.

Для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:

зашифрованное сообщение должно поддаваться чтению только при наличии ключа;

число операций, необходимых для определения использованного ключа шифрования по фрагменту шифрованного сообщения и соответствующего ему открытого текста, должно быть не меньше общего числа возможных ключей;

число операций, необходимых для расшифровывания информации путем перебора всевозможных ключей должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных компьютеров (с учетом возможности использования сетевых вычислений);

знание алгоритма шифрования не должно влиять на надежность защиты;

незначительное изменение ключа должно приводить к существенному изменению вида зашифрованного сообщения даже при использовании одного и того же ключа;

структурные элементы алгоритма шифрования должны быть неизменными;

дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте;

длина шифрованного текста должна быть равной длине исходного текста;

не должно быть простых и легко устанавливаемых зависимостью между ключами, последовательно используемыми в процессе шифрования;

любой ключ из множества возможных должен обеспечивать надежную защиту информации;

алгоритм должен допускать как программную, так и аппаратную реализацию, при этом изменение длины ключа не должно вести к качественному ухудшению алгоритма шифрования.


1.1. Основные способы использования алгоритмов с открытым ключом

Основными способами использования алгоритмов с открытым ключом являются шифрование/дешифрование, создание и проверка подписи и обмен ключа.

Шифрование с открытым ключом состоит из следующих шагов:


Рис. 1.2.  Шифрование с открытым ключом
1. Пользователь создает пару ключей и , используемых для шифрования и дешифрования передаваемых сообщений.

2. Пользователь делает доступным некоторым надежным способом свой ключ шифрования, т.е. открытый ключ . Составляющий пару закрытый ключ держится в секрете.

3. Если хочет послать сообщение , он шифрует сообщение, используя открытый ключ .

4. Когда получает сообщение, он дешифрует его, используя свой закрытый ключ .Никто другой не сможет дешифровать сообщение, так как этот закрытый ключ знает только .

Если пользователь (конечная система) надежно хранит свой закрытый ключ, никто не сможет подсмотреть передаваемые сообщения.

Создание и проверка подписи состоит из следующих шагов:



Рис. 1.3.  Создание и проверка подписи


1. Пользователь создает пару ключей и , используемых для создания и проверки подписи передаваемых сообщений.

2. Пользователь делает доступным некоторым надежным способом свой ключ проверки, т.е. открытый ключ . Составляющий пару закрытый ключ держится в секрете.

3. Если хочет послать подписанное сообщение , он создает подпись для этого сообщения, используя свой закрытый ключ.

4. Когда получает подписанное сообщение, он проверяет подпись , используя


открытый ключ . Никто другой не может подписать сообщение, так как этот закрытый ключ знает только .

До тех пор, пока пользователь или прикладная система надежно хранит свой закрытый ключ, их подписи достоверны.Кроме того, невозможно изменить сообщение, не имея доступа к закрытому ключу ; тем самым обеспечивается аутентификация и целостность данных.

В этой схеме все сообщение подписывается, причем для подтверждения целостности сообщения требуется много памяти. Каждое сообщение должно храниться в незашифрованном виде для использования в практических целях. Кроме того, копия сообщения также должна храниться в зашифрованном виде, чтобы можно было проверить в случае необходимости подпись. Более эффективным способом является шифрование небольшого блока битов, который является функцией от сообщения. Такой блок, называемый аутентификатором, должен обладать свойством невозможности изменения сообщения без изменения аутентификатора. Если аутентификатор зашифрован закрытым ключом отправителя, он является цифровой подписью, с помощью которой можно проверить исходное сообщение. Далее эта технология будет рассматриваться в деталях.

Важно подчеркнуть, что описанный процесс создания подписи не обеспечивает конфиденциальность. Это означает, что сообщение, посланное таким способом, невозможно изменить, но можно подсмотреть. Это очевидно в том случае, если подпись основана на аутентификаторе, так как само сообщение передается в явном виде. Но даже если осуществляется шифрование всего сообщения, конфиденциальность не обеспечивается, так как любой может расшифровать сообщение, используя открытый ключ отправителя.



Обмен ключей: две стороны взаимодействуют для обмена ключом сессии, который в дальнейшем можно использовать в алгоритме симметричного шифрования.

Некоторые алгоритмы можно задействовать тремя способами, в то время как другие могут использоваться одним или двумя способами.



Глава 2. Аутентификация.

2.1. Протоколы аутентификации.

Теоретические основы схем аутентификации были заложены в работе Симмонса. Согласно Симмонсу, в системе аутентификации отправитель и получатель выбирают некоторое правило кодирования e из множества правил E и хранят это правило в секрете. Отправитель наблюдает некоторое состояние источника и определяет, с помощью правила кодирования e, сообщение m, посылаемое отправителю. Здесь S - множество всех состояний источника, а M - множество всех возможных сообщений.

Вводятся два типа атак на схему аутентификации: имитация (impersonation) - формируется допустимое сообщение тогда, когда на самом деле отправитель никакого сообщения не посылал; подмена (substitution) - противник ожидает, пока отправитель не пошлет сообщение, и заменяет его на другое допустимое сообщение.

В работе Симмонса и в работах других авторов получены нижние оценки вероятности успешной имитации и вероятности успешной подмены, зависящие от параметров системы аутентификации. Мы не останавливаемся здесь на этих и других результатах более подробно, поскольку теория аутентификации является частью теоретико-информационной криптографии, которая интересна с математической точки зрения, представляет определенную общеобразовательную ценность, но не имеет большого прикладного значения.

Все схемы аутентификации, используемые на практике для обеспечения целостности банковской информации, основываются на теоретико-сложностных принципах. Для таких схем всегда существуют атаки, заведомо приводящие к успеху, но их реализация для стойких схем должна требовать (предположительно) практически невыполнимого объема вычислений.

Оставшаяся часть данной главы посвящена схемам аутентификации (идентификации) абонентов в банковских информационных системах. Положение дел с обоснованием стойкости схем аутентификации абонентов достаточно необычно для современной криптографии: существует хорошо развитая математическая теория - теория доказательств с нулевым разглашением (zero-knowledge proofs) -- доставляющая методы построения доказуемо стойких схем аутентификации.

2.2. Протоколы с центром доверия



К данной категории схем аутентификации мы условно относим те схемы, в которых открытые ключи всех абонентов хранятся в общедоступном сертифицированном справочнике. Для этого в системе необходим некоторый центр, пользующийся безусловным доверием всех абонентов (центр доверия), в обязанности которого входит ведение справочника.

Открытые ключи хранятся в справочнике вместе с соответствующими идентификаторами абонентов. Выполнение всякого протокола аутентификации начинается с предварительного шага: доказывающий (абонент, проходящий аутентификацию) посылает свои идентификатор и открытый ключ проверяющему (т. е. абоненту, проверяющему аутентичность доказывающего), а проверяющий устанавливает их подлинность, т. е. проверяет по справочнику подпись центра доверия под этой информацией. В дальнейшем в описаниях протоколов этот предварительный шаг опускается.

Всюду ниже доказывающий будет обозначаться через A, а проверяющий - через B.

2.2. Схема аутентификации Фиата и Шамира

Одна из наиболее известных схем аутентификации - схема Фиата и Шамира. Для реализации схемы необходим центр доверия, который выбирает и публикует целое число n, являющееся произведением двух простых чисел p и q. Простые множители p и q являются секретными.

Каждый абонент выбирает k случайных чисел si из Zn и вычисляет vj=1/sj2. Числа si образуют секретный ключ абонента, а числа vi - его открытый ключ, который помещается в сертифицированный справочник.

Протокол аутентификации состоит в выполнении следующих шагов в цикле для i=1,…,t.

    1. A выбирает случайное число и посылает B значение .

    2. B выбирает случайный вектор (ei1,…,eik) и посылает его A.

    3. A посылает B значение .

    4. B проверяет, что .

В результате выполнения протокола проверяющий принимает доказательство (другими словами, доказывающий проходит аутентификацию), только если проверка п. 4 будет выполнена во всех t циклах.










Глава 3. Электронная подпись.

3.1. Основные понятия.

Схемы контроля целостности, рассмотренные в гл. 6, могут использоваться только при взаимодействии доверяющих друг другу сторон. Они принципиально не способны обеспечивать улаживание возникающих между ними противоречий и разногласий. Такая возможность появляется только при использовании односторонних функций с секретом для формирования электронной или цифровой подписи. Протоколы или схемы электронной подписи являются основным криптографическим средством обеспечения аутентичности информации:

* с помощью электронной подписи получатель документа может доказать, что он принадлежит отправителю, при этом автор подписи не сможет оспорить факт отправки подписанного документа;

* электронную подпись невозможно подделать; только абонент, чья подпись стоит на документе, мог подписать данный документ;

* электронная подпись является неотъемлемой частью документа, перенести ее на другой документ нельзя;



ни противник, ни получатель tie могут изменить документ, оставив дачный факт незамеченным;

тобой пользователь, имеющий образец подписи, может удостовериться в подлинности документа.

Для повышения надежности схемы электронной подписи, например для противодействия атакам перехвата и повтора сообщений, фальсификации времени отправки сообщений, ее можно сделать зависимой от неповторяющегося блока данных nrb.

Схема электронной подписи включает в себя:

параметр безопасности n, в качестве которого может выступать длина подписи, длина подписываемых сообщений и т. п,; пространство исходных сообщений;

максимальное число подписей (signature bound), которые могут быть получены в данной схеме без замены секретной информации;

алгоритм G генерации ключей - полиномиальный (от п) вероятностный алгоритм, формирующий по заданному параметру п пару

,

где — секретный ключ подписывающего (абонента. А); ,-соответствующий открытый ключ проверяющего (абонента В)



  • алгоритм S формирования подписи сообщения - полиномиальным вероятностный алгоритм, вырабатывающий по заданным исходному сообщению и секретному ключу подпись s для сообщения ;

  • алгоритм V проверки (verification) подписи- полиномиальный вероятностный алгоритм, дающий на выходе при заданных сообщению , открытому ключу и возможной подписи s' либо значение единице, когда подпись сообщения принимается, либо 0, когда подпись отвергается.

Подпись s=() называется допустимой для сообщения , если она принимается алгоритмом V с вероятностью, близкой к 1. Подделкой подписи со­общения называется нахождение противником, не имеющим секретного клю­ча подписывающего, допустимой подписи для этого сообщения.

3.2. Схема электронной подписи Шнорра

В протоколе аутентификации Шнорра интерактивность требуется только для того, чтобы получить от верификатора В случайный запрос . Если бы у пре­тендента А был надежный источник случайности на замену ГПК, пользующий­ся доверием В, то протокол можно было бы сделать неинтерактивным.. А.Фиат и Шамир предложили способ преобразования схемы аутентификации в протокол электронной подписи. Если - подписываемое сообщение, a - криптографи­ческая хеш-функция, вместо обращения к верификатору (получателю) претен­дент (отправитель) вычисляет h() и использует ее вместо запроса . Этот при­ем является универсальным, так как применим и к другим протоколам аутенти­фикации.

Пусть p и q- простые числа, такие, что q делит (р -1). Пусть g такое, что

Пусть хеш-функция h отображает пары значений (уА, ) на множество (0, 1,...,(2'- 1)). В качестве своего секретного ключа абонент А выбирает случайное число из . Затем он вычисляет



и публикует найденное значение в качестве своего открытого ключа .


Схема электронной подписи Шнорра

1. Абонент А выбирает случайное число, вычисляет



2. Абонент А вычисляет



3. Абонент А вычисляет





и посылает сообщение с подписью абоненту B ;

4. Абонент В вычисляет





и проверяет, выполняется ли равенство



Если оно выполняется, В признает подлинность подписи, в противном слу­чае - отвергает.
Стойкость приведенной схемы сильно зависит от свойств используемой хеш-функции. Если противник может по заданной паре находить другое со­общение для которого

он может осуществить экзистенциальную подделку подписи. Для этого он после перехвата сообщения и подписи должен найти указанное вьше и тогда пара будет также подписью и для сообщения.



Глава 4. Хеш-функции

Хеш-функцией называется преобразование h, превращающее информационную последовательность произвольной длины в информационную последовательность фиксированной длины h(). К функции h() предъявляются 3 основных требования:

* результат работы хеш-функции должен зависеть от всех двоичных символов исходного сообщения, а также от их взаимного расположения, т.е. h()

должна быть чувствительна к любым изменениям входной информационной последовательности;

* хеш-функция должна быть стойкой в смысле обращения;

* хеш-функция должна быть стойкой в смысле нахождения коллизий.

Иначе говоря, задача нахождения последовательности по заданному хеш-образу h() и задача нахождения для заданной последовательности другой последовательности ) такой, что h() = h(), должны быть вычислительно неразрешимы.



Области использования хеш-функций:

* защита паролей при их передаче и хранении;

* формирование контрольных кодов MDC;

• получение сжатого образа сообщения перед формированием электронной подписи;

• оперативный контроль хода программ (concurrent checking of program flow).

Наиболее известные алгоритмы получения хеш-образов сообщений— MD5. SHAtKiPEMD, TIGER.



MD5- представитель семейства алгоритмов вычисления хеш-функиий MD (Message Digest Algorithm), предложенного Р. Ривестом; разработан в 1991 г.; преобразует информационную последовательность произвольной длины в хеш-образ разрядностью 128 бит.

RIPEMD- разработан в рамках европейского проекта RIPE (Race Integrity Primitives Evaluation); является модификацией алгоритма ЛШ4; преобразует ин­формационную последовательность произвольной длины в хеш-образ разрядно­стью 128 (МРЕМО-Ш) или 160 бит (Я/РШ/МбО).

TIGER- разработан Р. Андерсоном и Э. Бихэмом; предназначен для реализа­ции на 64-разрядных компьютерах; преобразует информационную последова­тельность произвольной длины в хеш-образ разрядностью J92 бита.


4.1. Отечественный стандарт на функцию хеширования

(ГОСТ Р 34.11-94)

В основе данной хеш-функции лежит алгоритм блочного шифрования FOCТ 28147-89. Функция преобразует информационную последовательность произвольной длины в хеш-образ разрядностью 256 бит,

Пусть - входная информационная последовательность длиной //. Последовательность разбивается на 256-разрядные блоки. Последний неполный блок дополняется до требуемого размера. Добавляются два 256-раз рядных блока, содержащие код длины последовательности и контрольную сумму. Каждый блок полученной расширенной последовательности Ext() рассматривается как результат конкатенации четырех 64-разрядных двоичных наборов:

Тогда процесс вычисления хеш-образа h() может быть описан следующим образом:



где COST, - результат i-ro цикла преобразования; OOST0 - 256-разрядный стартовый_ вектор хеширования, на выбор которого ограничений не накладывается i = 1 ,m. Алгоритм вычисления GOST включает в себя 3 шага:

* генерацию четырех 256-разрядных ключей для зашифрования в режиме простой замены 64-разрядных частей i-го блока;

* шифрование частей блока с использованием алгоритма ГОСТ 28 147-89;

* перемешивание результата зашифрования

Пусть


где - конкатенация n экземпляров двоичного набора a. Заданы два преобразования для 256-разрядных блоков:



где b-байты блока:



На следующем шаге части блока подвергаются зашифрованию ни получен­ных ключах:




Результат цикла преобразования формируется после шага перемешивания. Задано преобразование 256-разрядного блока

где 16-разрядные слова блока:



Результат цикла преобразования:



Пусть - часть последовательности Ext(), еще не прошедшая процедуру хеширования, \ \ - 256-разрядный код длины (в битах) последовательности , L- 256-разрядный код длины обработанной последовательности, Sum- 256-разрядная контрольная сумма. Тогда алгоритм вычисления хеш-образа h() будет иметь вид:

1) =

2) проверяем условие // > 256; при положительном результате проверки пере ходим к шагу 3, в противном случае вычисляем:


Хэш-образ сообщения:



3) Представив информационную последовательность в виде



Вычисляем:



Переходим к шагу 2.



Глава 5. Разработка протокола установления связи с абонентом

5.1. Протокол установления связи с абонентом



Алгоритм протокола:

1. С помощью алгоритма Фиата и Шамира выбираем ключ, который будет использоваться для шифрования передаваемого сообщения;

2. Шифруем сообщение. Для этого может использоваться любой симметричный шифр. Шифруем самым простым методом - побайтовый XOR исходного сообщения с ключем;

3. Подписываем сообщение цифровой подписью по алгоритму Шнорра, использую закрытый ключ отправителя; при этом в алгоритме происходит вычисление хеш-функции по алгоритму ГОСТ ;

4. На стороне получателя принимаем сообщение и проверяем цифровую подпись, используя

открытый ключ отправителя;

5. Если цифровая подпись соответствует сообщению, значит, сообщение было передано без

изменений, в этом случае дешифруем сообщение ключом, полученным на первом шаге.



Листинг.

#include "stdafx.h"

#include

#include

#include "data.h"

#include "numbers.h"


using namespace std;
CBigInt p = 2741, q = 137, n=375517, r = 20, h = 1699, g = 2476;
void randomize()

{

srand( (unsigned int)time(NULL) );



}
int random(int limit)

{

return rand() % limit;



}
/** Дихотомическое возведение в степень */

CBigInt xymodn(CBigInt a, CBigInt n, CBigInt m)

{

/*CBigInt _a = a, _n = n, _m = m;



CBigInt p = 1;

CBigInt q = a;

while (n.getValue() > 0) {

if (n.isOdd() )

p = multmod(p, q, m);

q = multmod(q, q, m);

n = n.getValue() >> 1;

}

return p;*/



int _a=a.getValue(), _n=n.getValue(), _m=m.getValue();

int p=1, q=a.getValue();

while (_n>0) {

if (_n & 0x01 != 0)

p = multmod(p, q, m).getValue();

q = multmod(q, q, m).getValue();

_n >>= 1;

}

return p;



}
CBigInt multmod(CBigInt a, CBigInt b, CBigInt m)

{

return (int)( (__int64)a.getValue() * (__int64)b.getValue() % (__int64)m.getValue() );



}

void generateKeys()

{
CBigInt _a = CBigInt::random(1, 0x7fffffff);

CBigInt _g = CBigInt::random(1, 0x7fffffff);

CBigInt _p = CBigInt::random(1, 0x7fffffff);

CBigInt _b = CBigInt::random(1, 0x7fffffff);

CBigInt _A = xymodn(_g, _a, _p);

CBigInt _B = xymodn(_g, _b, _p);

CBigInt _KA = xymodn(_B, _a, _p);

CBigInt _KB = xymodn(_A, _b, _p);

if (_KA != _KB)

throw logic_error("generateKeys: keys does not match!");

secretKey = _KA;

/* generate keys for digisign */

for (int i=0; i<2; i++) {

keys[i][0] = CBigInt::random(1, q-1);

keys[i][1] = xymodn(g, keys[i][0], p);//invmod(xymodn(h, a, p), p);

}

keyGenerated = true;



sayNumber("Diffie-Hellman: key generated: ", secretKey);

}
void sayNumber(char *msg, CBigInt &num)

{

string s = msg;



char tmp[4];

int parts[4];

int n = num.getValue();

for (int i=3; i>=0; i--) {

parts[i] = n & 0xff;

n >>= 8;


}

for (i=0; i<4; i++) {

sprintf(tmp, "%02x ", parts[i]);

s += tmp;

}

say( (char *)s.c_str() );



}
void encrypt(char *buf, int len)

{

int key = secretKey.getValue();



char keyParts[4];

for (int i=0; i<4; i++) {

keyParts[i] = key & 0xff;

key >>= 8;

}

int keyOffs = 0;



for (i=0; i

int t = buf[i];

t ^= keyParts[keyOffs];

t &= 0xff;

buf[i] = t;

keyOffs++;

if (keyOffs == 2)

keyOffs = 0;

}

}
void decrypt(char *buf, int len)



{

encrypt(buf, len);

}

/** Инверсия элемента группы */

CBigInt invmod(CBigInt a, CBigInt p)

{

CBigInt x, y, d = extendedEuclid(a, p, x, y);



while (x < 0)

x = x + p;

return x;

}
#define ENSUREPOS(x) ASSERT(x.getValue() >= 0)


CBigInt hashSum(char *buf, int len, CBigInt add)

{

char *buf1 = new char[len + 4];



memcpy(buf1, buf, len);

char sum[16];

int *padd = (int *)(buf1 + len);

*padd = add.getValue();

GOST_csum( (unsigned char *)buf1, len + 4, (unsigned char *)sum);

int *cs0 = (int *)&sum[0];

int *cs1 = (int *)&sum[4];

int *cs2 = (int *)&sum[8];

int *cs3 = (int *)&sum[12];

return abs(*cs0 ^ *cs1 ^ *cs2 ^ *cs3) & 0xffffff;

}
int _multmod(int a, int b, int m)

{

return (int)( (__int64)a * (__int64)b % (__int64)m);



}
/** Дихотомическое возведение в степень */

int _xymodn(int a, int n, int m)

{

int _a = a, _n = n, _m = m;



int p = 1;

int q = a;

while (n > 0) {

if (n & 0x01 != 0)

p = _multmod(p, q, m);

q = _multmod(q, q, m);

n >>= 1;

}

return p;



}
void signMessage(CBigInt privateKey, CBigInt publicKey, char *message, int len, char* digest)

{

/* генерация ключей */



CBigInt x = privateKey;

CBigInt y = publicKey;

/* подписывание */

CBigInt k = CBigInt::random(0, q-2)+1;

CBigInt r = xymodn(g, k, p);

CBigInt e = hashSum(message, len, r);

CBigInt s = (k + multmod(x, e, q) ) % q;

/* проверка подписи */

CBigInt rv1 = xymodn(g, s, p);

CBigInt rv2 = invmod(xymodn(y, e, p), p);

CBigInt rv = multmod(rv1, rv2, p);

CBigInt ev = hashSum(message, len, rv);

if (e == ev) {

int *pd = (int *)digest;

*pd = e.getValue();

pd++;


*pd = s.getValue();

return;


} else

MessageBox(0, "No", NULL, 0);

}
bool checkSign(CBigInt publicKey, char *message, int len, char *digest)

{

int *pd = (int *)digest;



CBigInt e = *pd;

pd++;


CBigInt s = *pd;

CBigInt y = publicKey;

CBigInt rv1 = xymodn(g, s, p);

CBigInt rv2 = invmod(xymodn(y, e, p), p);

CBigInt rv = multmod(rv1, rv2, p);

CBigInt ev = hashSum(message, len, rv);

return (e == ev);

}

Литература.



Брассар Ж. Современная криптология.: Пер. с англ. М.: ПОЛИМЕД, 1999

Введение в криптографию / Под общ. ред. В.В.Яшепко. М: МЦИМО:ЧеРо, 1998




Дураков меньше, чем думают: люди просто не понимают друг друга. Люк де Вовенарг
ещё >>