nCipher HSM重新定位JCE密钥

时间:2016-10-13 16:50:38

标签: jce pkcs#11 hsm

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

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

最后,JCE键显示为"启用恢复"在它们上执行nfkminfo时。这是否意味着它们是可出口的,或者这里的恢复意味着什么呢?

1 个答案:

答案 0 :(得分:7)

免责声明:我为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的整个想法是保护密钥位而不是让它们拥有它们,Export不是默认值之一。当您创建密钥文件时,未将其烘焙到密钥文件中,您无法通过重新定位密钥来获取密钥文件。

如果要使用JCE,可以做的一件事是使用不同的Provider生成密钥,然后使用nCipherKM Provider将其存储在 nCipher.sworld KeyStore中:这将导入密钥进入安全世界(如果您的世界允许)并将其保存为key_jcecsp_ *文件。然而,这与密钥安全无关,因此从HSM的角度来看,不建议这样做。您可以做的另一件事是下拉到本机nCore API,使用您需要的ACL条目生成密钥,然后将其多态化为JCE密钥对象并将其保存在HSM支持的KeyStore中。使用您创建的按键上的ACL,您可以根据需要多次拍摄自己的脚。多态转换的记录很差:请求Thales支持,他们可以指导您。

最后,恢复功能意味着除了可能受操作员卡集保护的工作密钥blob之外,密钥文件还具有恢复Blob。如果操作员卡丢失,则可以使用rocs实用程序(替换操作员卡集)通过安全世界的管理员卡集打开恢复Blob,该实用程序将在新的OCS下写入新的密钥文件。不,这并不意味着钥匙是可出口的。它只是意味着您可以防止丢失OCS。当然,失去ACS是一个非首发,因为这是你的信任之根。