Технологии работы с электронной подписью

Введение


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

Под катом описаны интерфейсы для работы с электронной подписью, а также распространенные форматы электронной подписи.

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

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

Отдельное внимание в вопросе работы с электронной подписью следует уделить установлению соответствия между открытым ключом подписи и непосредственно лицом, которому он принадлежит. Для решения данной задачи существует такое понятие, как «Сертификат открытого ключа электронной подписи» (или просто «цифровой сертификат»). Для выдачи, проверки действительности, отзыва и управления сертификатами необходима инфраструктура открытых ключей (Public Key Infrastructure). Вопрос сопоставления открытого ключа и его владельца – один из самых важных и сложных при работе с асимметричной криптографией, так как открытый ключ – это никак не идентифицируемый набор публичной информации, которая служит для проверки электронной подписи. А при отсутствии связки этой информации непосредственно с ее владельцем она всегда может быть изменена злоумышленником, что позволит ему формировать электронную подпись и выдавать ее за электронную подпись другого лица.

Встраивание электронной подписи в прикладные системы


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

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

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

В «западном» мире широко используется сертификация решений на соответствие Common Criteria, в России процесс сертификации средств криптографической защиты проводит ФСБ России.

Дополнительно, средства криптографической защиты информации (СКЗИ, этот термин широко используется в РФ) могут иметь самое разное представление: от программных библиотек до высокопроизводительных специализированных железок (Hardware Security Module, HSM).

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

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

Интерфейсы для доступа к СКЗИ

На сегодняшний день широкое распространение получили один промышленный стандарт работы с СКЗИ и один (фактически два) проприетарный интерфейс всеми известной компании Microsoft.

PKCS#11

PKCS#11 (Public-Key Cryptography Standard #11) – платформонезависимый программный интерфейс для работы с аппаратно реализованными СКЗИ: смарт-карты, HSM’ы, криптографические токены. Иногда PKCS#11 используется для доступа к программно реализованным криптографическим библиотекам.

PKCS#11 представляет собой довольно обширный документ, опубликованный RSA Laboratories, который описывает набор функций, механизмов, алгоритмов и их параметров для работы с криптографическими устройствами или библиотеками. В данном документе четко прописаны правила, в соответствии с которым будет работать прикладное программное обеспечение при вызове криптографических функций.

Данный стандарт поддерживается во многих open source-проектах, использующих криптографию. Для примера, Mozilla Firefox позволяет хранить сертификаты и закрытые ключи для аутентификации через SSL/TLS на токенах, работая с ними по PKCS#11.

Если прикладное программное обеспечение «умеет» работать с PKCS#11, то производителю СКЗИ необходимо реализовать программную библиотеку, которая наружу будет выставлять интерфейсы, описанные в стандарте, а внутри реализовывать необходимую СКЗИ логику: работа непосредственно с криптографическим устройством или реализация необходимых криптоалгоритмов программно. В этом случае прикладное программное обеспечение должно «подцепить» необходимую библиотеку и выполнять необходимые действия в соответствии с рекомендациями стандарта. Это обеспечивает заменяемость различных устройств и их библиотек для прикладного программного обеспечения и прозрачное использование СКЗИ в различных системах.



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

Microsoft Crypto API 2.0

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

С целью унификации доступа к криптографическим функциям компания Microsoft разработала проприетарный API: Microsoft Crypto API. Широкое распространение приобрела версия Crypto API 2.0. Парадигма Microsoft Crypto API базируется на использовании так называемых криптопровайдеров, или, по-русски, поставщиков криптографии.



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

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

Но расплатой за удобство становится платформозависимость и необходимость тесной интеграции решения в операционную систему.

В Windows Vista Microsoft представила новую версию криптографического программного интерфейса – Microsoft CNG (Cryptography API: Next Generation). Данный интерфейс базируется уже не на поставщиках криптографии, а на поставщиках алгоритмов и поставщиках хранилищ ключевой информации. В силу того, что распространенность Windows XP все еще довольно велика, CNG в прикладных системах используется крайне мало.

Проприетарные интерфейсы

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

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

Форматы электронной подписи

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

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

PKCS#7

PKCS#7 (Public-Key Cryptography Standard #7), или CMS (Cryptographic Message Syntax) – стандарт, публикуемый и поддерживаемый все той же RSA Laboratories, описываемый синтаксис криптографических сообщений.

PKCS#7 также публикуется в качестве RFC с номером 2315.

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

С этой целью в PKCS#7 размещается информация об исходном сообщении (опционально), алгоритмах хеширования и подписи, параметрах криптоалгоритмов, времени подписи, сертификат ключа электронной подписи, цепочка сертификации и т. д.

Большинство атрибутов PKCS#7 являются опциональными, но их обязательность может определяться прикладной системой.

Отдельно следует отметить, что PKCS#7 позволяет ставить несколько подписей под одним документом, сохраняя всю необходимую информацию в сообщении.

