(2011-11-07 17:03:41 отредактировано drzlo)

проблема с Рутокен-ЭЦП (opensc-pkcs11 в linux)

Здравствуйте!
Есть проблемы с использованием Рутокен-ЭЦП в линуксе через opensc-pkcs11
1. Попытка подписать хеш вызовом C_Sign (механизм CKM_GOSTR3410) заканчивается успешно, но последующая попытка проверить полученную только что подпись через C_Verify заканчивается ошибкой CKR_FUNCTION_NOT_SUPPORTED. Поведение не зависит от того, стоят ли параметры хеша в механизме или нет.
2. Попытка создать ЭЦП механизмом CKM_GOSTR3410_WITH_GOSTR3411 валится на этапе C_SignInit с ошибкой CKR_MECHANISM_INVALID. Поведение не зависит от того, стоят ли параметры хеша в механизме или нет.
Рутокен ЭЦП инициализировался как написано здесь: http://www.opensc-project.org/opensc/wi … RutokenECP.
Ключи генерировались вызовом C_GenerateKeyPair (механизм CKM_GOSTR3410_KEY_PAIR_GEN), атрибуты выставлялись такие:

    CK_OBJECT_CLASS pub_class = CKO_PUBLIC_KEY;
    CK_KEY_TYPE key_type = CKK_GOSTR3410;
    CK_UTF8CHAR pub_label[] = "gost public key";
    CK_BBOOL true = CK_TRUE;
    CK_ATTRIBUTE pkey_attr[] = {
        {CKA_LABEL, &pub_label, sizeof(pub_label)-1},
        {CKA_CLASS, &pub_class, sizeof(pub_class)},
        {CKA_KEY_TYPE, &key_type, sizeof(key_type)},
        {CKA_TOKEN, &true, sizeof(true)},
        {CKA_GOSTR3410_PARAMS, g3410par, sizeof(g3410par)},
        {CKA_GOSTR3411_PARAMS, g3411par, sizeof(g3411par)},
        {CKA_ID, id, sizeof(id)},
    };
    CK_OBJECT_CLASS priv_class = CKO_PRIVATE_KEY;
    CK_UTF8CHAR priv_label[] = "gost private key";
    CK_ATTRIBUTE skey_attr[] = {
        {CKA_LABEL, &priv_label, sizeof(priv_label)-1},
        {CKA_CLASS, &priv_class, sizeof(priv_class)},
        {CKA_KEY_TYPE, &key_type, sizeof(key_type)},
        {CKA_TOKEN, &true, sizeof(true)},
        {CKA_SENSITIVE, &true, sizeof(true)},
        {CKA_SIGN, &true, sizeof(true)},
        {CKA_GOSTR3410_PARAMS, g3410par, sizeof(g3410par)},
        {CKA_GOSTR3411_PARAMS, g3411par, sizeof(g3411par)},
        {CKA_ID, id, sizeof(id)},
    };

Как пытался решать:
1. Пробовал явно загрузить криптопараметры (CKO_DOMAIN_PARAMETERS), как написано в спецификации pkcs11, но C_CreateObject вернула CKR_FUNCTION_NOT_SUPPORTED
2. Подумал было что проблема в идентификаторах CKA_ID - в rutoken_ecp.profile написано, что идентификатор закрытого ключа должен быть {0x01, 0xNN}, а соответствующего ему открытого {0x02, 0xNN}. Однако, при генерации идентификатор закрытого ключа берется из шаблона для открытого и они одинаковы, следовательно, проблема не в идентификаторах.

Вероятно, где-то я что-то делаю не так. В чем может быть проблема?

Re: проблема с Рутокен-ЭЦП (opensc-pkcs11 в linux)

да, забыл написать про версии. Ubuntu Linux, pcsc-lite 1.5.3 из дистрибутива, opensc 0.12.2 собственной сборки

Re: проблема с Рутокен-ЭЦП (opensc-pkcs11 в linux)

Вероятно, в opensc-pkcs11 могут быть ошибки. Вы можете воспользоваться нашей кроссплатформенной библиотекой PKCS#11 https://www.rutoken.ru/support/download … s-for-nix/ , с ней все работает.