【问题标题】:How to upload public RSA key to HSM (using PKCS#11 library)?如何将公共 RSA 密钥上传到 HSM(使用 PKCS#11 库)?
【发布时间】:2014-03-13 20:37:30
【问题描述】:

我对使用 PKCS#11 库很陌生,所以也许有更多经验的人可以解决问题。

我想做以下事情:

  1. 上传到 HSM 现有的 RSA 公钥(在 PC 上生成)
  2. 稍后使用此上传的密钥来包装在 HSM 上生成的对称密钥。

我知道如何生成对称密钥,但是如何上传现有的 RSA 公钥?

这甚至可以使用 PKCS#11 库吗?

Wrap a secret key with a public key using PKCS#11 似乎有类似的问题,但它使用在 HSM 上生成的 RSA 密钥对。我需要自己将 RSA 公钥上传到 HSM。

【问题讨论】:

  • 是的,当然,这是可能的。您创建了一个“公钥”类型的新对象。详细信息取决于您尝试使用的 API。
  • 但是我们真的可以说任意 HSM 允许导入公钥吗?
  • API 是 PKCS#11。哪种 API 方法可以让您创建此公钥?生成密钥?
  • @EugeneMayevski'AlliedBits 您指的是哪个 API(如果有)?我不知道该怎么做。有标准的 API 调用吗?
  • @JonasJnz 你有没有想过这个问题?

标签: encryption cryptography pkcs#11 hsm


【解决方案1】:

我们可以使用 PKCS#11 的 C_CreateObject 函数将公钥导入 HSM。 这可以从

找到

RSA PKCS#11 函数 -> 对象管理函数 -> C_CreateObject

还有一个加载公钥的例子。但它需要token支持才能从cryptoki库中加载公钥。

CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hKey;
CK_OBJECT_CLASS keyClass = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_RSA;
CK_BYTE modulus[] = {... };
CK_BYTE exponent[] = {... };
CK_ATTRIBUTE keyTemplate[] = {
    {CKA_CLASS, &keyClass, sizeof(keyClass)}
    ,
    {CKA_KEY_TYPE, &keyType, sizeof(keyType)}
    ,
    {CKA_WRAP, &true, sizeof(true)}
    ,
    {CKA_MODULUS, modulus, sizeof(modulus)}
    ,
    {CKA_PUBLIC_EXPONENT, exponent, sizeof(exponent)}
};

CK_RV rv;

/* Create an RSA public key object */
rv = C_CreateObject(hSession, &keyTemplate, 5, &hKey);
if (rv == CKR_OK) {
.
.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2020-07-05
    • 2023-01-17
    • 2019-08-27
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多