2014-10-09 101 views
5

我在HSM中拥有主密钥,我想用给定的多元化器推导它。 我对JCA/JCE相当陌生,并且在KeyGenerator,SecretKeyFactory中丢失了一点......特别是因为所有参数都是字符串。 我想使用AES或HmacSha1。 看来我需要使用SecretKeyFactory,并提供一个KeySpecs。但是哪种类型的KeySpecs?如何使用JCA/JCE和HSM导出密钥

(我看到的这个话题后,但我似乎并没有被使用HSM)

感谢。

回答

2

可以使用导出密钥:(5 PKCS#)在Deriving a secret from a master key using JCE/JCA如所描述的或

  • 使用加密仿真C_Derive从PKCS#11作为PKCS11 deriveKey() and encrypt() returning different results for 3DES
  • 描述

    • 基于密码的推导

      要使用来自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(如jcprov来自SafeNet公司)或其他API这样您可以更清楚地了解其会话管理并更有效地了解资源使用情况。

    相关问题