(2017-07-25 16:13:22 отредактировано konkov)

Ошибка(10) при вызове C_CreateObject с атрибутом CKA_MODIFIABLE

При вызове C_CreateObject с нижеследующим набором атрибутов получаем CKR_ATTRIBUTE_READ_ONLY(0x00000010)

char label[64];
int label_len = ...;
const char *userid = ...;
unsigned char *modulus = ...;
int modSize = ...;
nsigned char *exponent = ...;
int expSize = ...;

CK_BBOOL bFalse = 0;
CK_BBOOL bTrue = 1;
CK_KEY_TYPE key_type = CKK_RSA;
CK_OBJECT_CLASS class_public_key = CKO_PUBLIC_KEY;
CK_OBJECT_HANDLE public_key;
...
    CK_ATTRIBUTE public_key_template[] = {
        { CKA_CLASS, &class_public_key, sizeof(class_public_key) },
        { CKA_KEY_TYPE, &key_type, sizeof(key_type) },               
        { CKA_ID, label, label_len },                               
        { CKA_SUBJECT, (void *)userid, strlen(userid) },           
        { CKA_LABEL, label, label_len },
        { CKA_TOKEN, &bTrue, sizeof(bTrue) },
        { CKA_PRIVATE, &bFalse, sizeof(bFalse) },
        { CKA_MODULUS, modulus, modSize },
        { CKA_PUBLIC_EXPONENT, exponent, expSize },
        { CKA_MODIFIABLE, &bFalse, sizeof(bFalse) }
    };
...
PKCS11_call->C_CreateObject(session, public_key_template, arraysize(public_key_template), &public_key);

Если убрать CKA_MODIFIABLE - открытый ключ создается успешно.

Пробовали на
Windows 7 x64 SP1, Windows 7 x32 sp1, Windows XP sp3
rtPKCS11.dll 4.2.3.0
Rutoken фолетовый (Рутокен ЭЦП PKI) D 64K120Z

Re: Ошибка(10) при вызове C_CreateObject с атрибутом CKA_MODIFIABLE

Добрый день, konkov.

Токен проверяет, что открытый и закрытый ключ соответствуют друг другу. CKA_MODIFIABLE подразумевает, что Вы сможете изменить открытый ключ отдельно от закрытого, что может привести к дальнейшим ошибкам при работе. Если вы хотите целиком изменить пару - то Вы можете просто удалить старую и импортировать\сгенерировать новую.

Расскажите какой сценарий работы вы хотите создать?

Re: Ошибка(10) при вызове C_CreateObject с атрибутом CKA_MODIFIABLE

Хочу создать на токене открытый ключ(без закрытого) и запретить его модифицировать.

Re: Ошибка(10) при вызове C_CreateObject с атрибутом CKA_MODIFIABLE

Добрый день, konkov.

Сделать в явном виде так как Вы хотите не получится.
Но Вы можете отдельно создать ключи и сертификат. Затем импортировать сертификат на токен установив certificateType в CERT_CATEGORY_CA. Тогда этот сертификат нельзя будет изменить, а внутри него будет лежать Ваш открытый ключ.