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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Ruslan777  
#1 Оставлено : 10 апреля 2019 г. 19:27:43(UTC)
Ruslan777

Статус: Новичок

Группы: Участники
Зарегистрирован: 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-пакеты?




Offline Дмитрий Пичулин  
#2 Оставлено : 10 апреля 2019 г. 23:29:14(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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.

Знания в базе знаний, поддержка в техподдержке
Offline Ruslan777  
#3 Оставлено : 11 апреля 2019 г. 12:43:54(UTC)
Ruslan777

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Дмитрий Пичулин  
#4 Оставлено : 11 апреля 2019 г. 15:12:06(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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

Знания в базе знаний, поддержка в техподдержке
Offline Ruslan777  
#5 Оставлено : 11 апреля 2019 г. 19:44:39(UTC)
Ruslan777

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Дмитрий Пичулин  
#6 Оставлено : 11 апреля 2019 г. 20:36:54(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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.


Знания в базе знаний, поддержка в техподдержке
Offline Ruslan777  
#7 Оставлено : 12 апреля 2019 г. 11:42:54(UTC)
Ruslan777

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Дмитрий Пичулин  
#8 Оставлено : 12 апреля 2019 г. 12:22:19(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 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"


Знания в базе знаний, поддержка в техподдержке
Offline Ruslan777  
#9 Оставлено : 12 апреля 2019 г. 13:24:32(UTC)
Ruslan777

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Ruslan777  
#10 Оставлено : 12 апреля 2019 г. 15:31:10(UTC)
Ruslan777

Статус: Новичок

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

Если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair также возвращает ошибку CKR_TEMPLATE_INCONSISTENT.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.