Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline seevve  
#1 Оставлено : 16 ноября 2021 г. 14:33:30(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Добрый день. Может плохо ищу, а есть ли пример работы с Rutoken/esmart пример работы? Или статейка какая-то?
Есть задача получать электронную подпись на ключе с токена.

Куда хотя бы смотреть? какие библитеки заголовки?

Про pkcs11 немного в курсе. Дополню вопрос. Писать на либах pkcs11 от производителя, или от криптвс есть каакя-то обёртка надстройка для работы с ключевыми носителями?

С уважением.

Отредактировано пользователем 16 ноября 2021 г. 14:41:32(UTC)  | Причина: Не указана

Offline Андрей Русев  
#2 Оставлено : 25 ноября 2021 г. 18:01:12(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,260

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 442 раз в 322 постах
Здравствуйте.
КриптоПро CSP предоставляет единый интерфейс (CryptoAPI) для работы с ключами на любых носителях. Выбор конкретных устройств обычно происходит в диалогах, которые провайдер показывает при необходимости. По сути это выбор имён в некотором формате: https://cpdn.cryptopro.r...LPSZ_CONTAINER_NAME.html
Лучше начинать знакомство с помощью прикладных программ. Для Linux есть хорошие описания у партнёров:
https://wiki.astralinux....e.action?pageId=32833902
https://www.altlinux.org...%D0%BE%D0%9F%D1%80%D0%BE
К написанию кода лучше и не переходить, а воспользоваться приложениями из состава: либо графическим (cptools/Инструменты КриптоПро), либо консольными (cryptcp, csptest).
Официальная техподдержка. Официальная база знаний.
Offline seevve  
#3 Оставлено : 25 ноября 2021 г. 19:09:29(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

спасибо за ссылки, но боюсь это не то. Мне всё таки про встраивание задача. И если бы задача не касалась росийских алгоритмов и генерации CMS с подписью мне бы исходников pkcs11-tool хватил вполне, для "творческого" осмысления и надёргать код. Плюс на машине где этот код будет выпоняться, вот нет уверенности что будет стоять полноценный крипто про, хватило бы и pkcs11 библиотек от вендоров м/или крипто про для выполнения задачи: "генерации подписанного CMS на неизвлекаемом ключе".

Такой вопрос для работы через библиотеку крипто про с rutoken/esmart через pkcs11 на машине не обязательно должны быть установлены библиотеки pkcs11 от вендоров? Тут прельщает, что будет один код для работы с разными токенами, ибо работа с CMS у рутокена и esmart сделана по разному, хоть и в рамках pkcs11.
А что с точки зрения лицензии такое использование только pkcs11 библиотек от крипто про?

Вероятно задача может быть решена скриптом на базе утилит (как вы написали cryptcp, csptest) и взовом оного через popen() я о таком как-то не подумал сразу, но это явно требует установки крипто про и полноценной лицензии. но и тут я бы предпочёл обойтись более стандартизованным (если бы его хватало)
pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11...
Offline Андрей Русев  
#4 Оставлено : 26 ноября 2021 г. 12:48:17(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,260

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 442 раз в 322 постах
Обычно там, где нужен ГОСТ, нужны сертифицированные решения, так что зачастую pkcs11-интерфейсом и pkcs11-tool не обойтись. По тем же причинам при встраивании лучше использовать наши приложения - можно сэкономить на проверке корректности встраивания.

Наличие pkcs11-модулей от вендоров для работы не требуется: нужны только pcsc+ccid-драйвер (обычно все устройства поддерживаются из коробки) + наш модуль поддержки типа cprocsp-rdr-rutoken и cprocsp-rdr-esmart + пакет cprocsp-rdr-pcsc - они в комплекте с дистрибутивом КриптоПро CSP. Для Рутокен в режиме ФКН также нужен cprocsp-rdr-cpfkc.

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

Если-таки будете программировать: https://support.cryptopr...7/0/sbork-primerov-n-nix
Но CryptoAPI - большой и сложный интерфейс, с наскоку корректно решать в нём задачи будет тяжело.
Официальная техподдержка. Официальная база знаний.
Offline seevve  
#5 Оставлено : 26 ноября 2021 г. 13:39:26(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Примеры я конечно уже посмотрел и функционал связанный с шифрованием и проверкой подписи на CSP там нашёл и реализовал у себя, а вот примеров работы через pkcs11 там нет.
Ну по крайней мере по C_Login, C_Init, pkcs11 ничего не grep-ается.
Offline Андрей Русев  
#6 Оставлено : 26 ноября 2021 г. 15:00:33(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,260

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 442 раз в 322 постах
Примеров для pkcs11 у нас нет, но если вы уже используете CryptoAPI из примеров, то вам это и не нужно.
Официальная техподдержка. Официальная база знаний.
Offline seevve  
#7 Оставлено : 21 декабря 2021 г. 15:32:01(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

