2014-10-09 100 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這樣您可以更清楚地瞭解其會話管理並更有效地瞭解資源使用情況。

    相關問題