Оберните секретный ключ открытым ключом, используя PKCS#11

В моей C-программе я генерирую пару открытый / закрытый ключ с помощью функции C_GenerateKeyPair и секретный (секретный) ключ с C_GenerateKey, Цель состоит в том, чтобы обернуть секретный ключ открытым ключом, но когда я вызываю функцию C_WrapKeyЯ получаю ошибку CKR_KEY_TYPE_INCONSISTENT. Код запускается, если я использую другой секретный ключ упаковки с установленными атрибутами Wrap и Encrypt. Шаблон, используемый для открытого ключа, является тем, который предложен в документации PKCS#11:

CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hPublicKey, hPrivateKey;
CK_MECHANISM mechanism = {
   CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0
};
CK_ULONG modulusBits = 768;
CK_BYTE publicExponent[] = { 3 };
CK_BYTE id[] = {123};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE publicKeyTemplate[] = {
   {CKA_ENCRYPT, &true, sizeof(true)},
   {CKA_VERIFY, &true, sizeof(true)},
   {CKA_WRAP, &true, sizeof(true)},
   {CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits)},
   {CKA_PUBLIC_EXPONENT, publicExponent, sizeof(publicExponent)}
};

Атрибут Wrap и Encrypt задан правильно, а для секретного ключа добавлен атрибут CKA_EXTRACTABLE. Заранее спасибо за помощь.

1 ответ

Решение

Ошибка CKR_KEY_TYPE_INCONSISTENT происходит из-за неправильного CK_MECHANISM, используемого в функции C_WrapKey. Если мы хотим обернуть секретный ключ открытым ключом RSA, установите следующий механизм:

CK_MECHANISM dec_mec = {CKM_RSA_PKCS, NULL_PTR, 0};
Другие вопросы по тегам