使用PKCS#11用公钥包装密钥

时间:2013-09-17 16:37:13

标签: cryptography 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 个答案:

答案 0 :(得分:0)

错误CKR_KEY_TYPE_INCONSISTENT是由于函数C_WrapKey中使用了错误的CK_MECHANISM。如果我们想用RSA公钥包装密钥,请设置以下机制:

CK_MECHANISM dec_mec = {CKM_RSA_PKCS, NULL_PTR, 0};