nCipher HSM 重定向 JCE 密钥

nCipher HSM retarget JCE key

是否可以 "retarget" 通过 ncipher JCE API 生成的密钥到 pkcs11?我知道您可以通过 generatekey 命令重新定位,但我不知道如何对现有的 JCE 密钥执行此操作。第一个提示是 "source application" 和 options don't seem to include JCE。它是否支持此处列出的选项之外的其他选项,还是我应该寻找一种不同的重定向方式?

这里的最终目标是导出通过 nCipher 的 JCE API 生成的几个密钥(非对称和对称)(是的,我知道 HSM 的工作是保护密钥,导出通常不是一个好主意,但这是这里的要求)。我们能够导出通过 PKCS11 接口生成的密钥,但不能导出通过 JCE 生成的密钥,因此我们的想法是,如果我们可以将其从 JCE 重定向到 PKCS11,我们也可以导出这些密钥。如果有其他方法可以做到这一点,我们也愿意接受。

最后,JCE 密钥在执行 nfkminfo 时显示为 "recovery enabled"。这是否意味着它们是可导出的,或者这里的恢复有其他含义吗?

免责声明:我在 Thales e-Security 工作,但不代表公司发言。

是的,您可以将 jcecsp 密钥重定向到 pkcs11。如果您的 kmdata/local 中有任何 jcecsp 密钥,/opt/nfast/bin/generatekey 将提供 jcecsp 作为源选项。如果您没有类似的密钥,它会悄悄地从源列表中忽略该选项。 但是, 此重定向过程可能不会按照您的想法进行。所有重定向所做的只是更改应用程序类型和潜在的关联元数据:它不会更改密钥的基本功能,因为这些功能在生成时被烘焙到受保护的密钥 blob 中并且无法更改。

安全世界使用 nShield 密钥 ACL 来限制密钥的功能(签名、验证、加密、解密、包装、包装等)。 PKCS#11 直接从密钥 ACL 中提取其参数(CKA_SIGN 等),当通过 API 生成密钥时,保存在密钥 blob 中的 ACL 直接从密钥中的参数派生模板。如果您将 CKA_SENSITIVE 设置为 FALSE,并且您的 Security World 允许它,您可以生成并保存一个可导出密钥。 JCE 没有那么复杂:它根本没有密钥功能的概念,因此提供者必须使用密钥猜测用户的意图,并且它默认为一个相当大的集合。但是,由于您指出 HSM 的整个想法是保护密钥位而不是让您拥有它们,因此导出不是默认设置之一。当您创建密钥文件时,没有包含在密钥文件中的内容,您无法通过重新定位密钥来获得。

如果您想使用 JCE,您可以做的一件事是使用不同的 Provider 生成密钥,然后使用 nCipherKM 将其存储在 nCipher.sworld KeyStore 中提供商:这会将密钥导入安全世界(如果您的世界允许)并将其保存为 key_jcecsp_* 文件。然而,这与密钥安全无关,因此从 HSM 的角度来看,不推荐这样做。您可以做的另一件事是下拉到本机 nCore API,使用您需要的 ACL 条目生成密钥,然后将其变形为 JCE 密钥对象并将其保存在 HSM 支持的密钥库中。使用您创建的密钥上的 ACL,您可以多次搬起石头砸自己的脚。多态性的记录非常少:询问 Thales Support,他们可以指导您。

最后,Recovery能力意味着除了可以被Operator Card Set保护的Working Key blob之外,密钥文件还有一个Recovery Blob。这是为了防止操作员卡组丢失:安全世界的管理员卡组可以使用 rocs 实用程序(替换操作员卡组)打开恢复 Blob,这将在新的 OCS 下写入新的密钥文件。不,这并不意味着密钥可以导出。这只是意味着您不会丢失 OCS。当然,失去 ACS 是不可能的,因为那是您的信任根。