-2

我想将 iaik.pkcs.pkcs11.objects.GenericSecretKey(AES) 转换为 java.security 密钥。

4

1 回答 1

0

这可能是不可能的,但让我们仍然探索一些可能性。

请注意,是否完全支持这些可能性取决于令牌类型和软件/提供商,但您当然可以尝试。


直接使用引用可能是不可能的,因为您必须能够使用 HSM 操作。因此,即使您可以将密钥嵌入到SecretKey对象中,您仍然无法使用它。您将需要提供者特定的 API 来实现这一目标。嘿,也许它存在。


PKCS#11 对象(包括密钥)通常存储在 HSM 或其他安全令牌上。密钥通常不能轻易提取。

您有时还可以通过将属性设置CKA_EXTRACTABLE为 true(并CKA_SENSITIVE在生成期间设置为 false)来使密钥可提取。这当然也会对密钥的安全性产生负面影响。如果您可以让它工作(取决于 PKCS# 11 令牌实现)那么您应该能够将键值复制到内存中。

您也可以使用您已知的包装密钥来包装密钥,然后 HSM 以这种方式提取密钥

SecretKeySpec一旦您能够获得将其转换为SecretKey.


通常,在本地生成密钥更容易(在需要和可用的情况下,使用 HSM 的令牌随机数生成器)。然后您可以导入它们并CKA_SENSITIVEtrue之后设置。当然,如果您这样做,CKA_ALWAYS_SENSITIVE将保持设置为falseCKA_NEVER_EXTRACTABLE并将保持设置为)。true


到目前为止,最简单和最安全的方法是使用提供的提供者生成密钥KeyGenerator,放弃GenericSecretKey问题中的方法(如果可用)。然而,这回避了这个问题。

于 2019-05-18T00:48:30.553 回答