我遵循nCipher示例在HSM中存储symmetric键并从java程序中使用。
KeyGenerator kg = KeyGenerator.getInstance("AES", "nCipherKM");
SecretKey k = kg.generateKey();
ks.setKeyEntry("MyAESKey", k, null, null);
然后我调用以下方法将密钥保存在安全世界中。我被告知我应该能够在KeySafe中看到它们。
FileOutputStream out = new FileOutputStream("keystore.dat");
ks.store(out, null);
out.close();
我最终在KeySafe中使用了两个键而不是一个键,并且键名与我使用的别名没有任何关系。
key_jcecsp_4912eadb0f19581317f02ce427b5f1ca3c872ef3密钥-bb6328f32b6fbcae5787dde37640b37eb02ed97e
和
key_jcecsp_4912eadb0f19581317f02ce427b5f1ca3c872ef3
我有三个问题:
谢谢!
Vedat
答案 0 :(得分:2)
Vedat,
KeySafe不了解JCE(这很具有讽刺意味,因为它本身就是一个Java程序)。它向您显示安全世界中的基础对象。您将获得一个包含密钥数据(由HSM主密钥加密)和明文别名(“MyAESKey”)的实际密钥文件,以及一个代表KeyStore的文件。如果使用文本编辑器打开keystore.dat文件,您将看到它包含一个标识符,该标识符显示在其他文件的文件名中:这就是软件将各个事物联系在一起的方式。
密钥管理Data \ local中的文件完全被JCE KeyStore API实现抽象掉:在KeyStore中引用密钥所需的只是它的文件:示例中的keystore.dat。