使用PKCS#11 API生成AWS CloudHSM AES-256位密钥

时间:2018-05-13 07:35:13

标签: amazon-web-services pkcs#11 hsm

我正在使用PKCS#11 API在AWS CloudHSM中生成AES-256位密钥。

我相信我可以使用(C_GenerateKey)成功生成密钥,但是,当我尝试打印密钥的值时,在第一次调用C_GetAttributeValue时出现“CKR_ATTRIBUTE_TYPE_INVALID”错误。

我在生成密钥时在密钥上设置了CKA_EXTRACTABLE选项。 这是代码片段 -

 set_attr(keyTemplate[n_attr], CKA_EXTRACTABLE, &_true, sizeof(_true));

 set_ATTR(keyTemplate[n_attr], CKA_VALUE_LEN, &key_length, sizeof(key_length));

 rv = pfunc11->C_GenerateKey(session, &mechanism, keyTemplate, n_attr, &hSecretKey);
 if (rv != CKR_OK)
 {
    printf("ERROR: rv=0x%08X: C_GenerateKey failed\n", (unsigned int)rv);
    return false;
 }
 else
 {
    rv = pfunc11->C_GetAttributeValue(session, hSecretKey, dataTemplate, 1);
    if(rv != CKR_OK)
    {
     printf("ERROR: rv=0x%08X: C_GetAttributeValue failed\n", (unsigned int)rv);
     return false;
    }

如果我将“CKA_SENSITIVE”选项设置为false,则在生成密钥期间出现错误(CKR_TEMPLATE_INCONSISTENT),表示模板无效。

如何在我的应用程序中打印AES密钥的值?

1 个答案:

答案 0 :(得分:2)

在CloudHSM v2客户端库的v 1.1.1中,fixed处理了CKA_SENSITIVE属性。

您应该认真考虑为什么要获得AES密钥的纯文本值。首先使用HSM的原因是为了防止暴露原始密钥数据。如果您只是测试,则考虑在软件中创建密钥,然后将其导入到HSM中。您还可以使用密钥包装来解开AES密钥。