相关概念
国密证书
- 国密的双证书体系,将证书按照使用目的的不同划分为加密证书和签名证书两种,也就是两对公私钥,二者本质一致,均为SM2密钥对,区别仅体现在用法
- 国密CA体系中,加密密钥对由CA产生,签名密钥对由用户自己产生,那么加密密钥涉及到的 私钥是如何通过安全的方式由CA传递到用户侧呢?使用数字信封的机理;
- 从道理上来说两个密钥具有不同的属性,逻辑上应该分开处理。其实最主要的原因是国家要保证必要的时候有能力对某些通讯进行监控,如果采用单证书,除了自己谁也无法解密(理论上如此),不利于国家安全。因此某些国家法律规定使用双证书。如果拥有加密证书的私钥,可以进行实时监控。
加密证书和私钥的生成过程
- 用户产生签名密钥对,生成签名证书的请求(p10数据),发送签名证书给CA
- CA验证用户的签名密钥对,产生加密证书和private.data(加密私钥的密文)
- private.data的生成过程
- CA生成对称密钥,使用用户的签名公钥加密对称密钥,生成对称秘钥的密文
- CA使用对称密钥对称加密 与加密证书所对应的私钥,输出加密私钥的密文
- CA将加密证书、对称密钥密文和加密私钥的密文 返还给 用户,其中一般将对称密钥密文和加密私钥的密文混合在一起,形成单一文件,统称为P10数据
- 用户使用签名私钥解密对称密钥的密文得到对称密钥
- 用户使用对称密钥解密加密私钥密文,得到加密私钥的明文
国标文档
- GMSSL - 国密SSL实验室
- 智能密码钥匙密码应用接口规范
- 智能密码钥匙密码应用接口数据格式规范
相关函数接口
- 省去了前提函数,比如连接设备、创建应用、创建容器等
- 受保护的加密密钥对??研究
两种思路(未确定可行性)
- 核心问题:私钥的存储格式?key?
- 当时使用吉大正元的PKI进行证书导入的时候,一键导入过程中USBKey和PKI二者的工作是什么呢?结合SKF接口来看,很有可能USBKey首先使用生成ECC签名密钥对(GenECCKeyPair),然后PKI侧生成签名证书,USBKey使用(ImportCertificate)先导入签名证书;然后PKI再次生成加密私钥和加密证书,USBKey使用导入ECC加密密钥对(ImportECCKeyPair),再使用(ImportCertificate)导入加密证书。
- 但是PKI对外是不提供私钥的导出,私钥只能是以private.data的密文形式存在
- 或者,加上生成private.data以及解密private.data推导加密私钥这一步,但是感觉这样比较繁琐
吉大正元(可行性大)
- 本地使用openssl生成一个sm2的私钥,并生成req请求(p10数据),将其作为申请书内容,进行证书的下载_MY CUP OF TEA的博客-CSDN博客_openssl生成p10
- 按照 加密证书和私钥的生成过程 的完整流程严格执行,得到所有的文件
- 签名私钥 签名公钥 签名证书
- 加密私钥 加密公钥 加密证书
偷奸取巧(可行性低)
- 本地生成CA,分别生成签名和加密两套提下的相关文件,即私钥、公钥、证书等
- 在申请证书的阶段,将相关字段设置成一致的,是否从逻辑上将其划分为签名和加密?
- 然后USBKey直接导入两对私钥和证书
- **感觉不可行,毕竟从skf接口来看,签名私钥只能由USBKey内部产生,加密私钥和加密证书是通过和PKI进行协商生成的(欧待解决)
自我理解(存疑)
- 签名证书是需要PKI里面的CA生成的,生成时需要填入的参数是基于客户端生成的P10申请
- 意味着,签名 和 加密 两组密钥均对应同一个 P10申请
- 生成ECC签名密钥对(GenECCKeyPair);导入ECC加密密钥对(ImportECCKeyPair);分别导入不同类型(签名/加密)的证书(ImportCertificate);但是不知道思路是否正确;需要进一步确认:1,证书导入,除了导入证书,还存储其余的数据是什么?也就是私钥的存储格式,以key 还是 private.data 的形式存储;感觉是key,毕竟签名阶段没有涉及到private.data,private.data只是对传输加密私钥的保护
参考链接
- USBKEY全解析---证书导入(java)_liujoi的博客-CSDN博客_usbkey证书
- 国密gmtls协议-双证书体系的服务端和客户端通信代码_MY CUP OF TEA的博客-CSDN博客_gmtls