Электронная подпись физического лица (часть 2)

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

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

    Еще раз немного отвлечемся в юридическую сторону. Дело в том, что в нормативных актах РФ есть два примечательных момента: во-первых, должны использоваться сертифицированные средства защиты информации (Указ Президента от 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, там все: исходники, бинарники и примеры — мой сертификат и подписанный документ.
    Поделиться публикацией
    Комментарии 48
      +1
      Пожалуйста заведите себе твиттер, чтобы следить за результатами ваших успехов. Материал может быть маленьким для статьи, но для твиттера самое то.
        +1
        Меня давно интересует вопрос — возможно-ли самому сформировать тайный ключ и сгенерировать запрос на сертификат? Что-бы никто, в принципе, не владел моим ключем хотя-бы какое-то время.
          0
          Почему Вы думаете, что к Вашему закрытому ключу у кого-то был доступ?
            +2
            Ну, вам, ведь, его выдают готовым и с пин-кодом по умолчанию? Значит, как минимум, у девушки, которая вам его выдает, какое-то время этот доступ есть.
              0
              Насколько я понял, алгоритм формирования приватного ключа зашит в брелок, девочка дает лишь команду «сформировать». А дальше производитель брелка дает гарантию, что после этой команды публичный ключ вытащится, а приватный останется на брелке никому недоступным.
                0
                Т.е. его формируют прямо в твоем присутствии? А сертификат когда делают? Сразу-же?
                  0
                  Да, сударыня достала из сейфа брелок, воткнула в порт, произвела некоторые манипуляции, выдернула из порта, записала номер брелка в ведомость, отдала.
                    0
                    Еще-бы была уверенность что она именно генерацию ключа делала.
                      +1
                      Я, честно говоря, не представляю, как сделать иначе так, чтобы в сейфе заранее появился брелок, в сертификате которого было бы сказано, что это Е. Иванов, его владелец вот-вот за ним зайдет.
                      Нет, я давно работаю со смарткартами и прочим подобным барахлом, с этой стороны все чисто, хотя, честно говоря, сам до конца не представляю физику того, что на некий носитель можно нечто заприсать и при этом с этого носителя нельзя это считать, это для меня, мягко говоря, пока удивительно. Впрочем, вплотную я не занимался этим вопросом.
                        +1
                        Не — сертификат так сделать, конечно, нереально. Я имею ввиду только уникальность и отсутствие дублей закрытых ключей у ФСБ или кого-то еще.
                          0
                          А вот это кстати вопросец. Если есть уязвимость в алгоритме генерирования ключевой пары на носителе, то тогда получится, что все без исключения выданные ключи потенциально скомпроментированны.
                          Но, честно говоря, вот смотрите, есть ФГУП Атлас, который это все дело по указке ФСБ сертифицирует, он там лезет в дебри выискивает огрехи, ищет уязвимости. Работают ли там некомпетентные дармоеды? Да, подозреваю, что есть и такие. Но других-то средств у нас нет. У меня лично не хватает компетенции в этом вопросе: проверять аппаратные ключи на уязвимости. Наблюдения окружающей российской действительности мне говорят, что да, может быть и так, что я неоправданно рискнул, получив вот этот вот токен. Но работать мне приходится с тем материалом, что у меня имеется, не больше, не меньше.
                            0
                            Ну, такая опасность тоже присутствует. Но я имею ввиду возможность генерирования секретных ключей снаружи и «заливки» их в брелок. Тогда оказывается что одна копия секретного ключа где-то там хранится.
                              0
                              Насколько мне помнится, стандарт pkcs#11 не дает записывать ключевую пару на носитель, а лишь генерировать. Что же касается доступа вне стандарта, честно говоря, черт знает, а вдруг да, есть «закладка»?
          +2
          Ваш сертификат, полностью декодированный:

            +1
            Да, в посте я забыл упомянуть, присутствует также расширенный атрибут 1.3.6.1.5.5.7.3.4, это т.н. «защищенная электронная почта». Я вот забыл, разве ГОСТ 34.10 позволяет шифровать в обратную сторону? Мне казалось, это не такой алгоритм, как RSA.
              +1
              Пардон за оффтопик, что за утилита такая волшебная?
                +1
                Asn1Edit
              +1
              Как пример полезного заявления, попробуйте найти куда можно обратится по поводу некачественного ремонта дороги. После 2-ух заявлений составленных через росяму ямы засыпали смесью щебенки с землей… Надо заставить сделать нормально. Наверняка этот пример пригодится кому-то еще.
                0
                Мне бы хотелось, чтоб там требовалось собственноручное заявление. Жалобу же можно просто отправлять по 59-ФЗ. Что-нибудь типа получения загранника или вроде того, только у меня есть он.
                0
                Что-то мне подсказывает, лицензирование ФСТЭК вам не избежать. Средство СКЗИ должно быть лицензировано. И ФСБ не рекомендует, он прямо говорит, что делать. Почему каждый год надо платить? Дело в том, что люди выдающие вам подпись и разрабатывающие ПО хотят кушать.
                А так начинания хороши, глядишь вы получите лицензии и будите продавать ПО дешевле конкурентов :)
                  0
                  Да не, СКЗИ это брелок, все алгоритмы там, я лишь лью туда пачку байт, а потом сливаю оттуда пачку байт, все криптографические преобразования происходят там. По аналогии с автомобилем, если выдернуть оттуда руль и педали, то вряд ли машина останется на ходу, а если водителя — запросто. Граница СКЗИ проходит по кромке usb-порта.
                    –2
                    Не ну куда мне до вас со своим дипломом специалиста защиты информации :) У вас лишь отпадает лицензия ФСБ. Т.к. преобразования идут в ключе. А сама программа которая выдернула сертификат должна иметь лицензию ФСТЭК. Это лучше у них проконсультироваться. Ещё в 2009 году на лекции был спор со специалистом этой организации по этому поводу. Мне тогда не до ЭЦП конечно было, но смысыл сводился к тому, что все начнут покупать только ключи и сертификаты, а программу начнут писать сами и продавать за меньшие деньги. 2500 против 1000 для физ лица значительно. Вообще всю «котавасию» нам пояснили, и кроме как обработке бабла смысла ни кто не видит.
                      +2
                      Есть постановление правительства, которое дает определение СКЗИ, ключевое словосочетание там «на основе криптографических преобразований». Мое приложение не работает на основе криптографических преобразований, в списке его алгоритмов нет ни одного такового.
                        0
                        В общем выдёргивать центр определения очень не рекомендовано, т.к. вы упустили его смысл. В общем по порядку. Вы правильно указали приказы, вы правильно указали приложения. Но тут вспоминается высказывание «Я вам про Фому, вы мне про Ерёму.». Вы работаете с Электронной подписью, и при этому каким-то образом опустили закон Федеральный закон от 6 апреля 2011 г. N 63-ФЗ «Об электронной подписи» (с изменениями от 1 июля 2011 г.) это вообще, как понимать??? Спор именно за это! Вы минусуйте меня дальше, но реч идёт не о понятии СКЗИ «Средства криптографической защиты информации», а о понятии «средства электронной подписи — шифровальные (криптографические) средства, используемые для реализации хотя бы одной из следующих функций — создание электронной подписи, проверка электронной подписи, создание ключа электронной подписи и ключа проверки электронной подписи;» Идём дальше:
                        «Статья 12. Средства электронной подписи
                        1. Для создания и проверки электронной подписи, создания ключа электронной подписи и ключа проверки электронной подписи должны использоваться средства электронной подписи, которые:
                        1) позволяют установить факт изменения подписанного электронного документа после момента его подписания;
                        2) обеспечивают практическую невозможность вычисления ключа электронной подписи из электронной подписи или из ключа ее проверки.
                        2. При создании электронной подписи средства электронной подписи должны:
                        1) показывать лицу, подписывающему электронный документ, содержание информации, которую он подписывает;
                        2) создавать электронную подпись только после подтверждения лицом, подписывающим электронный документ, операции по созданию электронной подписи;
                        3) однозначно показывать, что электронная подпись создана.» Т.е. тут уже нарушения, процесс подписания у вас не опубликован.
                        Дальше Статья 10, пункт 4
                        «использовать для создания и проверки квалифицированных электронных подписей, создания ключей квалифицированных электронных подписей и ключей их проверки средства электронной подписи, получившие подтверждение соответствия требованиям, установленным в соответствии с настоящим Федеральным законом.»

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

                        Ну и теперь пирожки: Вы Приказ ФСБ РФ от 9 февраля 2005 г. N 66 тож упустить думаете?
                        Нужное для вас подчёркиваю:
                        «в) средства электронной цифровой подписи — аппаратные, программные и аппаратно-программные средства, обеспечивающие на основе криптографических преобразований реализацию хотя бы одной из следующих функций: создание электронной цифровой подписи с использованием закрытого ключа электронной цифровой подписи, подтверждение с использованием открытого ключа электронной цифровой подписи подлинности электронной цифровой подписи, создание закрытых и открытых ключей электронной цифровой подписи;»

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

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

                        Я пишу, потому что столкнулись с почти такой же проблемой. Консультировались с ФСТЭК и ФСБ. Они по русски сказали: "— делать вы можете, что угодно. Но в случаи возникновения споров, подпись признают не действительной, а документ не имеющий юридическую силу. " Поэтому я и предлагаю вам проконсультироваться в вашем случаи. После того, как доделаете программу выслать её в Минсвязь. И они тогда официально ответят.
                          +1
                          Первое, я не минусую, мне это неинтересно, шалости с кармой для детишек. Второе, закон я не пропустил, а коснулся его в первой части. Но если уж говорить о нем, то и не пропускайте статью 12, где описаны четыре критерия признания электронной подписи, как видите, они выполняются. Третье. Приказ ФСБ слизан с еще старого закона, а формулировка из старого плавно перекочевала в новый, ее вы заметите в пункте 9 второй статьи. Но спор был про сертификацию СКЗИ. А это прямо течет из положения о лицензировании деятельности по распространению шифровальных криптографических средств. А утверждено положение правительством постановлением за номером 957 29 декабря 2007 года. А в положении дается перечень того, что является СКЗИ и применительно к ЭП это звучит так:
                          К шифровальным (криптографическим) средствам (средствам криптографической защиты информации) относятся
                          средства электронной цифровой подписи — аппаратные, программные и аппаратно-программные средства, обеспечивающие на основе криптографических преобразований реализацию хотя бы одной из следующих функций: создание электронной цифровой подписи с использованием закрытого ключа электронной цифровой подписи, подтверждение с использованием открытого ключа электронной цифровой подписи подлинности электронной цифровой подписи, создание закрытых и открытых ключей электронной цифровой подписи;
                          У меня не раз возникали моменты, когда ребята правда не из ФСБ и ФСТЭК, а из других, но не менее федеральных ведомств били себя пяткой в нос, а потом в вышестоящих инстанциях, а один раз даже в суде садились в лужу, потому что неверно читали свои же нормативные акты, тоже люди, тоже ошибаются. Конечно, я обязательно воспользуюсь советом, и пару писем отпишу, и, конечно, уберу мелкие огрехи типа непоказывания документа перед подписью, это важно. Но все равно уверен, криптография криптографией, а интерфейс интерфейсом. Это и стройно, и логично.
                            0
                            Про карму я для остальных написал. :) Я отправил запрос в ФСБ по вашей программе. Вы надеюсь не против :) Дело в том, что до этого интересовались относительно использования юр лицами. А под постановление 957 29 декабря 2007 года ваша программа не попадает по причине, что вы физ лицо.
                              0
                              А тогда получается замкнутый круг, как физик я не могу получить лицензию на разработку скзи (то же постановление, только другое положение), но при этом должен якобы получить сертификат.
                              Тут есть еще одна логичная штука. Пункт в) первой статьи упомянутого мной положения «о лицензировании деятельности по распространению»… прямо выводит распространение таких вот криптотокенов из сферы этого положения. Таким вот образом правительство говорит нам «Эй, дружок, может пользователь менять криптоалгоритмы на устройстве? Тогда одни правила. Не может? Ну тогда другие.» Это косвенно, конечно, но вполне вписывается в логику того, что интерфейс идет отдельно, а криптография отдельно.
                              По поводу запроса чекистам я, конечно же, не против. Сейчас отпишусь в минкомсвязь и ФСТЭК, а потом поделимся ответами. Правда вне зависимости от того, что ответят правовые управления федеральных органов исполнительной власти нашей необъятной родины, я бы не стал их ответы принимать как истину в последней инстанции. Но, конечно, не ознакомиться с их мнением тоже грех.
                                0
                                Из своей практики, как правило своими ответами они сами себе роют яму :) ФСТЭК мне сказали, что если работы с криптографией нет, контролируем мы. Но только там где это необходимо. Физ лица не попадают под эту процедуру.
                            +1
                            Скажите, а как вы (или госорганы) отличите заявление подписанное сертифицированным или не сертифицированным средством, если сертификат и ключи будут одни и те же?
                              0
                              А им на это фиолетово. :) Вопрос может возникнуть, если об этом узнают создатели ключа. Ну или гос органы захотят оспорить, и доброжелатель скажет, что вы пользуетесь не сертифицированной программой.
                                0
                                Захотят оспорить — пусть докажут, что она была создана не сертифицированной программой, ведь доказывает утверждающий. Я может этот документ подписал сто лет назад и у меня все программы были установлены, я не обязан им предоставлять ничего или доказывать.
                                  0
                                  Яж написал… доброжелатель :) Про 100 лет назад речь не идёт.
                                    0
                                    И? Я всё равно не понимаю вашу логику.

                                    Вот создаю я документ (заявление например), подписываю таким способом, как мне удобно (при этом получается документ идентичный подписанному официальным сертифицированным средством) и предоставляю его в госорган. Там доброжелатель заявляет, что видел топик на хабре или подглядывал у меня из-за плеча когда я подписывал не сертифицированным средством. И что дальше? У меня не примут заявление? На основании чего?
                          0
                          Есть у нас на работе сотрудники с таким же дипломами. И вы очень к месту поставили смайлик! На собеседовании товарищи плавали и в сертификатах, и в шифровании, и в хэшировани.
                            0
                            Совершенно верно, смайлик там к месту :)) Дело в том, что у нас к примеру всё это пролетается в формате «Галопом по европам». + Есть преподаватели которые сами путаются. Вот примеру мне человек выше ответил: «ключевое словосочетание там «на основе криптографических преобразований»», но он даже не привёл определение полностью, тем самым потерял смысл определения. Так и у нас в учёбе было, мне не до лекции, там ещё парочке товарищей не до неё, в итоге смысл упустили. Как я называю нашу специальность «Говорун по защите информации». Смысл понимаем, конкретных методов не осознаём. :)
                              0
                              Это печально. Нас в основном учили учиться, а не вдалбливали конкретные знания. И ещё учили не выпендриваться на лекциях — у меня в итоге в дипломе 4 за программирование (за то, что на последнем экзамене поспорил, что в Паскале можно цикл начинать не только с единицы).
                                +1
                                :))) меня за такое вообще отчислили :) Потом правда признали, что я прав и убрали Паскаль из программы вообще. Но время было упущено.
                          0
                          Я думаю что менять вам его придется, либо обновлять сертификат и за это платить. Удостоверяющему центру надо работать, что бы подтверждать что подписанные вами документы подписаны именно вами.
                          К тому же прогресс не стоит на месте. Еще пару лет назад сертификаты выдавали (юрикам) на флешку, потом ввели етокины, через год и они обновились, при том за деньги. Почему вы решили что для физиков это будет бесплатно?
                          Так что сертификаты на 1 год — гарантия что у населения будет либо актуальные средства защиты либо их не будет вовсе.

                            0
                            Наверное из поста не очень понятно, но я говорил о разумности суммы. Неразумно брать 660 рублей за год за штампование ключевой пары (это пассивная система, один раз сделали и гуляй, Вася) тогда, когда, допустим, банки за обслуживание пластиковой карты (это уже активная — банкоматы, переводы, все дела) берут примерно триста.
                              0
                              Да, не так понял.
                              Но если честно меня цена в 600 приятно обрадовала (конечно если будет дешевле — только лучше). У меня после изучения этого вопроса, пару месяцев назад, почему-то отложилась в мозгу сумма 2500 в год, и я решил что оно за такие деньги мне не нужно, и забил.
                        +1
                        Если я не ошибаюсь, то срок действия сертификата связан с сроком годности приватного ключа (1 год).
                          0
                          А срок годности приватного ключа чем обусловлен?
                            0
                            Совершенно верно, это в стандартах описано.
                            0
                            Skydrive обиделся на хабрэффект и заблокировал файл. Может выложите исходники на github?
                            0
                            Добавлю с вашего позволения про этот токен:
                            Type: eToken PRO (Java) 72Kb, ГОСТ алгоритм реализован апплетом.
                            USB ID 0529:0620 Aladdin Knowledge Systems
                            ATR: 3b d5 18 00 81 31 fe 7d 80 73 c8 21 10 f4
                            NOT supported by OpenSC/OpenCT (видит но ничего не умеет)
                            Под Линукс существует некая «SafeNet Authentication Client 8.0» работающая через pcsc-lite, но просто так скачать ее невозможно.
                              0
                              А можно в этот etoken закинуть несколько сертификатов?
                              Просто у меня уже есть один с работы, на нем стоит сертификат, чтобы не покупать новый, закинуть в etoken еще один от госуслуг.

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

                              Самое читаемое