我想使用HSM(硬件安全模块)来创建XML文件的签名。我做了一些研究,但现在有点困惑。
您能否澄清这些问题:
最佳答案
密钥句柄(在JCE,PKCS#11或大多数其他加密API中)只是一个引用,使您可以使用密钥而无需查看其实际值。很好:您可以将密钥永久存储在安全的地方(例如HSM),并确保没有人能够复制和使用它-如果密钥是应用程序空间,则可能会发生这种情况。但是,与物理保险箱不同,您仍然可以执行加密操作,而不会产生任何密钥泄漏的安全风险。
PKCS#11是用于加密令牌的C API。令牌是提供此类API描述的服务的任何设备或程序的PKCS#11抽象。 API定义了您可以使用PKCS#11令牌内的对象执行哪些操作:某些对象不敏感,可以将其提取(例如,公钥);其他一些则很敏感,只能通过手柄使用。
如果您有支持签名的对象的句柄,则可以使用C函数C_Sign要求令牌对应用程序提供的某些数据进行身份验证。密钥不会离开HSM。
从某种意义上说,您的HSM支持JCE,因为它带有一个符合Cryptographic Service Provider的本机库。
它从提供C PKCS#11 API的本机库附带的意义上说,它支持PKCS#11。
确实,PKCS#11是一个标准。但是它不能直接用于C以外的语言。您需要一个映射层,将其转换为与您的语言兼容的某种东西。可以将PKCS#11库(及其抽象的物理令牌)映射到a JCE provider。
但是,JCE提供程序可能与PKCS#11无关。
关于java - JCA/JCE和PKCS#11如何一起工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12937138/