.
Удалил старую версию сообщения, перегенерировал ключи, через pkcs11, появились на токене.

Как то процесс пошёл, удивительно не понимаю, как получаю список ключей и объектов на токене без ввода pin-а (в терминах pkcs11). при оспользовании крипто про.

Отредактировано пользователем 21 декабря 2021 г. 20:13:19(UTC)  | Причина: Не указана

Offline seevve  
#8 Оставлено : 22 декабря 2021 г. 20:54:49(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Андрей Русев. Реализовал вроде бы весь необходимый функционал через CryptoAPI, спасибо за указание в нужном направлении.
По результатам есть несколько вопросов.

1. При обращении (выполнении подписи на контейнере, который находится на rutoken), вываливается окно для ввода PIN-а на GTK от крипто про. Ну не критично, но нет ли возможности передать pin скажем внутрь CryptoAPI сделав ввод параметра в своём софте?
2. В сгенерированная DetachedCms

Цитата:

> dumpasn1 <sign.bin>
Warning: Further data follows ASN.1 data at position 1426.
#и выглядит как-то так
> xxd sign.bin
00000570: dc3e 301c 06d8 cb97 0b8f 3f9d e3de ea87 .>0.......?.....
00000580: 03ff 5759 384a 91e3 9d76 1861 2bbc 8a42 ..WY8J...v.a+..B
00000590: 129b 0000 0000 0000 0000 0000 0000 0000 ................
000005a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000005b0: 0000 0000 0000 0000 0000 0000 0000 00 ...............

реальный размер подписи меньше, чем выделилось памяти и добилось нулями.

Подпись сделана по мотивам DoSign() из CSP/SignUtility/SignUtility.c.
теже параметры, только данные извне ну и свой серт с рутокена.
Offline two_oceans  
#9 Оставлено : 24 декабря 2021 г. 4:34:22(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Попробую ответить. 1) Конечно возможно, правда способ не очевиден. После получения hProv можно задать его параметры, в том числе пин-код. Немного неудобно что нужно знать ключ подписи или ключ обмена - для них разные константы указания пин-кода. В некоторых случаях (сертификат из хранилища + определенный носитель) бывает "побочный эффект" - пин-код неявно запоминается в хранилище сертификатов (мимо системы сохранения пин-кодов КриптоПро).

2) При получении результата как правло функция вызывается 2 раза (первый с пустым параметром выходного буфера, потом выделяется буфер, потом второй вызов функции с новым буфером). Так вот, первый раз некоторые функции возвращают максимальный теоретически возможный размер, а во второй раз - реальный для конкретных данных. Память нужно выделять по первому числу (получается с припуском), а записывать в файл по второму числу (сколько реально вышло). Если же записать весь выделенный буфер, то в конце буфера/файла возможно появление "лишних данных".

Отредактировано пользователем 24 декабря 2021 г. 5:06:56(UTC)  | Причина: Не указана

Offline seevve  
#10 Оставлено : 24 декабря 2021 г. 13:51:28(UTC)
seevve

Статус: Участник

Группы: Участники
Зарегистрирован: 08.11.2021(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

two_oceans, спасибо огромное с пунктом 2 помогло. (давно не писал, на C, но в тех API с которыми сталкивался обычно первый вызов возвращал везде нужный размер, даже не подумл смотреть на размер во втором вызове).

А во по пункту 1 вопрос,
я так понимаю речь о CryptSetProvParam с параметром PP_SIGNATURE_PIN, однако в том месте где я делаю подпись у меня hProv нет, ка нет его ни в примерах кирпто про (SignUtility) и нет в этом примере от MS. Фактически есть только PCCERT_CONTEXT pCertCtx. Можете подсказать как увязать результат CryptAcquireContext, с сертификатом? Или достаточно посто существования контекста с в момент вызова CryptSignMessage (тут я тоже не увидел как HCRYPTPROV можно было бы передать).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.