Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Добрый день! Установил в Ubuntu 18 версию CryptoPro CSP4 R3, чтобы работать с вашим криптопровайдером через PKCS#11 интерфейс. В скрипте ./install_gui.sh во время установки был выбран модуль поддержки PKCS#11. После установки DEB-пакетов увидел, что в каталоге /opt/cprocsp/lib/amd64/ появились файлы: libcppkcs11.so libcppkcs11.so.4 libcppkcs11.so.4.0.4 После этого установил opensc и попробовал получить информацию о поддерживаемых CSP механизмах. Команда: Код:
pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so -M
выдала обнадеживающий результат: Код:
Using slot 0 with a present token (0x0)
Supported mechanisms:
...
GOSTR3411, digest
...
GOSTR3410, keySize={32,32}, sign, verify
...
GOSTR3410-WITH-GOSTR3411, keySize={64,64}, sign, verify
...
GOSTR3410-KEY-PAIR-GEN, keySize={64,64}, generate_key_pair
...
После этого попытался сгенерировать ключевую пару: Код:
pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=123456 --set-id=123456 --label=123456
, но получаю ошибку: Код:Using slot 0 with a present token (0x0)
error: PKCS11 function C_GenerateKeyPair failed: rv = CKR_TEMPLATE_INCONSISTENT (0xd1)
Aborting.
Решил проверить, работает ли хеширование. Для этого создал файл "abc" с текстом "abc" и вызвал команду: Код:
pkcs11-tool --hash --module /opt/cprocsp/lib/amd64/libcppkcs11.so --mechanism GOSTR3411 --input-file abc --output-file abc.hash
Хеш успешно вычислился и сохранился в файл abc.hash. Решил проверить, нет ли у меня в вызове команд ошибки, сделав генерацию ключевой пары и создание подписи через токен JaCarta ГОСТ: Код:
pkcs11-tool --init-token --init-pin --module /usr/lib64/libjcPKCS11.so.1.5.3 --so-pin=1234567890 --label='JaCarta' --new-pin=11111111 --pin=11111111
Using slot 0 with a present token (0x0)
Token successfully initialized
User PIN successfully initialized
pkcs11-tool --keypairgen --module /usr/lib64/libjcPKCS11.so.1.5.3 --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=123456 --set-id=123456 --label=123456
Using slot 0 with a present token (0x0)
Key pair generated:
Private Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
label: 123456
ID: 123456
warning: PKCS11 function C_GetAttributeValue(DECRYPT) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
warning: PKCS11 function C_GetAttributeValue(DERIVE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
Usage: sign
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: b3dff43e5bbacd4c34847463a57709d219074fdd451779f755a8344c37495354
451bb87d27618ea733a41aad4eb2506acc2833d13d440582bf13dfb0b8e53fa7
label: 123456
ID: 123456
warning: PKCS11 function C_GetAttributeValue(ENCRYPT) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
warning: PKCS11 function C_GetAttributeValue(WRAP) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
warning: PKCS11 function C_GetAttributeValue(DERIVE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
Usage: verify
error: You should specify the object type with the -y option
Aborting.
pkcs11-tool --sign --module /usr/lib64/libjcPKCS11.so.1.5.3 --pin=11111111 --id=123456 --label 123456 --input-file abc --output-file abc.sgn --mechanism GOSTR3410-WITH-GOSTR3411
Using slot 0 with a present token (0x0)
Using signature algorithm GOSTR3410-WITH-GOSTR3411
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
Ключевая пара в токене успешно сгенерировалась и 64-байта записались в файл abc.sgn. В чем может быть проблема с генерацией ключевой пары через PKCS#11 API CryptoPro CSP 4? Нужно что-то дополнительно настроить в /opt/cprocsp/? Обновить DEB-пакеты?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,495 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 464 раз в 332 постах
|
Автор: Ruslan777 В чем может быть проблема с генерацией ключевой пары через PKCS#11 API CryptoPro CSP 4? Нужно что-то дополнительно настроить в /opt/cprocsp/? Обновить DEB-пакеты? Проблем может быть много, мы мало тестировали pkcs11-tool, особенно в части генерации ключей. Попробуйте сгенерировать ключ штатными средствами CSP, а подписывать через pkcs11-tool, ведь цель подпись? Или в чём глобальная задача? Интерфейс pkcs11 очень капризный. Мы конечно можем его подстроить под конкретное приложение, но хотелось бы понимать задачи, которые можно решить с помощью pkcs11-tool, но нельзя решить штатными средствами КриптоПро CSP. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Дмитрий, да, цель - подпись. У нас есть универсальный плагин для браузеров (Windows, Mac OS X, Linux), который поддерживает работу с токенами через PKCS#11 интерфейс. Плагин замечательно работает с Рутокен и JaCarta, но не работает через ваш PKCS#11 модуль "/opt/cprocsp/lib/amd64/libcppkcs11.so". Если использовать "libcppkcs11.so", то операции C_Sign или C_SignFinal всегда выполняются с результатом CKR_FUNCTION_FAILED. При этом я опробовал два подхода: 1) Механизм комбинированного хеширования и подписи CKM_GOSTR3410_WITH_GOSTR3411(0x1202) с вызовами C_SignInit, C_SignUpdate и C_SignFinal 2) Механизмы раздельного хеширования и подписи CKM_GOSTR3411(0x1210) + CKM_GOSTR3410(0x1201) с вызовами C_SignInit, C_Sign. Результат всегда одинаковый - и для C_SignFinal и для C_Sign вызов возвращает ошибку CKR_FUNCTION_FAILED. При этом другие функции (чтение списка поддерживаемых механизмов, хеширование) работают через "/opt/cprocsp/lib/amd64/libcppkcs11.so". Я сначала предположил, что проблема может быть в неправильной работе моего кода с PKCS#11 в Linux, поэтому решил обкатать сценарий выпуска PKCS#10-запроса, установки сертификата и создания ЭЦП через универсальный инструмент - pkcs11-tool. Но сейчас все мои предположения сводятся к тому, что у КриптоПро модуль PKCS#11 для Linux получился слишком сырым. Отредактировано пользователем 11 апреля 2019 г. 12:45:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,495 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 464 раз в 332 постах
|
Проверили pkcs11-tool на совместимость с нами, вариант с CKM_GOSTR3410_WITH_GOSTR3411 нормально работает. 1. Перечисляем объекты: Код:pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects
Цитата:... Private Key Object; GOSTR3410 PARAMS OID: 06072a850302022400 label: cln512e ID: 33383439344646324543383442363841 Usage: decrypt, sign, unwrap, derive ... 2. Находим нужный ключ и сохраняем его ID 3. Подписываем: Код:pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --sign --id=33383439344646324543383442363841 --input-file abc --output-file abc.sgn --mechanism GOSTR3410-WITH-GOSTR3411
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Дмитрий, у меня почему-то не получается увидеть в списке объектов ключ после того, как был вызван метод C_GenerateKeyPair. Для генерации ключей используются шаблоны со следующими атрибутами: [Закрытый ключ] CKA_ID CKA_LABEL CKA_PRIVATE CKA_GOST_3410_PARAM CKA_GOST_3411_PARAM CKA_KEY_TYPE CKA_SIGN [Открытый ключ] CKA_ID CKA_LABEL CKA_GOST_3410_PARAM CKA_GOST_3411_PARAM CKA_KEY_TYPE CKA_VERIFY Вызов метода C_GenerateKeyPair проходит с результатом CKR_OK, но при вызове Код:pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects
я не вижу новых объектов - только следующие 9 объектов: Код:Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: 8fa5bf791023c8d691ad6431575bbe9bc58a83f43f29f72a79a9fb65c3e8a80f
5a75c42254915fc83f218ada703af9d58b0d736284dc2ee6907ea1037337a1fb
label: 1CCB95BA3256A79BC401AF40D2CD41BE06A898B2
ID: 31434342393542413332353641373942433430314146343044324344343142453036413839384232
Usage: encrypt, verify, wrap, derive
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: 75392a45a7b9a2957df710fd229207ba1db65a718a7d7d58fcb146b9456157ac
1dbb48a5f94afb4819ea6a29ebfaf514987871ca47e8d3f585f636e48af7038d
label: 617A71FDD5C9773D23AF010B85F339CA10182AFE
ID: 36313741373146444435433937373344323341463031304238354633333943413130313832414645
Usage: encrypt, verify, wrap, derive
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: e7c9497fae11e325eb495d4b1dc6c0484da56495752ac0759b46964a32ffd365
e9987dd4f0099f21a3af0ace4ccc71cdd580e2e172bb6167ed1c127ce8e1d54f
label: 6FEFB1FDD47784A78644E7A8E985A1DD360B0477
ID: 36464546423146444434373738344137383634344537413845393835413144443336304230343737
Usage: encrypt, verify, wrap, derive
Certificate Object; type = X.509 cert
label: 1CCB95BA3256A79BC401AF40D2CD41BE06A898B2
ID: 31434342393542413332353641373942433430314146343044324344343142453036413839384232
Certificate Object; type = X.509 cert
label: 617A71FDD5C9773D23AF010B85F339CA10182AFE
ID: 36313741373146444435433937373344323341463031304238354633333943413130313832414645
Certificate Object; type = X.509 cert
label: 6FEFB1FDD47784A78644E7A8E985A1DD360B0477
ID: 36464546423146444434373738344137383634344537413845393835413144443336304230343737
Object 3221225475, type 3461563219
Object 3221225478, type 3461563219
Object 3221225481, type 3461563219
При этом, если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair возвращает ошибку CKR_TEMPLATE_INCONSISTENT, хотя для C_GenerateKeyPair у обычных токенов (Рутокен, JaCarta) этот атрибут никогда не вызывает ошибок. Может быть у вас есть готовый пример, как можно создать ключевую пару через PKCS#11 для CryptoPro CSP 4? Отредактировано пользователем 11 апреля 2019 г. 19:45:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,495 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 464 раз в 332 постах
|
Автор: Ruslan777 Вызов метода C_GenerateKeyPair проходит с результатом CKR_OK, но при вызове Код:pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects
я не вижу новых объектов ... При этом, если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair возвращает ошибку CKR_TEMPLATE_INCONSISTENT, хотя для C_GenerateKeyPair у обычных токенов (Рутокен, JaCarta) этот атрибут никогда не вызывает ошибок. Может быть у вас есть готовый пример, как можно создать ключевую пару через PKCS#11 для CryptoPro CSP 4? Всё верно по --list-objects, временные объекты могут быть перечислены только в рамках работы сессии, в которой они созданы. Между вызовами приложения временные объекты, очевидно, не выживают. Всё верно по CKA_TOKEN, по умолчанию слот настроен в режиме только на чтение, постоянные объекты в нём не создать. Как выяснили выше, если цель -- подпись, то сделать её можно и на слоте по умолчанию, ключ можно создать средствами КриптоПро CSP. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Цитата:Всё верно по CKA_TOKEN, по умолчанию слот настроен в режиме только на чтение, постоянные объекты в нём не создать. Может быть в этом и кроется корень всех проблем. Дмитрий, я нашел файл: /etc/opt/cprocsp/config64.ini и заполнил блок [PKCS11\slot0]: Код:[PKCS11\slot0]
ProvGOST = "Crypto-Pro GOST R 34.10-2001 KC1 CSP"
# ProvRSA = "Microsoft Strong Cryptographic Provider"
# Firefox = ""
reader = hdimage
Сейчас у меня команда Код:pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=33383439344646324543383442363841 --set-id=33383439344646324543383442363841 --label=cln512e --usage-sign --usage-derive --usage-decrypt
выдает такую ошибку: Код:Using slot 0 with a present token (0x0)
error: PKCS11 function C_OpenSession failed: rv = CKR_TOKEN_WRITE_PROTECTED (0xe2)
Aborting.
Отредактировано пользователем 12 апреля 2019 г. 12:14:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,495 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 464 раз в 332 постах
|
Автор: Ruslan777 выдает такую ошибку: Код:Using slot 0 with a present token (0x0)
error: PKCS11 function C_OpenSession failed: rv = CKR_TOKEN_WRITE_PROTECTED (0xe2)
Aborting.
Попробуйте так: Код:[PKCS11\slot0]
ProvGOST = ""
reader = "HDIMAGE"
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Не помогло. Вернулась прежняя ошибка - CKR_TEMPLATE_INCONSISTENT Код:
pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=33383439344646324543383442363841 --set-id=33383439344646324543383442363841 --label=cln512e --usage-sign --usage-derive --usage-decrypt
Using slot 0 with a present token (0x0)
error: PKCS11 function C_GenerateKeyPair failed: rv = CKR_TEMPLATE_INCONSISTENT (0xd1)
Aborting.
При программной генерации через PKCS#11 ключевая пара создается, но как и раньше не выводится командой pkcs11-tool --list-objects. Отредактировано пользователем 12 апреля 2019 г. 13:28:44(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.04.2019(UTC) Сообщений: 7 Откуда: Москва
|
Если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair также возвращает ошибку CKR_TEMPLATE_INCONSISTENT.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close