繁体   English   中英

PKCS11 - 为 SHA256_HMAC 生成密钥

[英]PKCS11 - Generate key for SHA256_HMAC

我使用 Botan2 库来访问 SoftHSM2。 我设法生成了一些 AES/DES 密钥,但我想为 SHA256 HMAC 生成一个秘密。

我的代码(创建 session,登录并检测我的令牌后):

namespace p11 = Botan::PKCS11;
p11::SecretKeyProperties propsOtpGen(p11::KeyType::Sha256Hmac);
propsOtpGen.set_label("OTPGEN");
propsOtpGen.set_modifiable(false);
propsOtpGen.set_private(true);
propsOtpGen.set_token(true);
propsOtpGen.set_sensitive(true);
propsOtpGen.set_sign(true);
propsOtpGen.set_verify(true);
propsOtpGen.add_numeric(p11::AttributeType::ValueLen, 16UL);

p11::Mechanism m {static_cast<CK_MECHANISM_TYPE >::MechanismType::GenericSecretKeyGen), NULL_PTR, 0};
11::ObjectHandle keyHandle;
const std::vector<p11::Attribute> vec = propsOtpGen.attributes();

module->C_GenerateKey(session.handle(), &m, const_cast<CK_ATTRIBUTE*>(&vec[0]), vec.size(), &keyHandle);

抛出 0xd1 CKR_TEMPLATE_INCONSISTENT

我检查了 SofthHSM2 日志,但没有更多信息。

编辑

我有一些使用 nCipher 的其他示例实现,并且类似的态度与供应商机制CKM_NC_SHA256_HMAC_KEY_GEN一起使用。 但是,这个不在 pkcs11 标准中,因此我不能使用它。

在尝试了所有可以想象的调用之后,我仍然没有让它与 SHA256HMAC 密钥类型一起工作。 好像没有生成器。

我发现的 onlu 解决方法是使用 GenericSecret 密钥类型。

namespace p11 = Botan::PKCS11;
p11::SecretKeyProperties propsOtpGen(p11::KeyType::GenericSecret);
//...

这会生成密钥,稍后可以传递 object 句柄以使用适当的机制进行签名/验证

CK_MECHANISM mechanism{CKM_SHA256_HMAC, NULL_PTR, 0};
module->C_SignInit(session.handle(), &mechanism, keyHandle);
module->C_Sign(session.handle(), data, signature);

但是,在我使用的 SoftHSM2 下,上述操作仍然会失败,因为它不支持提供的密钥大小(可以从插槽的get_mechanism_info读取) - 支持的范围是 <32,512>。 因此最后的接触将是修补

propsOtpGen.add_numeric(p11::AttributeType::ValueLen, 32UL);

我尝试将不同的密钥大小应用回 Sha256Hmac 密钥类型,但似乎并没有解决问题。 (我假设模板不一致可能是由这个属性引起的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM