В первой части мы разобрали, что такое квалифицированная электронная подпись физического лица, как получить ключи для генерирования этой подписи, а также сертификат для ее верификации. В этом топике я предложу инструмент для генерирования подписи и опишу проблемы, с которыми я столкнулся. Если кому-то не интересно технарство – добро пожаловать в самый конец топика, где выложены файлы проекта.
Как я уже говорил, третья свинья от государства заключалась в том, что хотя оно обеспечило меня средствами создания электронной подписи, но не предоставило возможности пользоваться этими средствами по своему усмотрению.
Еще раз немного отвлечемся в юридическую сторону. Дело в том, что в нормативных актах РФ есть два примечательных момента: во-первых, должны использоваться сертифицированные средства защиты информации (Указ Президента от 3 апреля 1995 г. № 334 «О мерах по соблюдению законности в области разработки, производства, реализации и эксплуатации шифровальных средств, а также предоставления услуг в области шифрования информации»), а во-вторых, сертификат этот могут получить только средства отечественной разработки, которые используют алгоритмы, рекомендованные ФСБ (Положение о сертификации средств защиты информации, утвержденное постановлением Правительства Российской Федерации от 26 июня 1995 г. № 608).
А, следовательно, мой ключ обязательно отечественного производства и его производителя можно найти, стоит лишь только захотеть. На самом ключике маркировка минимальная, но мне все равно удалось найти разработчика, это ЗАО «Аладдин Р.Д.». Ознакомившись со страничкой, я с сожалением отметил, что SDK для ключика можно получить лишь обратившись в службу техподдержки. На других же сайтах комплект разработчика и того лучше, предлагалось купить.
Я решил пойти другим путем, я нашел установленный с сайта госуслуг плагин в папке
Плагин состоял из трех файлов:
Исследуя эти файлы, я сделал вывод, что eTPKCS11g и eTPKCS11gx – интерфейсы для ключика стандарта PKCS#11, то есть стандарт взаимодействия с аппаратными ключами. Все алгоритмы, необходимые, для создания подписи, вшиты в устройство, а значит, мне остается только прикрутить интерфейс и, конечно, не нужно будет сертифицировать свою программу в ФСБ, что приятно. Так у меня появилось средство, осталось выбрать цель.
Для того, чтобы органы государственной власти признавали мою подпись, у них должен быть инструмент проверки этой подписи, а, значит, я должен пользоваться этим инструментом верификации, чтобы проверять свои изыскания. Такой инструмент я нашел прямо на сайте госуслуг:
Являясь старым бородатым win-админом, я нахожусь в списке почитателей .NET в общем и PowerShell в частности, но использовать PS как инструмент для написания программы, создающей электронную подпись, я поостерегся. Нет, это возможно и даже, наверное, интересно, но для начала я выбрал C#.
Когда-то давным-давно мой преподаватель в универе говорил, тыкая очередного студента носом: «Да что это такое? Опять «пузырьки»? А STL для кого писана?»(upd. Мой товарищ мне припомнил точную цитату: «Глупый программист отсортирует пузырьком, умный программист алгоритмом быстрой сортировки, а хороший программист заглянет в STL») Конечно, не стоит изобретать то, что уже изобретено. Пропустив платные библиотеки, я взял на вооружение бесплатные, которые публикуются под лицензией Массачусетского Технологического, что позволяет мне невозбранно использовать их в своем проекте. Сам же я свой проект публикую под лицензией GPL, в моем понимании средства электронного взаимодействия с государством должны быть бесплатны и открыты.
Первым делом необходимо извлечь сертификат из контейнера на устройстве и верифицировать его. Интерфейс моего приложения довольно аскетичен:
Вытягиваем сертификат в DER-кодировке, смотрим в поля. Мы явно видим, что алгоритм подписи имеет значение 1.2.643.2.2.3, это ни что иное, как ГОСТ Р 34.11/34.10-2001, те самые алгоритмы хеширования и подписи, рекомендованные ФСБ. Интересен субъект:
Это я. Сюда они уложили мой адрес электронной почты и номер пенсионного страхования. По закону должны были указать номер и имя, а e-mail по моему желанию, но вот что-то, видать, у них не срослось. Кроме этого, я обнаружил свинью 4.
Уж не знаю, кто тут виноват, законом не определены сроки действия, предусмотрено лишь обязательство указания этих сроков. Было бы очень хорошо, если бы спустя год мне на тот же носитель бесплатно записали бы другие данные, памяти на нем 72 килобайта, этого предостаточно, но, боюсь, с нашей-то топорностью снова потребуют уплатить 660 рублей.
Сертификат я загрузил на сайт госуслуг, и вот что получил:
Очень хорошо. Теперь я пробую вторую кнопку, подписываю файл и загружаю его на сайт:
Прелестно. Что ж, инструмент готов.
Проект на GITHub, там все: исходники, бинарники и примеры — мой сертификат и подписанный документ.
Как я уже говорил, третья свинья от государства заключалась в том, что хотя оно обеспечило меня средствами создания электронной подписи, но не предоставило возможности пользоваться этими средствами по своему усмотрению.
Еще раз немного отвлечемся в юридическую сторону. Дело в том, что в нормативных актах РФ есть два примечательных момента: во-первых, должны использоваться сертифицированные средства защиты информации (Указ Президента от 3 апреля 1995 г. № 334 «О мерах по соблюдению законности в области разработки, производства, реализации и эксплуатации шифровальных средств, а также предоставления услуг в области шифрования информации»), а во-вторых, сертификат этот могут получить только средства отечественной разработки, которые используют алгоритмы, рекомендованные ФСБ (Положение о сертификации средств защиты информации, утвержденное постановлением Правительства Российской Федерации от 26 июня 1995 г. № 608).
А, следовательно, мой ключ обязательно отечественного производства и его производителя можно найти, стоит лишь только захотеть. На самом ключике маркировка минимальная, но мне все равно удалось найти разработчика, это ЗАО «Аладдин Р.Д.». Ознакомившись со страничкой, я с сожалением отметил, что SDK для ключика можно получить лишь обратившись в службу техподдержки. На других же сайтах комплект разработчика и того лучше, предлагалось купить.
Я решил пойти другим путем, я нашел установленный с сайта госуслуг плагин в папке
%APPDATA%\NVisionGroup\CSuser\
Плагин состоял из трех файлов:
eTPKCS11g.dll, eTPKCS11gx.dll, npCSuser.dll
.Исследуя эти файлы, я сделал вывод, что eTPKCS11g и eTPKCS11gx – интерфейсы для ключика стандарта PKCS#11, то есть стандарт взаимодействия с аппаратными ключами. Все алгоритмы, необходимые, для создания подписи, вшиты в устройство, а значит, мне остается только прикрутить интерфейс и, конечно, не нужно будет сертифицировать свою программу в ФСБ, что приятно. Так у меня появилось средство, осталось выбрать цель.
Верификация
Для того, чтобы органы государственной власти признавали мою подпись, у них должен быть инструмент проверки этой подписи, а, значит, я должен пользоваться этим инструментом верификации, чтобы проверять свои изыскания. Такой инструмент я нашел прямо на сайте госуслуг:
- Подтверждение подлинности ЭП сертификата
- Подтверждение подлинности ЭП электронного документа
- Подтверждение подлинности ЭП электронного документа в составе документа
- Подтверждение подлинности ЭП электронного документа с использованием значения хэш-функции
К коду
Являясь старым бородатым win-админом, я нахожусь в списке почитателей .NET в общем и PowerShell в частности, но использовать PS как инструмент для написания программы, создающей электронную подпись, я поостерегся. Нет, это возможно и даже, наверное, интересно, но для начала я выбрал C#.
Когда-то давным-давно мой преподаватель в универе говорил, тыкая очередного студента носом: «Да что это такое? Опять «пузырьки»? А STL для кого писана?»(upd. Мой товарищ мне припомнил точную цитату: «Глупый программист отсортирует пузырьком, умный программист алгоритмом быстрой сортировки, а хороший программист заглянет в STL») Конечно, не стоит изобретать то, что уже изобретено. Пропустив платные библиотеки, я взял на вооружение бесплатные, которые публикуются под лицензией Массачусетского Технологического, что позволяет мне невозбранно использовать их в своем проекте. Сам же я свой проект публикую под лицензией GPL, в моем понимании средства электронного взаимодействия с государством должны быть бесплатны и открыты.
Первым делом необходимо извлечь сертификат из контейнера на устройстве и верифицировать его. Интерфейс моего приложения довольно аскетичен:
Вытягиваем сертификат в DER-кодировке, смотрим в поля. Мы явно видим, что алгоритм подписи имеет значение 1.2.643.2.2.3, это ни что иное, как ГОСТ Р 34.11/34.10-2001, те самые алгоритмы хеширования и подписи, рекомендованные ФСБ. Интересен субъект:
SERIALNUMBER = 11028310690
CN = Иванов Егор Игоревич
C = RU
E = thunderquack@mail.ru
Это я. Сюда они уложили мой адрес электронной почты и номер пенсионного страхования. По закону должны были указать номер и имя, а e-mail по моему желанию, но вот что-то, видать, у них не срослось. Кроме этого, я обнаружил свинью 4.
Свинья 4. Сертификат действителен только один год.
Уж не знаю, кто тут виноват, законом не определены сроки действия, предусмотрено лишь обязательство указания этих сроков. Было бы очень хорошо, если бы спустя год мне на тот же носитель бесплатно записали бы другие данные, памяти на нем 72 килобайта, этого предостаточно, но, боюсь, с нашей-то топорностью снова потребуют уплатить 660 рублей.
Сертификат я загрузил на сайт госуслуг, и вот что получил:
Очень хорошо. Теперь я пробую вторую кнопку, подписываю файл и загружаю его на сайт:
Прелестно. Что ж, инструмент готов.
Проект на GITHub, там все: исходники, бинарники и примеры — мой сертификат и подписанный документ.