我需要将 RSAPrivateKey 包装在 HSM 中,以便可以将其发送到 Microsoft CA 进行密钥存档,但我不确定要采取什么方法。
问题是 Microsoft RSA 密钥格式是专有的,似乎不受 pkcs11 或我公司使用的 nCipher HSM 的支持。
http://msdn.microsoft.com/en-us/library/cc250013.aspx
如果这只是一个 RSAPrivateKey,则可以直接在 HSM 中生成密钥对,在 HSM 中加载包装密钥,包装 RSAPrivateKey 并提取包装的密钥字节。显然,由于不支持这种密钥 blob 格式,我需要采取不同的方法。
我的第一个想法是扩展 RSAPrivateKey 并覆盖 getEncoded() 方法以返回此专有密钥格式。我正在使用 IAIK pkcs11 包装器,它为 Java 中的 pkcs11 提供高级 API,并且支持创建供应商定义的密钥类型。但是,供应商定义的密钥接口似乎只是为了方便扩展客户端代码中的内置密钥类型而存在,实际上并不允许修改 HSM 中的密钥编码。
第二个想法是使用 pkcs11 数据对象并将其简单地视为密钥 blob,然后使用包装密钥对其进行加密。这里同样的问题是,为了将私钥字节复制到数据对象中,似乎我需要将私钥字节提取到应用程序代码中,然后从那里创建数据对象,这违背了拥有的全部意义HSM 中的密钥。
我正在寻找这些方法的替代品,或者我忽略了 pkcs11 中的某些功能可以让我这样做?任何见解将不胜感激。