JCE在Keysafe / nCipher中生成密钥

时间:2015-08-13 09:47:29

标签: encryption-symmetric jce hsm

我遵循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

我有三个问题:

  1. 虽然我给了一个很好的别名,比如“MyAESKey”,但是键出现了一些长长的oid。如何在KeySafe中以正确的名称显示它?
  2. 为什么我得到2个而不是1个?哪一个是关键?
  3. “keystore.dat”的意义是什么?为什么我不直接与C:\ ProgramData \ nCipher \ Key Management Data \ local?下的密钥文件连接?
  4. 谢谢!

    Vedat

1 个答案:

答案 0 :(得分:2)

Vedat,

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

密钥管理Data \ local中的文件完全被JCE KeyStore API实现抽象掉:在KeyStore中引用密钥所需的只是它的文件:示例中的keystore.dat。