【问题标题】:Wrap a secret key with a public key using PKCS#11使用 PKCS#11 将密钥与公钥包裹起来
【发布时间】:2013-09-25 18:01:28
【问题描述】:

在我的 C 程序中,我使用函数 C_GenerateKeyPair 生成了一个公钥/私钥对和一个使用 C_GenerateKey 的敏感(秘密)密钥。目的是用公钥包装密钥,但是当我调用函数C_WrapKey 时,我收到错误CKR_KEY_TYPE_INCONSISTENT。如果我使用另一个带有 Wrap 和 Encrypt 属性的封装密钥,代码就会运行。 用于公钥的模板是 PKCS#11 文档中提出的模板:

CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hPublicKey, hPrivateKey;
CK_MECHANISM mechanism = {
   CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0
};
CK_ULONG modulusBits = 768;
CK_BYTE publicExponent[] = { 3 };
CK_BYTE id[] = {123};
CK_BBOOL true = CK_TRUE;
CK_ATTRIBUTE publicKeyTemplate[] = {
   {CKA_ENCRYPT, &true, sizeof(true)},
   {CKA_VERIFY, &true, sizeof(true)},
   {CKA_WRAP, &true, sizeof(true)},
   {CKA_MODULUS_BITS, &modulusBits, sizeof(modulusBits)},
   {CKA_PUBLIC_EXPONENT, publicExponent, sizeof(publicExponent)}
};

正确指定了 Wrap 和 Encrypt 属性,而对于要包装的密钥,我添加了属性 CKA_EXTRACTABLE。 提前感谢您的帮助。

【问题讨论】:

  • 简而言之,如何使用公钥包装密钥。
  • 您使用的是哪个 PKCS#11 令牌? RSA密钥的机制是什么?您是否尝试过删除 CKA_VERIFY 属性?也可能是您的令牌仅支持对称包装,而不支持非对称包装。
  • 我正在使用 SafeNet eToken。可以删除 CKA_VERIFY,但我再次遇到相同的错误。使用 CryptoAPI 执行非对称包装没有错误。
  • 哪个电子代币?你确定它支持 RSA 密钥包装吗?并非所有 PKCS#11 令牌都是一样的。这个似乎主要关注身份验证。

标签: cryptography pkcs#11


【解决方案1】:

错误 CKR_KEY_TYPE_INCONSISTENT 是由于函数 C_WrapKey 中使用的错误 CK_MECHANISM。如果我们想用 RSA 公钥封装一个秘钥,设置如下机制:

CK_MECHANISM dec_mec = {CKM_RSA_PKCS, NULL_PTR, 0};

【讨论】:

  • 我需要用一个秘密密钥包装一个私有 RSA 密钥,你能帮我吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 2014-03-13
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多