【问题标题】:how to switch to CKM_AES_KEY_WRAP_PAD during key wrapping in SOFTHSM2 using JAVA PKCS11 IAIK如何在 SOFTHSM2 中使用 JAVA PKCS11 IAIK 进行密钥包装期间切换到 CKM_AES_KEY_WRAP_PAD
【发布时间】:2019-05-09 09:16:49
【问题描述】:

我正在使用 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/229https://github.com/opendnssec/SoftHSMv2/issues/405

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

初始问题:我想在 keywrap 期间将机制从 CKM_AES_CBC_PAD 切换到 CKM_AES_KEY_WRAP


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

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

【问题讨论】:

  • “等距键”是不是特别强的键?
  • 您能发布您的密钥生成和包装代码吗?目前我们甚至无法判断您是否正确使用了Cipher.init
  • @MaartenBodewes 谢谢,我们在内部解决了它,但它是一个相当大的过程,涉及一些低级别的访问,因为不支持的包装/解包方法和找到正确的机制也是一个痛苦。

标签: java cryptography aes pkcs#11 softhsm


【解决方案1】:

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

mechanism = CKM_AES_KEY_WRAP_PAD;
session.wrapKey(mechanism, secretKetObject, privateKeyObject);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多