Разработка и программная реализация электронной цифровой подписи асимметричным методом шифрования данных

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



подписать и вычисляет подпись DKA(x).

2.A передает B пару (x,DKA(x)).

.B проверяет равенство EKA(DKA(x)) = x. В случае совпадения обоих величин B принимает решение о подлинности сообщения x, в противном случае B принимает решение считать сообщение x искаженным.

Рассмотренный протокол взаимодействия имеет следующий недостаток: так как функция EKA(x) - опубликована, то злоумышленник C может для любого z вычислить EKA(z) и предать в канал связи пару (EKA(z),z). Несложно видеть, что в этом случае z, будет подписью для EKA(z). Для предотвращения такой возможности пользователи должны подписывать не сами сообщения, а их хэши, то есть значения хэш-функции от сообщения.

Напомним определение хэш-функции.

Функция h:X -> M называется хэш функцией, если выполнены следующие условия:

1.Постоянство размера - для входного массива данных любого размера результатом должен быть блок данных фиксированного размера.

2.Функция h(x) легко вычислима

.Функцию h(x) трудно инвертировать, то есть почти для всех m из M трудно найти x из X такой, что h(x) = m.

.Для данного x сложно найти x' неравный x такой, что h(x) = h(x').

.Сложно найти пару (x, x') из X2 такую, что x неравен x' и h(x) = h(x').

Где M - множество векторов фиксированной длины, а X - вектора произвольной длины. Пара (x, x') из X2 такая, что x неравно x' и h(x) = h(x') называется коллизией хэш-функции h.

Помимо устранения рассмотренной выше возможности создания подписи без знания секретного ключа, использование хэш-функции решает еще одну проблему: дело в том, что функции EKA(x) и DKA(x) оперируют с блоками данных фиксированного размера, а размер сообщения может превышать этот размер. Без использования хэш-функции подписывать сообщение x пришлось бы следующим образом:

x = (x1,..,xk) \to ( (x1,DKA(x1)),.., (xk,DKA(xk))).

Где x1,..,xk - вектора фиксированной длины, совпадающей с длиной входа функций EKA(x) и DKA(x). Подобная подпись обладает следующими недостатками:

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

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

Модифицированный протокол выглядит таким образом:

1.A создает сообщение x, которое он собирается подписать и вычисляет его хэш h(x), после чего подписывает DKA(h(x)).

2.A передает B пару (x,DKA(h(x))).

.B проверяет равенство EKA(DKA(h(x))) = h(x). В случае совпадения обоих величин B принимает решение о подлинности сообщения x, в противном случае B принимает решение считать сообщение x искаженным.

В этом протоколе возможность подделки подписи может быть основана на нахождении коллизии хэш-функции, то есть по известному значению h(x) найти x' такой, что h(x) = h(x'). Для предотвращения этой возможности нельзя использовать непроверенные функции. Как правило, стойкие к коллизиям хэш-функции описаны в государственном стандарте. В Российской Федерации этот стандарт носит название ГОСТ Р 34.11-94, в США - описывается документами FIPS 180-1 и FIPS 180-2, а в Евросоюзе рекомендуется использование стандарта Whirlpool. Отечественный стандарт хэширования был принят в 1994 году и с тех пор не изменялся, размер хэш-блока для него составляет 256 бит. В США изначально действовал стандарт SHS (secure hash standard), где размер хэш-блока был равен 160 бит. Однако в 2002 году стандарт был пересмотрен: прежний остался действовать и получил обозначение SHA-1, но к нему были добавлены три новых алгоритма, вырабатывающие хэш-блоки размером 256,384 и 512 бит, названные SHA-256/384/512 соответственно.

Рисунок 1.1-Алгоритм электронной цифровой подписи.

1.2 Асимметричные алгоритмы шифрования

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

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

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

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

В целом система переписки при использовании асимметричного шифрования выглядит следующим образом. Для каждого из N абонентов, ведущих переписку, выбрана своя пара ключей: "открытый" Ej и "закрытый" Dj, где j - номер абонента. Все открытые ключи известны всем пользователям сети, каждый закрытый ключ, наоборот, хранится только у того абонента, которому он принадлежит. Если абонент, скажем под номером 7, собирается пере