1

我需要使用 nCipher HSM 生成 AES256 密钥,然后将它们导出(写入文件)到外部系统中。

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

谢谢,

吠陀

4

1 回答 1

3

Vedat,nCipherKM 提供者在它连接的硬件安全模块上生成实际的密钥材料。HSM 的设计目的是不让您拥有实际的密钥位:保守这些秘密是它的生活目的。

第二个序列将从 HSM 的随机生成器中获取随机数据,该生成器是符合 NIST 特别出版物 800-90A 的确定性随机位生成器,由基于硬件的熵播种。这与 HSM 在内部用于生成密钥的随机材料类型相同。由于您似乎对生成的密钥没有任何 HSM 保护要求,因此您应该很高兴。

于 2015-08-14T05:12:28.150 回答