我正在尝试将safenet HSM集成到我们的应用程序中。我正在用C编写程序,我指的是来自RSA实验室的PKCS11 v2.20加密标准文档。我需要生成一个AES 256位密钥。在为密钥生成定义模板时,我不确定需要为CKA_VALUE传递什么值。在生成DES3密钥时,我没有提供这个属性,并且能够生成一个密钥。
我搜索了CKA_LABEL的示例程序,但没有在C中找到任何可靠的示例。我找到了一些使用CKA_VALUE_LEN而不是CKA_VALUE的Java程序。我不确定这是否有效。
这是文档中给出的片段。大多数网站只给出了这个片段作为例子。没有为数组值指定任何内容。
CK_OBJECT_CLASS class = CKO_SECRET_KEY;
CK_KEY_TYPE keyType = CKK_AES;
CK_UTF8CHAR label[] = “An AES secret key object”;
CK_BYTE value[] = {...};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &true, sizeof(true)},
{CKA_LABEL, label, sizeof(label)-1},
{CKA_ENCRYPT, &true, sizeof(true)},
{CKA_VALUE, value, sizeof(value)}
};发布于 2018-12-20 15:04:05
CKA_VALUE是键的实际值。当您告诉HSM生成一个秘密密钥时,它将根据您在秘密密钥模板中传递的属性在硬件上为您生成一个密钥,并设置在CKA_VALUE中生成的值。但是,不能读取/提取该属性,也不能在生成键时设置该属性,因为HSM不允许您(直接)从软件中注入密钥,也不允许您(直接)从HSM中提取该属性。
CKA_VALUE_LEN是您可以告诉HSM生成的键的长度。AES密钥可以是128位、192位或256位。根据您想要的键大小,您可以将CKA_VALUE_LEN设置为16、24或32 (键大小为字节)。
https://stackoverflow.com/questions/53868043
复制相似问题