Электронная цифровая подпись
Требования к криптографическим системам защиты информации и их возможности. Условия, которым должна удовлетворять хеш-функция. Алгоритм цифровой подписи Эль-Гамаля (ЕGSА), ее формирование и проверка. Интерфейс программы, реализующей ЭЦП по ЕGSА.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.11.2014 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Министерство образования и науки Украины
Харьковский национальный университет радиоэлектроники
Курсовая работа
по дисциплине: Основы криптографической защиты информации
на тему: Электронная цифровая подпись
Выполнил
Студент Бунин Л. В.
группы ТК-8-1
Проверила:
Иванов И. И.
Харьков 2014
СОДЕРЖАНИЕ
ВСТУПЛЕНИЕ
1. ОБЩИЕ СВЕДЕНИЯ О КРИПТОГРАФИИ
1.1 Криптография
1.2 Требования к криптографическим системам защиты информации и их возможности
1.3 Хэш-функция
1.4 Электронная цифровая подпись
2. ЭЛЕКТРОННАЯ ЦИФРОВАЯ ПОДПИСЬ ПО ЭЛЬ-ГАМАЛЮ И DSS/DSA
2.1 Алгоритм цифровой подписи Эль-Гамаля (ЕGSА
2.1.1 Формирование и проверка подписи EGSA
2.2 Стандарт ЭЦП DSS
2.2.1 Подход DSS
2.2.2 Формирование и проверка подписи DSS
2.3 Алгоритм цифровой подписи DSА
2.3.1 Формирование и проверка подписи DSА
3. РАЗРАБОТКА ПРОГРАММНОГО КОДА
3.1 Электронная цифровая подпись по Эль-Гамалю
3.2 Электронная цифровая подпись по DSS/DSA
4. РЕЗУЛЬТАТЫ
4.1 Интерфейс программы реализующей ЭЦП по ЕGSА
4.2 Интерфейс программы реализующей ЭЦП по DSS/DSA
ВЫВОДЫ
ИСТОЧНИКИ ДАННЫХ
ВСТУПЛЕНИЕ
Проблема защиты информации путем ее преобразования, исключающего ее прочтение посторонним лицом волновала, человеческий ум с давних времен. История криптографии - ровесница истории человеческого языка. Более того, первоначально письменность сама по себе была криптографической системой, так как в древних обществах ею владели только избранные. Священные книги Древнего Египта, Древней Индии тому примеры.
С широким распространением письменности криптография стала формироваться как самостоятельная наука. Первые криптосистемы встречаются уже в начале нашей эры. Так, Цезарь в своей переписке использовал уже более систематический шифр, получивший его имя.
Бурное развитие криптографические системы получили в годы первой и второй мировых войн. Начиная с послевоенного времени и по нынешний день появление вычислительных средств ускорило разработку и совершенствование криптографических методов.
Криптографические методы защиты информации [1] в автоматизированных системах могут применяться как для защиты информации, обрабатываемой в ЭВМ или хранящейся в различного типа ЗУ, так и для закрытия информации, передаваемой между различными элементами системы по линиям связи.
Криптографическое преобразование [1] как метод предупреждения несанкционированного доступа к информации имеет многовековую историю. В настоящее время разработано большое количество различных методов шифрования, созданы теоретические и практические основы их применения. Подавляющие число этих методов может быть успешно использовано и для закрытия информации.
1.ОБЩИЕ СВЕДЕНИЯ О КРИПТОГРАФИИ
1.1 Криптография
Криптография [1] (от др. греч. ксхрфьт -- скрытый и гсЬцщ -- пишу) -- наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.
Изначально криптография изучала методы шифрования информации [1] -- обратимого преобразования открытого (исходного) текста на основе секретного алгоритма или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию.
Криптография не занимается: защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищенных системах передачи данных.
1.2 Требования к криптографическим системам защиты информации и их возможности
Для разрабатываемых в настоящее время криптографических систем защиты информации сформулированы следующие общепринятые требования[8]:
зашифрованное сообщение должно поддаваться чтению только при наличии ключа;
знание алгоритма шифрования не должно влиять на надежность защиты;
любой ключ из множества возможных должен обеспечивать надежную защиту информации;
алгоритм шифрования должен допускать как программную, так и аппаратную реализацию.
Не для всех алгоритмов шифрования перечисленные требования выполняются полностью [8]. В частности, требование отсутствия слабых ключей (ключей, которые позволяют злоумышленнику легче вскрыть зашифрованное сообщение) не выполняется для некоторых "старых" блочных шифров. Однако все вновь разрабатываемые системы шифрования удовлетворяют перечисленным требованиям.
Криптография позволяет реализовывать следующие механизмы защиты информации:
шифрование данных, передаваемых по каналам связи или хранимым в базах данных;
контроль целостности данных, передаваемых по каналам связи;
идентификация (опознавание) субъекта или объекта системы (сети);
аутентификация (проверка подлинности) субъекта или объекта сети;
контроль (разграничение) доступа к ресурсам системы (сети).
Базовых методов преобразования информации, которыми располагает криптография, немного, среди них:
шифрование (симметричное и несимметричное);
вычисление хэш-функций;
генерация электронной цифровой подписи;
генерация последовательности псевдослучайных чисел.
1.3 Хеш-функция
Функция хеширования [3] - это отображение h из множества А* всех последовательностей символов из алфавита А в алфавит Аm , где m - натуральное число, таким образом каждая последовательность произвольной длины над А отображается в последовательность длины m над А. Иными словами, хэш-функция - это алгоритм, инвертирующий строку произвольной длины в битовую строку фиксированной длины.
Хеш-функция предназначена для сжатия подписываемого документа до нескольких десятков или сотен бит. Обычно хешированная информация является сжатым двоичным представлением основного сообщения произвольной длины [3] . Следует отметить, что значение хеш-функции h(М) сложным образом зависит от документа М и не позволяет восстановить сам документ М.
Хеш-функция должна удовлетворять целому ряду условий:
хеш-функция должна быть чувствительна к всевозможным изменениям в тексте М, таким как вставки, выбросы, перестановки и т.п.;
хеш-функция должна обладать свойством необратимости, то есть задача подбора документа М', который обладал бы требуемым значением хеш-функции, должна быть вычислительно неразрешима;
вероятность того, что значения хэш-функций двух различных документов (вне зависимости от их длин) совпадут, должна быть ничтожно мала.
Большинство хеш-функций строится на основе однонаправленной функции f(·), которая образует выходное значение длиной n при задании двух входных значений длиной n. Этими входами являются блок исходного текста М, и хеш-значение Нi-1 предыдущего блока текста (Рис.1).
Рисунок 1.1 - Построение однонаправленной хеш-функции
Нi = f(Мi, Нi-1)(1.1)
Хеш-значение, вычисляемое при вводе последнего блока текста, становится хеш-значением всего сообщения М.
В результате однонаправленная хеш-функция всегда формирует выход фиксированной длины n (независимо от длины входного текста).
1.4 Электронная цифровая подпись
Электронная цифровая подпись [3] (сообщения или электронного документа) - представляет собой конечную цифровую последовательность, зависящую от самого сообщения или документа и от секретного ключа, известного только подписывающему субъекту, предназначенная для установления авторства. Предполагается, что цифровая подпись должна быть легко проверяемой без получения доступа к секретному ключу. При возникновении спорной ситуации, связанной с отказом подписывающего от факта подписи некоторого сообщения либо с попыткой подделки подписи, третья сторона должна иметь возможность разрешить спор. Цифровая подпись позволяет решить следующие три задачи: осуществить аутентификацию источника данных, установить целостность сообщения или электронного документа, обеспечить невозможность отказа от факта подписи конкретного сообщения.
Электронная цифровая подпись функционирует на основе криптоалгоритмов с асимметричными (открытыми) ключами [6] и инфраструктуры открытых ключей. Проблема традиционных алгоритмов шифрования с симметричными ключами заключается в том, что шифрование и дешифрование происходит при помощи одного и того же ключа. В связи с этим возникает вопрос об обмене ключами. Для того чтобы произвести защищенный обмен информацией, пользователям необходимо обменятся ключами, при чем использовать для этого обмена альтернативные средства передачи информации, поскольку при обмене нешифрованной информацией по электронной почте высока вероятность дискредитации ключа. Идеальным, с точки зрения безопасности, вариантом представляется личный обмен ключевыми носителями, однако он является наиболее ресурсоемким.
В криптосистемах на основе асимметричных ключей [6] для шифрования и дешифрования используется пара ключей - секретный и публичный ключи, уникальные для каждого пользователя, и цифровой сертификат. Цифровой сертификат представляет собой расширение открытого ключа, включающего не только сам ключ, но и дополнительную информацию, описывающую принадлежность ключа, время использования, доступные криптосистемы, название удостоверяющего центра и т.д.
Для реализации подобного взаимодействия используются специальные структуры, удостоверяющие центры. Их основная функция - распространение публичных и секретных ключей пользователей, а также верификация сертификатов. Удостоверяющие центры могут объединяться в цепочки. Вышестоящий (корневой) удостоверяющий центр может выдать сертификат и права на выдачу ключей нижестоящему центру. Тот, в свою очередь, может выдать права еще другому нижестоящему центру и так далее, причем, сертификат, выданный одним из центров, может быть верифицирован любым из серверов в цепочке. Таким образом, существует возможность установить центр распространения секретных ключей в непосредственной близости от пользователя, что решает проблему дискредитации ключа при передаче по сетям связи.
В случае с ЭЦП [6] процесс обмена сообщением выглядит следующим образом:
- отправитель получает у удостоверяющего центра секретный ключ;
- используя этот ключ, формирует электронную цифровую подпись и отправляет письмо;
- получатель при помощи публичного (общедоступного) ключа и цифрового сертификата, полученного у удостоверяющего центра, устанавливает авторство документа и отсутствие искажений.
Как видно из схемы обмена, на удостоверяющих центрах лежит огромная ответственность, поскольку именно они отвечают за надежность функционирования всей инфраструктуры открытых ключей.
Хеш-функции также нашли свою реализацию в системах ЭЦП. Поскольку подписываемые документы -- переменного (и как правило достаточно большого) объёма, в схемах ЭЦП зачастую подпись ставится не на сам документ, а на его хеш. Для вычисления хеша используются криптографические хэш-функции, что гарантирует выявление изменений документа при проверке подписи. Хеш-функции не являются частью алгоритма ЭЦП, поэтому в схеме может быть использована любая надёжная хеш-функция.
2. ЭЛЕКТРОННАЯ ЦИФРОВАЯ ПОДПИСЬ ПО ЭЛЬ-ГАМАЛЮ И DSS/DSA
2.1 Цифровая подпись на основе алгоритма Эль-Гамаля (EGSA)
Идея EGSA [8] основана на том, что для обоснования практической невозможности фальсификации цифровой подписи может быть использована более сложная вычислительная задача, чем разложение на множители большого целого числа, - задача дискретного логарифмирования[8]. Кроме того, Эль-Гамалю удалось избежать явной слабости алгоритма цифровой подписи RSA, связанной с возможностью подделки цифровой подписи под некоторыми сообщениями без определения секретного ключа[8].
Группа пользователей выбирает общие параметры Р и А. Затем каждый абонент группы выбирает свое секретное число Хi, 1 < Хi< Р-1, и вычисляет соответствующее ему открытое число:
цифровая подпись криптографическая хеш
(2.1)
Таким образом, каждый пользователь получает пару (закрытый ключ; открытый ключ) = (Хi, Yi). Открытые ключи пользователей[8] могут храниться в общей базе системы распределения ключей и при необходимости предоставляться всем абонентам системы.
Сообщение, предназначенное для подписи, должно быть представлено в виде числа, меньшего модуля Р. При большом размере сообщение разбивается на блоки необходимого размера. В некоторых случаях подписывается не само сообщение, а значение хеш-функции от него. В любом варианте цифровая подпись вычисляется в зависимости от некоторого числа m (m < P).
Пусть пользователь 1 хочет подписать свое сообщение цифровой подписью и передать его пользователю 2. В этом случае алгоритм действий следующий:
Первый пользователь выбирает случайное секретное число k, взаимно простое с Р-1, и вычисляет число а
(2.2)
Затем с помощью расширенного алгоритма Евклида необходимо найти значение b в следующем уравнении:
m = (X1 * a +k * b) mod (P-1) (2.3)
Пара чисел (a, b) будет цифровой подписью сообщения m.
Сообщение m вместе с подписью (a, b) отправляется пользователю 2.
Пользователь 2 получает сообщение m и с использованием открытого ключа первого абонента Y1 вычисляет два числа по следующим формулам:
(2.4)
Если с1 = с2, то цифровая подпись первого пользователя верная. Для подписывания каждого нового сообщения должно каждый раз выбираться новое значение k.
Подписи, созданные с использованием алгоритма Эль-Гамаля[8], называются рандомизированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будут создаваться разные подписи (a,b), поскольку каждый раз будет использоваться новое значение k. Подписи, созданные с применением алгоритма RSA[8], называются детерминированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будет создаваться одна и та же подпись.
2.1.1 Формирование и проверка подписи EGSA
Пусть абоненты, обменивающиеся через Интернет зашифрованными сообщениями, имеют следующие общие параметры: Р = 11, А = 7.
Один из пользователей этой системы связи хочет подписать свое сообщение m=5 цифровой подписью, сформированной по алгоритму Эль-Гамаля. Вначале он должен выбрать себе закрытый ключ, например, Х1=3 и сформировать открытый ключ Y1 = 73 mod 11 = 2. Открытый ключ может быть передан всем заинтересованным абонентам или помещен в базу данных открытых ключей системы связи.
Затем пользователь выбирает случайное секретное число k, взаимно простое с Р-1. Пусть k=9 ( 9 не имеет общих делителей с 10 ). Далее необходимо вычислить число
(2.5)
После этого с помощью расширенного алгоритма Евклида находится значение b в уравнении:
(2.6)
Решением последнего уравнения будет значение b=9.
Таким образом, пара чисел (8, 9) будет цифровой подписью сообщения m=5.
Если любой другой пользователь сети желает проверить цифровую подпись в сообщении, он должен получить из базы данных[8] открытый ключ первого пользователя (он равен 2 ), вычислить два числа с1 и с2 и сравнить их.
(2.7)
Так как с1 = с2, то цифровая подпись первого пользователя в сообщения m=5 верная.
2.2 Стандарт ЭЦП DSS
В 1991 г. NIST (National Institute of Standards and Technology) [8] предложил для обсуждения проект стандарта ЭЦП DSS (Digital Signature Standard), использующий алгоритм DSA (Digital Signature Algorithm). Стойкость данного алгоритма основана на сложности решения задачи дискретного логарифмирования в мультипликативной группе простого поля[8] F(/p). Цифровая подпись служит для установления изменений данных и для установления подлинности подписавшейся стороны. Получатель подписанных данных может использовать цифровую подпись для доказательства третьей стороне факта, что подпись действительно сделана отправляющей стороной.
2.2.1 Подход DSS
DSS использует алгоритм[8], который разрабатывался для использования только в качестве цифровой подписи. В отличие от RSA, его нельзя использовать для шифрования или обмена ключами. Тем не менее, это технология открытого ключа.
Рассмотрим отличия подхода, используемого в DSS для создания цифровых подписей, от применения таких алгоритмов как RSA.
Рис. 2.2.1.1. Создание и проверка подписи с помощью алгоритма RSA
Рис. 2.2.1.2. Создание и проверка подписи с помощью стандарта DSS
Подход DSS использует сильную хэш-функцию. Хэш-код[8] является входом функции подписи вместе со случайным числом k, созданным для этой конкретной подписи. Функция подписи также зависит от закрытого ключа отправителя KRa и множества параметров, известных всем участникам. Можно считать, что это множество состоит из глобального открытого ключа KUG. Результатом является подпись, состоящая из двух компонент, обозначенных как s и r.
Для проверки[8] подписи получатель также создает хэш-код полученного сообщения. Этот хэш-код вместе с подписью является входом в функцию верификации. Функция верификации[8] зависит от глобального открытого ключа KUG и от открытого ключа отправителя KUa. Выходом функции верификации является значение, которое должно равняться компоненте r подписи, если подпись корректна. Функция подписи такова, что только отправитель, знающий закрытый ключ, может создать корректную подпись.
2.2.2 Формирование и проверка подписи DSS
1. Отправитель А сообщения М предоставляет широкому кругу абонентов (получателей его сообщений) доступ к следующим параметрам:
p -- простое число, 2(\512) < р< 2(\1024), битовая длинам кратна 64;
q -- простое число, 2(\159) <р< 2(\160), и делитель р-1
g=h(\((p-1)/q))(mod p) (2.8)
где h -- такое целое число, что 0 < h < p и h(\((p-1)/q)) (mod p) > 1;
у -- открытый ключ, сформированный по правилу у = a(\x)(mod p). Здесь x -- секретный ключ, известный только А, причем 0 < x < q;
З (М) -- хэш-функция, которая по исходному сообщению М формирует целое число в диапазоне от 1 до q
2. Пользователь А генерирует случайное число к такое, что 0 < к < q, держит его в секрете и уничтожает сразу после получения подписи.
3. А находит два числа r и s по следующему правилу:
r=(g(\k)(mod p))(mod q) (2.9)
s=k(\-1)(xr+H(M))(mod q) (2.10)
Подписью к сообщению М является пара (r, s).
Проверка подписи. Пользователь В получает от А сообщение M' и подпись (r',s') к нему. B должен убедиться, что М совпадает с M'. Для этого:
1) если хотя бы одно из условий 0<s'<q, 0<r'<q не выполняется, то подпись считается недействительной;
2) В находит v=(s')(\-1) mod q (2.11)
3) В вычисляет z(/-1)=H(M')v(mod q), z(/2)=r'v(mod q)(2.12)
4) далее вычисляется u=(g(\z(/1))y(\z(/2))(mod p))(mod q) (2.13)
5) В проверяет условие r'=u Если оно выполняется, то подпись считается подлинной и сообщение не измененным, т.е. M'= М.
2.3 Стандарт ЭЦП DSA
В 1991 г. в США был опубликован проект федерального стандарта цифровой подписи - DSS (Digital Signature Standard, [DSS91], описывающий систему цифровой подписи DSA (Digital Signature Algorithm) [8]. Одним из основных критериев при создании проекта была его патентная чистота.
Предлагаемый алгоритм DSA, имеет, как и RSA, теоретико-числовой характер, и основан на криптографической системе Эль-Гамаля в варианте Шнорра. Его надежность основана на практической неразрешимости определенного частного случая задачи вычисления дискретного логарифма. Современные методы решения этой задачи имеют приблизительно ту же эффективность, что и методы решения задачи факторизации; в связи с этим предлагается использовать ключи длиной от 512 до 1024 бит [8] с теми же характеристиками надежности, что и в системе RSA. Длина подписи в системе DSA меньше, чем в RSA, и составляет 320 бит [8].
С момента опубликования проект получил много критических отзывов, многие из которых были учтены при его доработке. Одним из главных аргументов против DSA является то, что, в отличие от общей задачи вычисления дискретного логарифма[8], ее частный случай, использованный в данной схеме, мало изучен и, возможно, имеет существенно меньшую сложность вскрытия. Кроме того, стандарт не специфицирует способ получения псевдослучайных чисел, используемых при формировании цифровой подписи, и не указывает на то, что этот элемент алгоритма является одним из самых критичных по криптографической стойкости.
Функции DSA ограничены только цифровой подписью, система принципиально не предназначена для шифрования данных. По быстродействию система DSA сравнима с RSA [8] при формировании подписи, но существенно (в 10-40 раз) уступает ей при проверке подписи.
Вместе с проектом DSS опубликован проект стандарта SHS (Secure Hash Standard), описывающий однонаправленную хэш-функцию SHA (Secure Hash Algorithm), рекомендованную для использования вместе с DSA. Хэш-функция SHA является модификацией алгоритма MD4 [8], хорошо известного в криптографической литературе.
2.3.1 Формирование и проверка подписи DSА
При генерации ЭЦП используются параметры трех групп:
- общие параметры
- секретный ключ
- открытый ключ
Общие параметры необходимы для функционирования системы в целом. Секретный ключ используется для формирования ЭЦП, а открытый - для проверки ЭЦП. Общими параметрами системы являются простые целые числа p,q,g, удовлетворяющие следующим условиям:
p: 2^511<p<2^512
q: простой делитель числа (p-1), который удовлетворяет условию
2^159<q<2^160
g: так называемый генератор, удовлетворяющий равенству:
g=h^((p-1)/q)mod p >1. (2.14)
Параметры p,q,g публикуются для всех участников обмена ЭД с ЭЦП. Секретный ключ x случайно выбирается из диапазона [1,q] и держится в секрете.
Открытый ключ вычисляется:
y=g^x mod p.(2.15)
Также при описании данной схемы будут использоваться следующие обозначения и дополнительные параметры: m - входное сообщение пользователя для схемы с ЭЦП; k - случайное число, удовлетворяющее условию 0<k<q, хранящееся в секрете и меняющееся от одной подписи к другой; H - хэш-функция, h - хэш-код сообщения.
Процесс генерации ЭЦП состоит из нескольких этапов:
1.Вычисляется хэш-код сообщения m h=H(m)
2.Из диапазона [1,q] случайным образом выбирается значение k и вычисляется r= (g^k mod p) mod q (2.16)
3. Вычисляется S= (k^-1(h+xr)) mod q, (2.17) где k^-1 удовлетворяет условию (k^-1*k) mod q =1
Значения r,s являются ЭЦП сообщения m и передаются вместе с ним по каналам связи.
Проверка ЭЦП. Пусть принято сообщение m1 и его подпись s1,r1.
Проверка ЭЦП происходит следующим образом:
- проверяется выполнение условий 0<r1<q, 0<s1<q, и если хотя бы одно из них нарушено, подпись отвергается.
- Вычисляются значения:
w= s1^-1 mod q (2.18)
u1 = (H(m1)w) mod q(2.19)
u2 = ((r1/w) mod q (2.20)
v = (( g^u1y^u2) mod p ) mod q (2.21)
- проверяется равенство v = r1
Если последнее равенство выполняется, то подпись принимается. В данном стандарте специфицируется также процедура генерации основных параметров системы и проводится доказательство того, что если v=r1, то m1=m, r1=r, s1=s.
3. РАЗРАБОТКА ПРОГРАММНОГО КОДА
3.1 Электронная цифровая подпись по Эль-Гамалю
Для выполнения курсовой работы я использовал Adobe Flash с реализацией интерфейса через ActionScript 3.0.
Для получения рабочей электронной цифровой подписи по Эль-Гамалю мне было необходимо реализовать в программе хеширование. В алгоритме программы функция хеширования описывается подобным образом:
var m:Number = 0;
var osn:Number = 0;
var M:String;
var arr_o:Array = new Array();
key_hesh.addEventListener(MouseEvent.CLICK, get_hesh)
function get_hesh(e:MouseEvent):void
{
M = otkritii.text;
for (var ind_1:Number = 0; ind_1 < M.length; ind_1++)
{ arr_o.push(M.charCodeAt(ind_1)); }
//РЕАЛИЗАЦИЯ ФУНКЦИИ ХЕШИРОВАНИЯ
for(var ind_2:Number = 0; ind_2 < M.length; ind_2++)
{osn = Math.pow(arr_o[ind_2], m) % 256;
m = ((osn + arr_o[ind_2]) % 30) + 2;}
hesh.text = String(m);
for (var ind_3:Number = 0; ind_3 < M.length; ind_3++)
{ arr_o.pop(); }
}
В следующей части программы я реализовал объявление переменных в области от 1381 до 3989.
Теперь я приступил к реализации самой электронной цифровой подписи:
for(var gli:Number = 1; gli > 0; gli++)
{
//ГЕНЕРАЦИЯ ПАРАМЕТРОВ P И G
ind = Math.floor(Math.random()*330);
P = prostie_chisla[ind];
gua_1 = (P - 1);
gua_2 = (P - 3);
var pre_3:Number = 0;
var pre_4:Number = 0;
for( G = 1; G < P - 1; G++)
{
for(var i_on1:Number = 0; i_on1 < (P - 1); i_on1++)
{
on_G1 = on_G1 * G;
on_G1 = on_G1 % P;
}
if( on_G1 == 1)
{
pre_3 = 1;
}
if( on_G1 != 1)
{
pre_3 = 0;
}
on_G1 = 1;
for(var l:Number = 1; l < P - 2; l++)
{
for(var i_on2:Number = 0; i_on2 < l; i_on2++)
{
on_G2 = on_G2 * G;
on_G2 = on_G2 % P;
}
if( on_G2 == 1)
{
pre_4 = 0;
break;
}
if( on_G2 != 1)
{
pre_4 = 1;
}
on_G2 = 1;
}
if( pre_3 == 1 && pre_4 == 1)
{
break;
}
}
//ГЕНЕРАЦИЯ X И К И ВЫЧИСЛЕНИЕ Y
X = Math.floor(Math.random()*gua_2) + 2;
for(var i_Y:Number = 0; i_Y < X; i_Y++)
{
on_Y = on_Y * G;
on_Y = on_Y % P;
}
Y = on_Y % P;
for(var l_1:Number = 1; l_1 > 0; l_1++)
{
K = Math.floor(Math.random()*gua_2) + 2;
nod_a = P - 1;
nod_b = K;
for(var l_2:Number = 1; l_2 > 0; l_2++)
{
if((nod_a != 0) || (nod_b != 0))
{
if(nod_a > nod_b)
{
nod_a = nod_a % nod_b;
}
else nod_b = nod_b % nod_a;
}
if((nod_a == 0) || (nod_b == 0))
{
nod = nod_a + nod_b;
break;
}
}
if(nod == 1)
{
break;
}}
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ПОДПИСИ
for(var i_a:Number = 0; i_a < K; i_a++)
{
on_a = on_a * G;
on_a = on_a % P;
}
a = on_a % P;
for(var b:Number = 1; b > 0; b++)
{
on_b1 = X*a + K*b;
on_b2 = on_b1 % (P - 1);
if(m == on_b2)
{
break;
}}
for(var i_par1:Number = 0; i_par1 < a; i_par1++)
{
on_par1 = on_par1 * Y;
on_par1 = on_par1 % P;
}
par_1 = on_par1 % P;
for(var i_par2:Number = 0; i_par2 < b; i_par2++)
{
on_par2 = on_par2 * a;
on_par2 = on_par2 % P;
}
par_2 = on_par2 % P;
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ
on_A1 = par_1*par_2;
A_1 = on_A1 % P;
for(var i_A2:Number = 0; i_A2 < m; i_A2++)
{
on_A2 = on_A2 * G;
on_A2 = on_A2 % P;
}
A_2 = on_A2;
if(b < 0)
{
b = (b + (P - 1));
}
if(((b % 1) == 0) && (b > 5) && (a > 5) && (b != a) && (A_1 == A_2))
{
break;
}
on_a = 1;
on_Y = 1;
on_par1 = 1;
on_par2 = 1;
on_A2 = 1;}
Далее я реализовал режим проверки подлинности цифровой подписи:
function on_pr(e:MouseEvent):void
{
//РЕЖИМ ПРОВЕРКИ
//ПРИНЯТИЕ ПАРАМЕТРОВ
P = Number(proverka.P_znach.text);
G = Number(proverka.G_znach.text);
Y = Number(proverka.Y_znach.text);
a = Number(proverka.a_znach.text);
b = Number(proverka.b_znach.text);
trace(P + " " + G + " " + Y + " " + a + " " + b);
for(var i_par1:Number = 0; i_par1 < a; i_par1++)
{
on_par1 = on_par1 * Y;
on_par1 = on_par1 % P;
}
par_1 = on_par1 % P;
for(var i_par2:Number = 0; i_par2 < b; i_par2++)
{
on_par2 = on_par2 * a;
on_par2 = on_par2 % P;
}
par_2 = on_par2 % P;
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ
on_A1 = par_1*par_2;
A_1 = on_A1 % P;
for(var i_A2:Number = 0; i_A2 < m; i_A2++)
{
on_A2 = on_A2 * G;
on_A2 = on_A2 % P;
}
A_2 = on_A2;
//ВЫВОД В ИНТЕРФЕЙС
proverka.A_1_znach.text = String(A_1);
proverka.A_2_znach.text = String(A_2);
3.2 Электронная цифровая подпись по DSS/DSA
Для получения рабочей электронной цифровой подписи по DSS/DSA мне было необходимо реализовать в программе хеширование. В алгоритме программы функция хеширования описывается подобным образом:
var m:Number = 0;
var osn:Number = 0;
var M:String;
var arr_o:Array = new Array();
key_hesh.addEventListener(MouseEvent.CLICK, get_hesh)
function get_hesh(e:MouseEvent):void
{
//ВЗЯТИЕ ТЕКСТА ДЛЯ ХЕША
M = otkritii.text;
for (var ind_1:Number = 0; ind_1 < M.length; ind_1++)
{
arr_o.push(M.charCodeAt(ind_1));
}
//ХЕШИРОВАНИЕ
for(var ind_2:Number = 0; ind_2 < M.length; ind_2++)
{
osn = Math.pow(arr_o[ind_2], m) % 256;
m = ((osn + arr_o[ind_2]) % 30) + 2;
}
hesh.text = String(m);
for (var ind_3:Number = 0; ind_3 < M.length; ind_3++)
{
arr_o.pop();
}
}
В слудующей части программы я реализовал объявление переменных в диапазоне от 1381до 3989.
Теперь я приступил к реализации самой электронной цифровой подписи:
{
//РЕЖИМ ПОДПИСИ
for(var gli:Number = 1; gli > 0; gli++)
{
//ГЕНЕРАЦИЯ ПАРАМЕТРОВ P, Q И G
for(var kil:Number = 1; kil > 0; kil++)
{
ind = Math.floor(Math.random()*330);
P = prostie_chisla[ind];
gua_1 = (P - 3);
kon = Math.floor(Math.random()*20);
q = prostie_chisla2[kon]
if((P - 1) % q == 0)
{
trace(P + " " + q);
gua_2 = (q - 3);
break;
}
}
for(var ali:Number = 1; ali > 0; ali++)
{
h = Math.floor(Math.random()*gua_1) + 2;
for(var i_on1:Number = 0; i_on1 < ((P - 1)/q); i_on1++)
{
on_G = on_G * h;
on_G = on_G % P;
}
G = on_G;
if(G > 1)
{
trace(G);
break;
}}
//ГЕНЕРАЦИЯ X И K, ВЫЧИСЛЕНИЕ Y, A И B
X = Math.floor(Math.random()*gua_2) + 2;
for(var i_on1:Number = 0; i_on1 < X; i_on1++)
{
on_Y = on_Y * G;
on_Y = on_Y % P;
}
Y = on_Y;
K = Math.floor(Math.random()*gua_2) + 3;
for(var i_on1:Number = 0; i_on1 < K; i_on1++)
{
on_a = on_a * G;
on_a = on_a % P;
}
a = (on_a % q);
trace(a);
on_b = (m + a*X)/K ;
b = (on_b % q);
W = (1 / b);
U_1 = (m*W);
U_2 = (a*W);
par_1 = Math.pow(G, U_1);
par_2 = Math.pow(Y, U_2);
on_V = ((par_1)*(par_2)) % P;
V = on_V % q;
trace(V);
on_par1 = 1;
on_par2 = 1;
on_V = 1;
on_G = 1;
on_Y = 1;
on_a = 1;
on_b = 1;
if(((b % 1) == 0) && (a > 5) && (b > 5) && (a != b) && ((V % 1) == 0) && (a == V))
{
break;
}}
Следующей частью кода я вывожу электронную цифровую подпись в интерфейс.
podpis.P_znach.text = String(P);
proverka.P_znach.text = String(P);
podpis.G_znach.text = String(G);
proverka.G_znach.text = String(G);
podpis.q_znach.text = String(q);
proverka.q_znach.text = String(q);
podpis.X_znach.text = String(X);
podpis.Y_znach.text = String(Y);
proverka.Y_znach.text = String(Y);
podpis.K_znach.text = String(K);
podpis.a_znach.text = String(a);
proverka.a_znach.text = String(a);
podpis.b_znach.text = String(b);
proverka.b_znach.text = String(b);
Далее я реализовал режим проверки подлинности цифровой подписи:
function on_pr(e:MouseEvent):void
{
//РЕЖИМ ПРОВЕРКИ ПОДПИСИ
//ПРИНЯТИЕ ПАРАМЕТРОВ
P = Number(proverka.P_znach.text);
G = Number(proverka.G_znach.text);
q = Number(proverka.q_znach.text);
Y = Number(proverka.Y_znach.text);
a = Number(proverka.a_znach.text);
b = Number(proverka.b_znach.text);
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ
W = (1 / b);
U_1 = (m*W);
U_2 = (a*W);
par_1 = Math.pow(G, U_1);
par_2 = Math.pow(Y, U_2);
on_V = ((par_1)*(par_2)) % P;
V = on_V % q;
on_par1 = 1;
on_par2 = 1;
on_V = 1;
//ВЫВОД В ИНТЕРФЕЙС
proverka.U_1_znach.text = String(U_1);
proverka.U_2_znach.text = String(U_2);
proverka.V_znach.text = String(V);
}
4. РЕЗУЛЬТАТЫ
4.1 Интерфейс программы реализующей ЭЦП по ЕGSА
Интерфейс моей программы состоит из трёх основных режимов работы: хеширования сообщения, формирования подписи и проверки подписи.
Рисунок 4.1.1 - Интерфейс программы реализующей ЭЦП по ЕGSА
Интерфейс программы реализующей ЭЦП по DSS/DSA
Интерфейс моей программы состоит из трёх основных режимов работы: хеширования сообщения, формирования подписи и проверки подписи.
Рисунок 4.2.1 - Интерфейс программы реализующей ЭЦП по DSS/DSA
ВЫВОДЫ
Научно-техническая революция в последнее время приняла грандиозные масштабы в области информатизации общества на базе современных средств вычислительной техники, связи, а также современных методов автоматизированной обработки информации. Применение этих средств и методов приняло всеобщий характер, а создаваемые при этом информационно-вычислительные системы и сети становятся глобальными как в смысле территориальной распределенности, так и в смысле широты охвата в рамках единых технологий процессов сбора, передачи, накопления, хранения, поиска, переработки информации и выдачи ее для использования.
Информация в современном обществе - одна из самых ценных вещей в жизни, требующая защиты от несанкционированного проникновения лиц, не имеющих к ней доступа.
Электронная цифровая подпись - эффективное решение для всех, кто хочет идти в ногу с новыми требованием времени. Если у Вас нет времени ждать прихода фельдъегерской или курьерской почты за многие сотни километров, чтобы проверить подтвердить заключение сделки или подлинность полученной информации. Преимущества ЭЦП очевидны - документы, подписанные электронной цифровой подписью, могут быть переданы к месту назначения в течение нескольких секунд. Все участники электронного обмена документами получают равные возможности независимо от их удаленности друг от друга. Границы благодаря новым технологиям стираются в 21 веке.
Подделать ЭЦП невозможно - для этого требуется огромного количества вычислений, которые не могут быть реализованы при современном уровне вычислительной техники и математики за приемлемое время, то есть пока информация, содержащаяся в подписанном документе, сохраняет актуальность.
ИСТОЧНИКИ ДАННЫХ
Беляев А.В. "Методы и средства защиты информации".
Баричев С.Г. Основы современной криптографии - Москва, Горячая линия - Телеком, 2001.
Петров А.А. Компьютерная безопасность. Криптографические методы защиты. ДМК Москва, 2000 г.
Столлингс В. Криптография и защита сетей: теория и практика. М: Вильямс. 2001.
Терехов А.Н. "Программирование РАН", N 5 (сентябрь-октябрь), 1994, стр. 17--22 .
Криптографические алгоритмы с открытым ключом (http://argosoft.webservis.ru/Base/RSAintro.html#Криптографические алгоритмы с открытым ключом)
Размещено на Allbest.ru
Подобные документы
Правовое регулирование отношений в области использования электронной цифровой подписи. Понятие и сущность электронной цифровой подписи как электронного аналога собственноручной подписи, условия ее использования. Признаки и функции электронного документа.
контрольная работа [34,5 K], добавлен 30.09.2013Организационно-правовое обеспечение электронной цифровой подписи. Закон "Об электронной цифровой подписи". Функционирование ЭЦП: открытый и закрытый ключи, формирование подписи и отправка сообщения. Проверка (верификация) и сфера применения ЭЦП.
курсовая работа [22,9 K], добавлен 14.12.2011Электронная цифровая подпись: понятие, составляющие, назначение и преимущества ее использования. Использование ЭЦП в мире. Правовые основы и особенности использования ЭЦП в Украине. Функция вычисления подписи на основе документа и секретного ключа.
реферат [22,7 K], добавлен 26.12.2009Схема формирования электронной цифровой подписи, её виды, методы построения и функции. Атаки на электронную цифровую подпись и правовое регулирование в России. Средства работы с электронной цифровой подписью, наиболее известные пакеты и их преимущества.
реферат [27,8 K], добавлен 13.09.2011Назначение электронной цифровой подписи как реквизита электронного документа, предназначенного для его защиты с помощью криптографического ключа. Асимметричные алгоритмы шифрования и атаки на электронную подпись. Средства работы с цифровой подписью.
реферат [20,6 K], добавлен 09.10.2014Назначение и применение электронной цифровой подписи, история ее возникновения и основные признаки. Виды электронных подписей в Российской Федерации. Перечень алгоритмов электронной подписи. Подделка подписей, управление открытыми и закрытыми ключами.
курсовая работа [604,0 K], добавлен 13.12.2012Алгоритм функции формирования и проверки подписи. Интерфейс как аппаратная или программная система сопряжения объектов с различными характеристиками. Разработка программы, которая реализует процедуру подписи сообщения и процедуру проверки подписи.
курсовая работа [150,0 K], добавлен 13.11.2009Виды информационных систем и защита информации в них. Проблемы, возникающие в процессе защиты ИС различных видов. Электронная цифровая подпись и ее применение для защиты информационной системы предприятия. Анализ защищенности хозяйствующего субъекта.
дипломная работа [949,0 K], добавлен 08.11.2016Разъяснения по использованию систем цифровой подписи в связи с ведением закона "Об электронной цифровой подписи". Пример практического применения механизма электронно-цифровой подписи: программа контроля подлинности документов, хранимых в базе данных.
контрольная работа [180,1 K], добавлен 29.11.2009Электронная цифровая подпись. Асимметричные алгоритмы шифрования. Сценарий распределения открытых ключей, обмен сертификатами. Выбор программных средств. Математическая модель. Скорости Эль-Гамаля для различных длин модулей. Программная реализация.
дипломная работа [461,7 K], добавлен 22.09.2011