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

您能否澄清这些问题:

  • JCE中的密钥句柄是什么意思?我已经读过它,它只是一个句柄,并且密钥存储在其他位置。怎么可能?据我了解,我要么将密钥加载到内存中并使用它,要么签名完全由HSM完成,而我只得到结果,对吗?
  • PKCS#11标准是否定义了一种方法,以便在HSM中生成签名?我已经读过关于令牌的信息,但是我不确定要签名。
  • 我的HSM的功能列表分别声明了JCE和PKCS#11。那是什么意思?
  • 我以为PKCS#11是一个标准,JCE定义了使用该标准的类。 JCE是否指定自己的协议?
  • 最佳答案

  • JCE中的密钥句柄是什么意思?
    密钥句柄(在JCE,PKCS#11或大多数其他加密API中)只是一个引用,使您可以使用密钥而无需查看其实际值。很好:您可以将密钥永久存储在安全的地方(例如HSM),并确保没有人能够复制和使用它-如果密钥是应用程序空间,则可能会发生这种情况。但是,与物理保险箱不同,您仍然可以执行加密操作,而不会产生任何密钥泄漏的安全风险。
  • PKCS#11标准是否定义了一种在HSM中生成签名的方式?
    PKCS#11是用于加密令牌的C API。令牌是提供此类API描述的服务的任何设备或程序的PKCS#11抽象。 API定义了您可以使用PKCS#11令牌内的对象执行哪些操作:某些对象不敏感,可以将其提取(例如,公钥);其他一些则很敏感,只能通过手柄使用。
    如果您有支持签名的对象的句柄,则可以使用C函数C_Sign要求令牌对应用程序提供的某些数据进行身份验证。密钥不会离开HSM。
  • 我的HSM的功能列表分别声明了JCE和PKCS#11。那是什么意思?
    从某种意义上说,您的HSM支持JCE,因为它带有一个符合Cryptographic Service Provider的本机库。
    它从提供C PKCS#11 API的本机库附带的意义上说,它支持PKCS#11。
  • 我认为PKCS#11是一个标准,并且JCE定义了使用该标准的类。 JCE是否指定自己的协议?
    确实,PKCS#11是一个标准。但是它不能直接用于C以外的语言。您需要一个映射层,将其转换为与您的语言兼容的某种东西。可以将PKCS#11库(及其抽象的物理令牌)映射到a JCE provider

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

    关于java - JCA/JCE和PKCS#11如何一起工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12937138/

    10-10 22:36