SM9密钥生成服务

背景

国密算法标准中的SM9算法是一种基于身份的密码系统,用户的私钥是由密钥生成中心根据用户的ID为用户生成的,而用户的公钥就是用户的公开ID。以SM9算法替代数字证书,可以大大降低电子邮件加密等应用场景中的密钥管理开销。和传统的基于数字证书的PKI体系类似,采用SM9算法的体系中也需要一个类似CA的中心,系统中的用户需要向中心证实自己的身份,并获取和自己身份ID相绑定的私钥,在SM9系统中这个中心称为PKG (Private Key Generator)。

SM9主密钥生成服务

包含如下功能:

  1. 支持SM9主密钥和公开参数生成
  2. 支持SM9标识密钥的生成
  3. 支持基于SM3/SM4/SM9的PKCS#7格式密码消息的封装和解封
  4. 支持基于SM3/SM4/SM9的S/MIME格式加密邮件的封装和解封
  5. 支持SDF接口的硬件安全模块

SM9标识密钥生成服务

SM9密钥生成服务是GmSSL为用户提供的基于Web的PKG在线服务,用户通过自己的电子邮件地址进行认证,通过认证后,GmSSL SM9密钥生成服务将用户的邮件地址作为ID,生成对应的私钥并发放给用户。通过SM9在线服务获得密钥的用户之间可以进行基于SM9算法的安全通信。

申请流程

用户只要拥有一个有效的电子邮件地址(为了防止恶意用户攻击暂时不向gmail、qq等免费邮件地址开放),就可以通过浏览器申请SM9私钥。首先,用户在注册页面提供自己的电子邮件地址和私钥加密口令,注意用户必须记住自己的私钥加密口令。稍后服务器会给用户的邮件地址发送一封注册邮件,这个邮件中包含一个链接,用户点击链接可跳转至SM9私钥下载页面,在该页面用户可以下载自己的SM9私钥,注意,这里的私钥是以之前提供的口令加密的。

部署

密钥生成服务器部署在北京大学信息安全实验室机房内独立服务器上,没有部署在云环境上。

SM9公共参数证书

SM9公共参数证书是由CA签发的满足X.509规范的数字证书。证书主体(Subject)的公钥类型为SM9公共参数(主公钥),CommonName为使用该SM9公共参数的安全域标。SM9公共参数证书的签发方是采用SM2/RSA签名算法的常规CA。在SM9系统中,如果通信方之间采用不同的公共参数,可以通过SM9公共参数证书向对方安全传输己方的公共参数。

SM9密钥标识

在X.509证书中,主体DN名是由一系列字段构成的,每个字段包含一个OID(如C/ST/CN)的类型和一个ASN.1 STRING的值构成。SM9体系中密钥标识类似于X.509证书中主体(Subject)的CommonName,因此SM9中的密钥标只采用一个单一的ASN.1 STRING类型来容纳该名字。

由于IBE体系中不支持X.509证书的有效期字段,在一些IBE文献中建议在IBE标识中加入有效期字段,在GmSSL中,不支持在SM9密钥标识中加入有效期,建议应用通限制公共参数的有效期来解决这个问题。

安全性保证及免责声明

首先,SM9密钥生成服务应仅用于SM9功能测试,GmSSL项目不提供任何安全性承诺。

TODO

  1. SM9主密钥数据类型需要添加版本号,算法类型可能需要修改一下。
  2. 提供SM9的加密和验签服务
  3. 提供SM9的签名服务的验证签名服务
  4. 提供SM9的ASN.1文本,我们就不参考人家的实现了,反正也没有人实现。
  5. SM9的参数