2015-08-13 52 views
1

我需要使用nCipher的HSM生成AES256鍵,然後出口(寫入文件),它們的外部系統。產生nCipher的導出的AES密鑰與JCE

KeyGenerator kg = KeyGenerator.getInstance("AES", "nCipherKM"); 
kg.init(256); 
SecretKey key = kg.generateKey(); 
//No problem until here 
byte[] raw = key.getEncoded(); 

引發安全異常。不會放棄鑰匙。所以我用下面的方法。兩個密鑰是以同樣的方式生成的嗎?有沒有更好的方法來完成我所需要的?

SecureRandom random = SecureRandom.getInstance("RNG", "nCipherKM"); 
byte[] rand = new byte[32]; 
random.nextBytes(rand); 
SecretKey key = new SecretKeySpec(rand, "AES"); 
byte[] raw = key.getEncoded(); 

謝謝,

Vedat

回答

1

Vedat,所述nCipherKM提供商上硬件安全模塊(一個或多個)它連接到生成實際密鑰材料。該HSM的設計不會讓你有實際的鍵位:保留那些祕密是其在生活的目的。

第二序列將獲得從HSM的隨機生成器,這是一個NIST特刊800-90A兼容確定性隨機位發生器通過基於硬件的熵接種的隨機數據。這是相同的類型的隨機材料的HSM在內部使用,以產生密鑰。既然你似乎並沒有對所產生的密鑰的任何HSM保護的要求,你要善於去。