Cryptography 使用PKCS11将密钥包装为公钥

Cryptography 使用PKCS11将密钥包装为公钥,cryptography,pkcs#11,Cryptography,Pkcs#11,在我的C程序中,我使用函数C_GenerateKey对生成一个公钥/私钥对,并使用C_GenerateKey生成一个敏感的秘密密钥。其目的是用公钥包装秘密密钥,但是当我调用函数C_WrapKey时,得到错误CKR_key_TYPE_。如果我使用另一个具有属性Wrap和Encrypt set的包装密钥,代码将运行。 公钥使用的模板是PKCS11文档中建议的模板: CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hPublicKey, hPrivateKey

在我的C程序中,我使用函数C_GenerateKey对生成一个公钥/私钥对,并使用C_GenerateKey生成一个敏感的秘密密钥。其目的是用公钥包装秘密密钥,但是当我调用函数C_WrapKey时,得到错误CKR_key_TYPE_。如果我使用另一个具有属性Wrap和Encrypt set的包装密钥,代码将运行。 公钥使用的模板是PKCS11文档中建议的模板:

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属性。
提前感谢您的帮助。

错误CKR\U KEY\U TYPE\U不一致是由于函数C\U WrapKey中使用了错误的CKU机制造成的。如果要使用RSA公钥包装密钥,请设置以下机制:

CK_MECHANISM dec_mec = {CKM_RSA_PKCS, NULL_PTR, 0};

简而言之,如何使用公钥包装密钥。您使用的是哪种PKCS11令牌?RSA密钥的机制是什么?您是否尝试过删除CKA_VERIFY属性?也可能是因为您的令牌只支持对称包装,而不支持不对称包装。我使用的是SafeNet eToken。CKA_验证可以删除,但我再次得到相同的错误。使用CryptoAPI执行了非对称包装,没有错误。哪个eToken?您确定它支持RSA密钥换行吗?并非所有PKCS11令牌的创建都相同。这一个似乎主要关注身份验证。我需要用一个秘密密钥包装一个私有RSA密钥,你能帮我吗?