Статус: Участник
Группы: Участники
Зарегистрирован: 08.11.2021(UTC) Сообщений: 10 Откуда: Москва
|
Добрый день. Может плохо ищу, а есть ли пример работы с Rutoken/esmart пример работы? Или статейка какая-то? Есть задача получать электронную подпись на ключе с токена. Куда хотя бы смотреть? какие библитеки заголовки? Про pkcs11 немного в курсе. Дополню вопрос. Писать на либах pkcs11 от производителя, или от криптвс есть каакя-то обёртка надстройка для работы с ключевыми носителями? С уважением. Отредактировано пользователем 16 ноября 2021 г. 14:41:32(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,416
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 565 раз в 393 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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...
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,416
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 565 раз в 393 постах
|
Обычно там, где нужен ГОСТ, нужны сертифицированные решения, так что зачастую 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 - большой и сложный интерфейс, с наскоку корректно решать в нём задачи будет тяжело. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.11.2021(UTC) Сообщений: 10 Откуда: Москва
|
Примеры я конечно уже посмотрел и функционал связанный с шифрованием и проверкой подписи на CSP там нашёл и реализовал у себя, а вот примеров работы через pkcs11 там нет. Ну по крайней мере по C_Login, C_Init, pkcs11 ничего не grep-ается.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,416
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 565 раз в 393 постах
|
Примеров для pkcs11 у нас нет, но если вы уже используете CryptoAPI из примеров, то вам это и не нужно. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.11.2021(UTC) Сообщений: 10 Откуда: Москва
|
. Удалил старую версию сообщения, перегенерировал ключи, через pkcs11, появились на токене. Как то процесс пошёл, удивительно не понимаю, как получаю список ключей и объектов на токене без ввода pin-а (в терминах pkcs11). при оспользовании крипто про. Отредактировано пользователем 21 декабря 2021 г. 20:13:19(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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. теже параметры, только данные извне ну и свой серт с рутокена.
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Попробую ответить. 1) Конечно возможно, правда способ не очевиден. После получения hProv можно задать его параметры, в том числе пин-код. Немного неудобно что нужно знать ключ подписи или ключ обмена - для них разные константы указания пин-кода. В некоторых случаях (сертификат из хранилища + определенный носитель) бывает "побочный эффект" - пин-код неявно запоминается в хранилище сертификатов (мимо системы сохранения пин-кодов КриптоПро). 2) При получении результата как правло функция вызывается 2 раза (первый с пустым параметром выходного буфера, потом выделяется буфер, потом второй вызов функции с новым буфером). Так вот, первый раз некоторые функции возвращают максимальный теоретически возможный размер, а во второй раз - реальный для конкретных данных. Память нужно выделять по первому числу (получается с припуском), а записывать в файл по второму числу (сколько реально вышло). Если же записать весь выделенный буфер, то в конце буфера/файла возможно появление "лишних данных". Отредактировано пользователем 24 декабря 2021 г. 5:06:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.11.2021(UTC) Сообщений: 10 Откуда: Москва
|
two_oceans, спасибо огромное с пунктом 2 помогло. (давно не писал, на C, но в тех API с которыми сталкивался обычно первый вызов возвращал везде нужный размер, даже не подумл смотреть на размер во втором вызове). А во по пункту 1 вопрос, я так понимаю речь о CryptSetProvParam с параметром PP_SIGNATURE_PIN, однако в том месте где я делаю подпись у меня hProv нет, ка нет его ни в примерах кирпто про (SignUtility) и нет в этом примере от MS. Фактически есть только PCCERT_CONTEXT pCertCtx. Можете подсказать как увязать результат CryptAcquireContext, с сертификатом? Или достаточно посто существования контекста с в момент вызова CryptSignMessage (тут я тоже не увидел как HCRYPTPROV можно было бы передать).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close