23 June 2019

Криптографический АРМ на базе токенов PKCS#11. Электронная подпись. Часть 2

Information SecurityCryptographyDesktop environmentsIT StandardsDevelopment for Linux
В первой части нашего повествования мы показали как, имея на руках криптографический токен с поддержкой российской криптографии, создать запрос на получение сертификата, получить и установить сертификат на токен, проверить электронную подпись сертификата и его валидность по списку отозванных сертификатов (CRL), удалить сертификат с токена, сменить метки и т.д. Создав запрос на сертификат (сгенерировав ключевую пару), получив в УЦ сертификат и установив его на токен, ничего не мешает теперь использовать личный сертификат (сертификат с ключевой парой) для электронного подписания документов. Приступим. Для начала напомним, где находится утилита cryptoarmp11.

cryptoarmp11

Далее запускаем утилиту и нажимаем кнопку « 1. Подписать документ»:



Выбираем файл с документом, который хотим подписать, и определяемся с каталогом, где сохраним файл с подписью (окончание имени этого файла будет .p7s). Решаем, будет ли сам подписываемый документ сохранен в теле подписи или нет (присоединенная/ отсоединенная подпись). И самое значимое, определяемся с форматом подписи. На мой взгляд, можно придерживаться следующих правил. Если это внутрикорпоративный документооборот, где ведется строгий контроль за компьютерами, то достаточно использовать формат подписи CAdes-BES, которая включает в себя помимо математической подписи в соответствии с ГОСТ Р 34.10-2012 и время формирования подписи (поле «Текущее время»). Если жесткого контроля за компьютерами нет (каждый на своем компьютере может выставить любое время), и важна дата подписания документа, то необходимо использовать формат CAdes-T или CAdes-XLT1. При использовании форматов CAdes-T и CAdes-XLT1 привлекается внешняя сторона (аналогично привлечению натариуса) – сервер штампов времени. При формате CAdes-T в файл с электронной подписью добавляется ответ сервера штампов времени (смотри поле «Сервер TSP»). Этот ответ (а это тоже документ в формате PKCS#7, подписанный серевером TSP) позволяет определить, к какому моменту времени был подписан документ. Следует иметь в виду, что часто проверяется только математическая подпись, а валидность самой подписи по штампам времени опускается. Для проверки валидности подписи, естественно, требуется проверка валидности сертификатов. И вот, чтобы упростить эту работу формат подписи CAdes-XLT1 подразумевает включение в файл с подписью всех доказательств валидности подписи на момент ее создания. Это и сертификаты, включая сертификаты УЦ, серверов штампов времени, ocsp-серверов, а также списки отозванных сертификатов и ответов OCSP-серверов. Больше на этом останавливаться не будем. Кто захочет найдет соответствующую литературу.

Итак, мы определились с форматом подписи и нажали кнопку «Подписать документ». Далее нам потребуется ввести еще PIN-код для токена, затее появится предупреждение о начале формирования подписи и необходимости проявить терпение и, наконец, подпись будет создана:



На что уходит время при формировании подписи? Это, естественно, сами математические вычисления и сбор различных данных (сертификаты, CRL, ответы серверов OCSP, штампы времени). Все, подпись создана. При получении сертификата в УЦ обязательно узнайте адрес сервера штампов времени вашего УЦ. Если ссылки на сертификаты центров сертификации (цепочка сертификатов), на списки отозванных сертификатов, а также сервера OCSP будут взяты из сертификатов, то адрес сервера штампов времени придется ввести ручками (поле «Сервер TSP»).

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



Но и в том и другом случае, это еще не гарантирует вам того, что ваша подпись будет принята в той организации, куда вы предъявите подписанный документ, например, на сайт Госуслуг. Это связано с тем, что могут по разному храниться и проверяться доказательства валидности подписи в формате XLT1. Так, например, на сайте Госуслуг требуется, чтобы доказательства валидности сертификата сервера штампов времени хранились в подписи, получаемой от сервера. И если их там нет, то, несмотря на то, что они могут присутствовать в подписи документа, подпись на сайте Госуслуг будет признана недействительной. У нас подписью все хорошо:



Переходим на страницу « 2. Работа с ЭП (PKCS7)» и выберем сразу файл с созданной подписью:



При загрузке подписи утилита заполняет соответствующие поля на главном окне. Скриншот это хорошо отображает. На нем видно когда была сформирования подпись на компьютере пользователя (поле «Дата подписания:»), когда эта дата была заверена на сервере штампов времени (поле «Дата получения штампа времени») и когда были собраны все доказательства валидности (поле «Дата утверждения метки времени»).

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



И если посмотреть кто подписывал документ, то там теперь два подписанта. И обе подписи были успешно проверы на сайте госуслуг:



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

Однако мы решили пойти дальше и включить в эту утилиты страничку для работы с контейнером PKCS#12, который пользуется все большей популярностью. И если сейчас для подписания документа вам требуется токен PKCS#11 и библиотека к нему, то при использовании PKCS#12 нужен будет только сам контейнер. И конечно утилита, о которой мы сегодня говорили. Но эта утилита абсолютно самодостаточная и в отличии от различных CSP не патчит никакого ядра и работает на любой платформе. Поэтому переходим к третьей части.
Tags:pkcs#11pkcs#12pkcs#10pkcs#7cmsгости р 34.10-2012tcl/tk
Hubs: Information Security Cryptography Desktop environments IT Standards Development for Linux
+10
2.9k 25
Comments 7