2

我正在使用 SoftHSM 在 Java 中生成等距键。目前,我需要使用 IAIK PKCS11 库 (JAVA) 中提供的 wrapKey 函数来包装私钥,我在cipher.getInstance(). 该应用程序抛出 CKR_MECHANISM_INVALID 并且网络上的所有现有信息似乎都没有给出关于如何解决这个问题的合适答案。

目前,这似乎与 IAIK 的机制有关,因为它目前正在使用 CKM_AES_CBC_PAD 算法进行密钥包装。

目前尚不清楚如何在 CKM_AES_CBC_PAD 和为 SoftHSM 的 github 页面上的问题创建的 github 问题中建议的问题之间切换,请参阅:https ://github.com/opendnssec/SoftHSMv2/issues/229和https://github.com/打开dnssec/SoftHSMv2/issues/405

有两件事很清楚,这是一个已知问题,作者建议使用 CKM_AES_KEY_WRAP、CKM_AES_KEY_WRAP_PAD、CKM_RSA_PKCS 或 CKM_RSA_PKCS_OAEP。但是,我无法使用建议的选项找到示例,并且经过数小时的图书馆挖掘后,我认为在这里询问更容易。

最初的问题:我想在密钥包装期间将机制从 CKM_AES_CBC_PAD 切换到 CKM_AES_KEY_WRAP


更新: 经过进一步调试,似乎问题可能比在机制之间切换更复杂。因此,我宁愿知道:

新问题:在 JAVA 中使用上述技术实现密钥包装的最佳方法是什么

4

1 回答 1

1

我们发现它不适用于 Cipher 接口,因为默认情况下 IAIK 会尝试使用软 hsm 不支持的方法。我们必须使用低级 IAIK 方法来包装和展开。在低级方法中,您可以像这样更改机制:

mechanism = CKM_AES_KEY_WRAP_PAD;
session.wrapKey(mechanism, secretKetObject, privateKeyObject);
于 2019-05-16T13:06:13.490 回答