【问题标题】:What is CKA_VALUE used in AES secret key generation template?AES 密钥生成模板中使用的 CKA_VALUE 是什么?
【发布时间】:2019-05-20 22:30:27
【问题描述】:

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

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

这是文档中给出的sn -p。大多数网站仅以这个 sn-p 为例。没有为数组值指定任何内容。

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

【问题讨论】:

  • 我认为如果您没有传递 CKA_VALUE 则会出现错误?有什么错误?我想不出 DES3 不需要的 AES-256 需要什么 - 这里的密钥只是随机字节,不是吗?也就是说,这里的哪个参数指定了 256 位?
  • 这里的哪个参数指定了 256 位 >> 即使我也有疑问并尝试指定 CKA_VALUE_LEN。并且错误消失了。 @always_a_rookie_to_learn 指出的内容现在对我来说很有意义!

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


【解决方案1】:

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

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

【讨论】:

  • 感谢@always_a_rookie_to_learn。我试过了,并且能够生成一个密钥。
  • @Chen 很高兴它有帮助。如果解决方案解决了您的问题,您可以将答案标记为已接受,这将有助于其他遇到相同问题的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多