JCA/JCE 和 PKCS#11 如何协同工作?

2022-09-04 00:57:16

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

您能否澄清以下问题:

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

答案 1
  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,因为它附带了一个符合加密服务提供程序条件的本机库。
    它支持PKCS#11,因为它带有一个提供C PKCS#11 API的本机库。

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

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


答案 2

推荐