Реализация цифровой подписи

Чтобы поставить цифровую подпись под конкретным документом, необходимо проделать довольно большой объем вычислений. Эти действия осуществляются в два этапа:
? генерация ключей;
? подписания документа.


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


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


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


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


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


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


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


Свойство необратимости заключается в том, что задача подбора документа, который должен необходимое значение хэш-функции, вычислительно неразрешима. Для данной функции нельзя вычислить, какие два исходные сообщения могут генерировать то же хэш-значение, поскольку хэш-значения двух 256-битных документов могут совпасть лишь в одном из 2256 (1077) случаев.
При подписании, прежде документ «сжимают» до нескольких десятков или сотен байт с помощью хэш-функции. Здесь термин «сжатие» вовсе не аналогичен термину «архивирование». После архивирования информация может быть восстановлена. Значение же хэш-функции лишь только зависит от документа, но не позволяет восстановить сам документ.
Если в полученном хэш-значению применяется некоторое математическое преобразование (шифрование секретным ключом), то на выходе и получается цифровой подписи документа.


Размер собственно ЭЦП достаточно большой, например, для ГОСТ Р 34.10-11.94 он равен 64-м байтам. После добавления служебной информации (порядка 50 - 200 байт в зависимости от реализации) эта величина существенно возрастает.
Проверка подписи происходит в два этапа: вычисление хэш-функции документа и собственно математические вычисления, предусмотренные в данном алгоритме подписи, т.е. проверка того или иного соотношения, связывающего хэш-функцию документа, подпись под этим документом и открытый ключ абонента. Если необходимое соотношение выполнено, то подпись признается правильной, а сам документ - подлинным, в противном случае документ считается измененным, а подпись под ним - недействительной.


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


Для разрешения споров между отправителем и получателем информации, связанных с возможностью искажения ключа подписи, достоверная копия этого ключа может быть выдана третьей стороне (арбитру) и применена им при возникновении конфликта.
Предъявляя контролеру открытый ключ - значение некоторой функции, которая вычисляется с помощью секретного ключа, пользователь косвенным образом доказывает, что обладает секретным.
Существует много математических схем подписи, наиболее известные из которых:
? RSA (RLRivest, A.Shamir, L.Adleman) назван по первым буквам фамилий авторов;
? OSS (H.Ong, C.P.Schnorr, A.Shamir)
? Эль-Гамаля (T.ElGamal)
? Рабина (M.Rabin)
? Шнорр (С. P. Schnorr)
? Окамото-Сараисы (T.Okamoto, A.Shiraishi)
? Мацумото - Имаи (T.Matsumoto, H.Imai)
? схемы с использованием эллиптических кривых и др..
В схемах RSA, Рабина, Эль-Гамаля и Шнорр трудности подделки подписи обусловлена ??вычислительной сложностью факторизации или дискретного логарифмирования.


В принятых стандартах цифровой подписи США и России (DSS - Digital Signature Standard, ГОСТом Р 34.10-94 и Р 34.11-94) используются специально созданные алгоритмы. В основу этих алгоритмов положены схемы Эль-Гамаля и Шнорр. Федеральный стандарт цифровой подписи DSS, который был впервые опубликован в 1991 году в США, описывает систему цифровой подписи DSA (Digital Signature Algorithm). Этот алгоритм разработан Агентством Национальной Безопасности США и принят как стандарт цифровой подписи Национальным Институтом Стандартов и Технологии. Алгоритм использует метод шифрования с открытым ключом и является основой всей электронной коммерции, обеспечивая конфиденциальность и достоверность передаваемых по Internet данных. Длина подписи в системе DSA составляет 320 бит. Надежность всего стандарта основана на практической неразрешимости задачи вычисления дискретного логарифма. Однако, к сожалению, сегодня этот алгоритм уже не имеет достаточного временного запаса по нерозкриванню (10-20 лет). Дыра прячется в несовершенстве подпрограммы генерации псевдослучайных чисел. Вместо того чтобы вычислять разные цифры с равной вероятностью, она выбирает числа из некоторого диапазона. Этот недостаток цифровой подписи заметно облегчает ее взлом с использованием современных суперкомпьютеров.