我有一个简单的问题:一个加密的PKCS1 RSAPrivateKey可以导入到PKCS11兼容的安全模块中而不暴露客户机内存中的私钥吗?
我知道PKCS11明确提到PKCS8 8的PrivateKeyInfo是必需的私钥格式,以便通过C_UnwrapKey函数导入它。
任何帮助都行!
发布于 2014-02-19 21:37:20
在展开过程中,私钥是否在主机内存中公开完全取决于PKCS#11模块的实现。
RSA密钥通常用对称密钥(即AES)包装,不幸的是,许多带有普通智能卡的PKCS#11模块在软件中实现对称加密算法。在这种情况下,展开由两个步骤组成:
然而,也有一些PKCS#11实现(和设备)在硬件中实现对称加密算法,并且这些实现能够在不将私钥暴露到主机内存的情况下执行RSA密钥的展开。
您可以使用C_GetMechanismInfo()函数来确定您的PKCS#11模块是否在硬件中执行特定的算法。只需检查返回的CK_MECHANISM_INFO结构的“标志”成员是否存在CKF_HW标志。
编辑: PKCS#1到PKCS#8转换
据我所知,PKCS#11没有为PKCS#1密钥展开或转换指定任何标准方法。另外,上一次我与露娜SA一起工作时,文档中有一条声明说,它希望进口的关键材料采用PKCS#8格式。
您可以尝试在软件中将PKCS#1密钥转换为PKCS#8,但如果不将私钥解密到主机内存中,恐怕是不可能的。将未加密的PKCS#1密钥转换为PKCS#8密钥相当容易--您只需将PKCS#1 RSAPrivateKey序列插入PKCS#8 PrivateKeyInfo序列,指定版本,privateKeyAlgorithm即可完成。但是要转换加密的PKCS#1密钥(整个RSAPrivateKey序列是加密的),首先需要对其进行解密,将其转换为PKCS#8 PrivateKeyInfo序列,然后对PKCS#8 PrivateKeyInfo序列进行加密,将加密的PrivateKeyInfo插入EncryptedPrivateKeyInfo序列并指定encryptionAlgorithm。
发布于 2015-06-25 13:07:47
可以,停那儿吧!使用pkcs11 11-tools --keypairgen选项这样做。
例如
pkcs11-tool --module /usr/local/lib/opensc-pkcs11.so -l --pin 648219 --keypairgen --key-type rsa:1024 --id 10
见http://linux.die.net/man/1/pkcs11-tool https://github.com/OpenSC/OpenSC/wiki/SmartCardHSM
了解更多详细信息
https://stackoverflow.com/questions/21891330
复制相似问题