【问题标题】:How to derive a key with JCA/JCE and with an HSM如何使用 JCA/JCE 和 HSM 派生密钥
【发布时间】:2014-10-09 15:20:53
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: java jce hsm


    【解决方案1】:

    您可以使用以下方法派生密钥:

    要从 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());
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多