我正在使用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/opendnssec/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中使用上述技术实现密钥包装的最佳方法是什么
答案 0 :(得分:1)
我们发现它不适用于Cipher界面,因为IAIK默认情况下尝试使用soft hsm不支持的方法。我们必须使用低级IAIK方法进行包装和展开。在低级方法中,您可以更改如下机制:
mechanism = CKM_AES_KEY_WRAP_PAD;
session.wrapKey(mechanism, secretKetObject, privateKeyObject);