1

我正在按照 nCipher 示例将对称密钥存储在 HSM 中并从 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-key-bb6328f32b6fbcae5787dde37640b37eb02ed97e

key_jcecsp_4912eadb0f19581317f02ce427b5f1ca3c872ef3

我有三个问题:

  1. 即使我给了一个很好的别名,例如“MyAESKey”,密钥也会以某种长的 oid 出现。如何让它在 KeySafe 中以正确的名称出现?
  2. 为什么我得到 2 个条目而不是 1 个?哪一个是关键?
  3. “keystore.dat”的意义是什么 - 为什么我不直接与 C:\ProgramData\nCipher\Key Management Data\local 下的密钥文件交互?

谢谢!

吠陀

4

1 回答 1

2

吠陀,

KeySafe 不知道 JCE(这很讽刺,因为它本身就是一个 Java 程序)。它向您展示了安全世界中的底层对象。您将获得一个实际的密钥文件,其中包含您的密钥数据(由 HSM 主密钥加密)和明文别名(“MyAESKey”),以及一个代表 KeyStore 的文件。如果您使用文本编辑器打开您的 keystore.dat 文件,您会看到它包含一个标识符,该标识符显示在其他文件的文件名中:这就是软件将事物联系在一起的方式。

Key Management Data\local 中的文件完全被 JCE KeyStore API 实现抽象出来:您需要在 KeyStore 中引用密钥的文件就是它的文件:在您的示例中为 keystore.dat。

于 2015-08-14T05:17:32.293 回答