java - 如何使用 JCA/JCE 和 HSM 派生 key

标签 java jce hsm

我在 HSM 中有一个主 key ,我想用给定的多样化器派生它。 我对 JCA/JCE 很陌生,对 KeyGenerator、SecretKeyFactory 有点迷茫……尤其是因为所有参数都是字符串。 我想使用 AES 或 HmacSha1。 看来我需要使用 SecretKeyFactory,并提供 KeySpecs。但是哪种类型的 KeySpecs?

(我看过关于该主题的帖子,但我似乎没有使用 HSM。)

谢谢。

最佳答案

您可以使用以下方式导出 key :

要从 JCA/JCE API 使用 HSM,您需要将相应的提供程序添加到 JCA/JCE API,然后指定 provider 参数以请求该特定提供程序实现。

例如:

int slot = 0;
Provider provider = new au.com.safenet.crypto.provider.SAFENETProvider(slot);
Security.addProvider(provider);
final String PROVIDER = provider.getName(); // "SAFENET", "SAFENET.1", ...

KeyGenerator keyGen = KeyGenerator.getInstance("DESede", PROVIDER);
Key baseKey = keyGen.generateKey();

Cipher desCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding", PROVIDER);
desCipher.init(Cipher.ENCRYPT_MODE, baseKey);

byte[] derived = desCipher.doFinal("diversification data".getBytes());

请注意,如果您需要经常进行 key 派生,您可以考虑使用您的提供商的 PCKS#11 Java 包装器(例如来自 SafeNet 的 jcprov)或其他API,以便您可以更明确地了解其 session 管理并更有效地使用资源。

关于java - 如何使用 JCA/JCE 和 HSM 派生 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282162/

相关文章:

java - HSM 如何干预终端交易的加密?

java - 将消息记录到 JUnit 控制台

java - Sunpkcs11 提供商是否与 AWS CloudHSM 兼容?

translation - 泰雷兹 HSM 上的 PIN block 翻译不起作用

java - local_policy.jar 和 US_export_policy.jar 与 Unlimited Strength Vs Default 不同。

java - NoSuchAlgorithmException : Algorithm HmacSHA1 not available

c - 在 PKCS#11 中使用 key 对象句柄

java - Eclipse 知道项目链接到哪里

java - 导出项目到jar时出现"java.lang.IllegalStateException: Toolkit not initialized"

java - setUp 未初始化字段