我需要使用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();
谢谢,
Vedat
答案 0 :(得分:2)
Vedat,nCipherKM Provider在其连接的硬件安全模块上生成实际密钥材料。 HSM旨在让您不具备实际的密钥位:保持这些秘密是其生命的目的。
第二个序列将从HSM的随机生成器获得随机数据,该随机生成器是由基于硬件的熵接种的NIST特殊出版物800-90A兼容的确定性随机比特生成器。这是HSM在内部用于生成密钥的相同类型的随机材料。由于您似乎对结果密钥没有任何HSM保护要求,因此您应该很高兴。