Формирование и проверка PKCS#7 реализованы в криптографических «надстройках» в Microsoft Crypto API, речь о которых шла выше. Но сам формат довольно хорошо специализирован и его поддержка может быть реализована нативно.

XML-DSig

W3C разработала и опубликовала рекомендации по составлению подписанных сообщений в формате XML.

Фактически XML-DSig решает те же вопросы, что и PKCS#7. Основное отличие в том, что в PKCS#7 данные хранятся в структурах, сформированных в соответствии с разметкой ANS.1 (фактически, бинарные данные), а в XML-DSig данные хранятся в текстовом формате в соответствии с правилами документа «XML Signature Syntax and Processing».

Область применения XML-DSig – веб-приложения и веб-сервисы.

Сырая подпись

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

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

В этом случае фактически передается только само значение электронной подписи вместе с документом. Информация для проверки берется получателем из централизованной базы данных.

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

Заключение


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

Ссылки


PKCS #11: Cryptographic Token Interface Standard
Cryptography Reference. MSDN
Cryptography API: Next Generation. MSDN
PKCS #7: Cryptographic Message Syntax Standard
XML Signature Syntax and Processing (Second Edition)
+17
28 января 2012, 12:41
120
mel26 1,1

комментарии (12)

+4
dendery #
Как говорят в некоторых кругах, тема @$ли не раскрыта.
Что ожидал увидеть, но не увидел.
1. В описании pkcs7 не упомянута такая интересная вещь как co-signature (встречная подпись, дословно — подпись на подпись), фактически упрощенная функция нотариата.
2. Сама служба нотариата во всей своей мощи описана в rfc3029. Тоже не помянули.
3. Не затронули тему управления ключами, время жизни ключей, вопрос компрометации ключей, выпуск и распространение CRL, время его жизни.
4. Ничего не сказали о службе онлайновой (мгновенной) проверки статуса сертификата, она же служба OCSP, rfc4806.
5. Не рассказали о проблемах сертификации криптографического ПО в России. Хотя тут на ваше усмотрение, может быть вы не имеете к этому процессу отношения.
0
mel26 #
Тема несколько обширна и освящение поднятых Вами вопросов — не одной статьи об'ем.
То, что Вы не увидели того, что хотите — извините, не угодил.

Относительно Ваших вопросов:
1. Мультиподпись в статье описана. Подробности — прошу смотреть стандарт или задать корректно интересующий вопрос.
2. Нотариат относится больше к юридическому аспекту ЭП, а не к техническому. Это тема отдельной дискуссии.
3. Управление ключами при работе с ЭП — удел PKI. Читайте внимательно и смотрите ссылки.
4. См. П. 3.
5. Это вообще не относится к теме статьи. См. введение.

Готов обсудить интересующие вопросы при корректной их постановке. Мешать все темы в одну кучу — будет либо скомкано и ничего не понятно, либо очень много букв.

Если интересно, можно создать цикл статей на эту тему, раскрывающих все аспекты.
+3
dendery #
Я считаю что вопрос управления ключами, в том числе цикл жизни ключей имеет
непосредственное отношение к ЭЦП.
Много — да. Скомкано — нет. Все указанные технологии образуют картину целиком,
вы выкусили самую верхушку айсберга и расказываете о ней как об ЭЦП.
Подпись изначально создавалась для «удостоверения» (от достоверность) некоторым лицом.
Т.е. обязательно должен присутствовать фактор доверия. Главным фактором доверия в мире ЭЦП служит
корневой сертификат ключа подписи CA. Компрометация этого ключа мгновенно разрушает смысл
всей иерархии. Далее аналогичное условие спускается по всему дереву до конечного пользователя.
А вы говорите управление ключами не причем. Эх…
–2
mel26 #
Прошу Вас не интерпретировать мои слова по-своему.
Посмотрите, пожалуйста, 5-й абзац, прежде чем присваивать мне слова о том, что управление ключами не причем.
Повторюсь еще раз. Управление ключами — отдельная тема, которая в данной статье не затрагивалась. Для ее раскрытия необходимо уделять внимание не технологиям работы с электронной подписью, а технологиями построения PKI.
+3
zhovner #
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

А что PGP/GPG больше не модно? 

Соответствует ли этот стандарт статье 10 закона об электронной подписи?
К какому виду подписи его можно отнести исходя из статьи 9? 
Возможно ли его использовать как доказательство в суде?
-----BEGIN PGP SIGNATURE-----
Comment: Проверить подлинность https://zhovner.com/check.php

iEYEARECAAYFAk8j1/sACgkQIMGD+D26DmPOHgCdFUEOlr1Q6CEHfg/QYF/ztq54
Yl0AoIxEus/PS+4r6hrUCveQA8uZE2RF
=0an9
-----END PGP SIGNATURE-----
+1
mel26 #
PGP — именно модно.

