14

我想使用 HSM(硬件安全模块)来创建 XML 文件的签名。不过,我做了一些研究,现在有点困惑。

您能否澄清这些问题:

  1. JCE 中的密钥句柄是什么意思?我已经读过它,它只是一个句柄,密钥存储在其他地方。怎么可能?据我了解,我要么将密钥加载到内存中并使用它,要么签名完全由 HSM 完成,我只得到结果,对吧?
  2. PKCS#11 标准是否定义了一种在 HSM 中生成签名的方式?我读过关于tokens的文章,但我不确定签名。
  3. 我的 HSM 的功能列表分别声明了 JCE 和 PKCS#11。这意味着什么?
  4. 我认为 PKCS#11 是一个标准,而 JCE 定义了使用该标准的类。JCE 是否指定了自己的协议?
4

1 回答 1

25
  1. JCE 中的密钥句柄是什么意思?
    密钥句柄(在 JCE、PKCS#11 或大多数其他加密 API 中)只是一个参考,使您能够使用密钥而无需查看其实际值。这很好:您可以将密钥永久存储在安全的地方(例如 HSM),并确保没有人能够复制它并带走它 - 如果密钥是应用程序空间,则可能会发生这种情况。但是,与物理保险箱不同的是,您仍然可以执行加密操作,而不会冒任何密钥泄漏的安全风险。

  2. PKCS#11 标准是否定义了一种在 HSM 中生成签名的方式?
    PKCS#11 是用于加密令牌的 C API。令牌是提供此类 API 描述的服务的任何设备或程序的 PKCS#11 抽象。API 定义了您可以使用 PKCS#11 令牌内的对象执行哪些操作:一些对象是非敏感的,可以提取(例如公钥);其他一些是敏感的,只能通过手柄使用。
    如果您有一个支持签名的对象的句柄,您可以使用 C 函数C_Sign要求令牌对您的应用程序提供的某些数据进行身份验证。密钥不会离开 HSM。

  3. 我的 HSM 的功能列表分别声明了 JCE 和 PKCS#11。这意味着什么?
    您的 HSM 支持 JCE,因为它带有一个有资格作为 Cryptographic Service Provider的本机库。
    它支持 PKCS#11,因为它带有一个提供 C PKCS#11 API 的本机库。

  4. 我认为 PKCS#11 是一个标准,而 JCE 定义了使用该标准的类。JCE 是否指定了自己的协议?
    事实上 PKCS#11 是一个标准;但它不能直接被 C 以外的语言使用。您需要一个映射层,将其翻译成与您的语言兼容的东西。PKCS#11 库(及其抽象的物理令牌)可以映射到JCE 提供程序

但是,JCE 提供者可能与 PKCS#11 无关。

于 2012-10-17T18:12:00.310 回答