AES密钥生成模板中使用了什么CKA_VALUE?

时间:2018-12-20 11:44:10

标签: c aes public-key-encryption pkcs#11

我正在尝试将safenet HSM与我们的应用程序集成。我正在用C编写程序。我指的是RSA Labs的 PKCS11 v2.20 cryptoki 标准文档。我需要生成一个AES 256位密钥。在定义用于密钥生成的模板时,我不确定CKA_VALUE需要传递什么值。生成DES3密钥时,我没有提供此属性,因此能够生成密钥。

我搜索了CKA_LABEL的示例程序,但未能在C中找到任何可靠的示例。我发现了几个Java程序,它们使用CKA_VALUE_LEN而不是CKA_VALUE。我不确定这是否行得通。

这是文档中给出的代码段。大多数网站仅以此代码段为例。没有为数组值指定任何内容。

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)}
};

1 个答案:

答案 0 :(得分:2)

CKA_VALUE是密钥的实际值。当您告诉HSM生成密钥时,它将根据您在密钥模板中传递的属性在硬件上为您生成密钥,并设置在CKA_VALUE中生成的值。但是,此属性无法读取/提取,也不能在生成密钥时进行设置,因为HSM不允许您(直接)从软件注入密钥,也不允许您(直接)从HSM提取密钥。 / p>

CKA_VALUE_LEN是可以告诉HSM生成的密钥的长度。 AES密钥的长度可以为128、192或256位。根据您想要的密钥大小,您可以将CKA_VALUE_LEN设置为16、24或32(密钥大小为字节)。