Я нисколько не сомневаюсь в безопасности решений PGP/GPG, но они находят свое применение именно в сегменте частной безопасности, делая упор на простое распространение ключевой информации между участниками обмена.

Для уровня Enterprise и «серьезных» взаимоотношений, как выше отмечал пользователь dendery, необходимо управление ключами, основанное на единой точке доверия. На сегодняшний день это технология PKI и Удостоверяющие Центры. Именно они призваны связать конкретное физическое лицо с его открытым ключом. Это необходимо для того, чтобы всегда был известен ответчик по конкретному инцеденту.

По Вашим вопросам:
> Соответствует ли этот стандарт статье 10 закона об электронной подписи?
Статья 10. Обязанности участников электронного взаимодействия при использовании усиленных электронных подписей.
В данной статье не требований, которым что-то могло бы соответствовать или нет

> К какому виду подписи его можно отнести исходя из статьи 9?
Статья 9. Использование простой электронной подписи
Статья описывает использование простой подписи

Возможно ли его использовать как доказательство в суде?
Возможно, в случае наличия между участниками обмена соглашения, соответствующего части 2 статьи 9 63-ФЗ.
+1
thunderquack #
Все кошерно, но. PKCS за номером 7 может являться и присоединенной, и неприсоединеной подписью, я бы это упомянул. Потом, если вы начали про 7 и про 11, уж сказали бы в двух словах, что означают остальные цифры, за какие стандарты отвечают, 1 за RSA, 12 за хранение закрытого ключа в файле, ну и так далее. Больше бы посвятили разметке ASN.1, например. А так получилось, что вроде бы как и обо всем, но вроде как и полнота отсутствует.
0
toxicdream #
Еще надо помнить, что органы власти в странах СНГ могут заставить любой УЦ (удостоверяющий центр) депонировать ключи…
Кто не в курсе: у нас в Казахстане активно продвигают идею «электронного правительства», в связи с чем всем гражданам (и не только) выдают ЭЦП=ключи=сертификаты RSA и ГОСТ «производства» НУЦ (национальный удостоверяющий центр). И, насколько мне известно, КНБ (аналог ФСБ) сейчас имеет копии выданных сертификатов (и открытой и закрытой части).
0
thunderquack #
Не знаю, как в этих ваших Казахстанах, но у нас копия сертификата это вполне себе хорошо. Дело в том, что аппаратная защита как сделана у нас (см. eToken ГОСТ), сделана так, что ключ намертво зашит в брелок. Автор указывает на PKCS#11, именно этот стандарт и используется, правда автор не раскрывает для чего именно. А я вам поясню, дело в том, что в брелок зашит не только ключ, но и сами реализации криптоалгоритмов, и чтоб брелком подписать тот или иной документ, вам не нужно писать собственную реализацию того же сначала ГОСТ 34.11, а потом ГОСТ 34.10, вам достаточно отправить в брелок пачку байт и предложение «милый брелок, подпиши, пожалуйста, ЭТО». Милый брелок схватит, вытащит из своих закромов секретный ключ и подпишет данные, и вернет вам подпись. Поэтому если нет каких-то определенных изначальных «закладок», глупо говорить о том, что в Казахстане у правительства есть копии всех приватных ключей.
0
as1an #
Нет ничего зазорного в том, чтобы иметь копии сертификатов. Это каждый может. НУЦ однозначно хранит эти сертификаты. Закрытый ключ, если пользователь генерирует у себя на компьютере, то кнб не при делах. А вот если пользователь обращается в цон (центр обслуживания населения) к доверенному оператору, чтобы ему все эти непонятные вещи проделали и сформировали все необходимое на флешку, то тут есть небольшой риск, что ключи могут попасть к кому-угодно. Но операторы на то и доверенные, чтобы не поддаваться провакациям :). Но если даже так не захочет доверить такой приватный вопрос, то может воспользоваться защищенными носителями, у которых все выполняется на борту и никуда закрытый ключ не утечет. Так что в наших Казахстанах все с этим в порядке.
0
VicTun #
>Стандарт PKCS#11 предполагает возможность использования проприетарных расширений. Фактически, это >добавленные производителем функции, не описанные в стандарте. Обычно они служат для выполнения >специфических операций с устройствами или реализуют необходимые, по мнению производителя, функции.

Не расскажите о примерах подобного расширения стандарта производителями?
0
mel26 #
Практически любое устройство, с которым с составе идет библиотека PKCS#11 (токен, смарт-карта, HSM и пр.), обладает своими специфичными функциями.
Например, функции инициализации устройства, задания специфичных для конкретной реализации параметров.

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

Для примера, если Вы посмотрите SDK практически на любую смарт-карту, например eToken PRO (Java) или Gemalto TPC, то их реализация PKCS#11 имеет ряд расширений как раз для подобных целей.

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