国密算法
国密是指经国家密码管理局批准可用于对不涉及国家秘密内容的信息进行加密的国产密码算法,即商用密码。为了保障商用密码的安全性,国家制定了一系列密码标准,其中包括了对称加密算法、椭圆曲线非对称加密算法和杂凑(哈希、散列)算法等。国密算法套件中包含的算法如所示。PKI中使用的主要是SM2、SM3和SM4算法。
国密算法套件总览表
算法 |
类型 |
功能 |
对应的国际算法 |
是否公开 |
---|---|---|---|---|
SM1 |
对称加密 |
分组密码算法 |
AES128 |
否,仅以IP核的形式存在于硬件中。 |
SM2 |
椭圆曲线非对称加密 |
ECC加解密,签名验签,密钥交换 |
RSA、ECC |
是,已纳入ISO国际标准。 |
SM3 |
哈希 |
商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成 |
SHA256 |
是,已纳入ISO国际标准。 |
SM4 |
分组加密 |
分组加解密,在加密算法和解密算法中保持一致,只是解密密钥是加密密钥的逆序 |
DES、AES |
是 |
SM7 |
分组加密 |
分组加解密 |
- |
否,仅以IP核的形式存在于硬件中。 |
SM9 |
基于身份标识的非对称加密 |
标识密码算法:签名校验,密钥交换,密钥封装与加解密 |
- |
是,已纳入ISO国际标准。 |
ZUC |
流加密 |
祖冲之序列密码算法,一种对称加密算法 |
EEA3 & EIA3 |
是 |
SSF33 |
分组加密 |
分组加解密 |
- |
否 |
数字信封
数字信封是指发送方采用接收方的公钥加密对称密钥后与密文组合在一起所得的数据。采用数字信封时,接收方需要使用自己的私钥才能打开数字信封,得到对称密钥。数字信封技术结合了对称密钥加密和公钥加密的优点,解决了对称密钥发布和公钥加密速度慢等问题,提高了安全性、扩展性和网络传输效率。
数字信封的加解密过程如图所示。
甲事先获得乙的公钥,具体加解密过程如下:
- 甲使用对称密钥对明文进行加密,生成密文信息。
- 甲使用乙的公钥加密对称密钥,和密文一起生成数字信封。
- 甲将数字信封发送给乙。
- 乙接收到甲的加密信息后,使用自己的私钥打开数字信封,得到对称密钥。
- 乙使用对称密钥对密文信息进行解密,得到最初的明文。
从加解密的过程中可以发现,其实数字信封技术也存在问题,如果攻击者拦截甲的信息,用自己的对称密钥加密伪造的信息,并用乙的公钥加密自己的对称密钥,然后发送给乙。乙收到加密信息后,解密得到的明文会被误认为是甲发送的信息。此时,需要一种方法确保接收方收到的信息就是指定的发送方发送的。
数字签名
数字信封无法保证接收方收到的信息就是指定的发送方发送的,数字签名可以解决这个问题。它不但可以验证信息是否被篡改,还可以证明发送方的身份。
数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,接收方需要使用发送方的公钥才能解开数字签名,得到数字指纹。
数字指纹又称信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将数字指纹和明文一起发送给接收方,接收方用同样的HASH算法对明文计算生成的数据指纹,与收到的数字指纹进行匹配,如果一致,便可确定明文信息没有被篡改。
数字签名的加解密过程如所示。
甲事先获得乙的公钥,具体加解密过程如下:
- 甲使用乙的公钥对明文进行加密,生成密文信息。
- 甲使用HASH算法对明文进行HASH运算,生成数字指纹。
- 甲使用自己的私钥对数字指纹进行加密,生成数字签名。
- 甲将密文信息和数字签名一起发送给乙。
- 乙使用甲的公钥对数字签名进行解密,得到数字指纹。
- 乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
- 乙使用HASH算法对明文进行HASH运算,生成数字指纹。
- 乙将生成的数字指纹与得到的数字指纹进行比较,如果一致,乙接收明文;如果不一致,乙丢弃明文。比较的过程也称为验签。
从加解密的过程中可以看出,数字签名技术不但可以验证信息是否被篡改,还可以证明发送方的身份。数字签名和数字信封技术也可以组合使用。
但是,数字签名技术还有个问题,如果攻击者更改乙的公钥,甲获得的是攻击者的公钥,攻击者拦截乙发送给甲的信息,用自己的私钥对伪造的信息进行数字签名,然后与使用甲的公钥的加密伪造的信息一起发送给甲。甲收到加密信息后,解密得到的明文,并验证明文没有被篡改,则甲始终认为是乙发送的信息。
数字证书
数字签名无法确定某个特定的公钥属于特定的拥有者,因为谁都可以生成公钥和私钥,仅凭一个公钥无法判断收到的公钥是不是对方的。因此需要一个安全可信的载体来交换公钥,这个载体就是数字证书。
数字证书简称证书,它是一个经证书授权中心数字签名的文件,包含拥有者的公钥及相关身份信息。
数字证书可以说是网络上的安全护照或身份证,提供的是网络上的身份证明。数字证书技术解决了数字签名技术中无法确定公钥是指定拥有者的问题。
证书结构
最简单的证书包含一个公钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效期、颁发者(证书授权中心)的名称和该证书的序列号等信息。证书的结构遵循X.509 v3版本的规范。展示了一种常见的证书结构。
证书的各字段解释如下:
- 版本:即使用X.509的版本,目前普遍使用的是v3版本(0x2)。
- 序列号:颁发者分配给证书的一个正整数,同一颁发者颁发的证书序列号各不相同,可与颁发者名称一起作为证书的唯一标识。
- 签名算法:颁发者颁发证书时使用的签名算法。
- 颁发者:颁发该证书的设备名称,必须与颁发者证书中的主体名一致。通常为CA服务器的名称。
- 有效期:包含有效的起、止日期,不在有效期范围内的证书为无效证书。
- 主体名:证书拥有者的名称,如果与颁发者相同则该证书是一个自签名证书。
- 公钥信息:用户对外公开的公钥以及公钥算法信息。
- 扩展信息:通常包含证书的用法、CRL的发布地址、OCSP服务器的URL等可选字段。
- 签名:颁发者用私钥对证书信息的签名。
证书签名的形成过程如下:首先,CA使用签名算法中的HASH密码学算法生成证书的摘要信息,然后使用签名算法中的公钥密码学算法,配合CA的私钥对摘要信息进行加密,最终形成签名。这些操作都是证书颁发之前在CA上进行的。
证书分类
证书有三种类型,如t图所示。
类型 |
描述 |
说明 |
---|---|---|
CA证书 |
CA自身的证书。如果PKI系统中没有多层级CA,CA证书就是自签名证书;如果有多层级CA,则会形成一个CA层次结构,最上层的CA是根CA,它拥有一个CA“自签名”的证书。 |
申请者通过验证CA的数字签名从而信任CA,任何申请者都可以得到CA的证书(含公钥),用以验证它所颁发的本地证书。 |
本地证书 |
CA颁发给申请者的证书。 |
- |
自签名证书 |
|
通过设备生成自签名证书和不带签名的证书,可以实现简单的证书颁发功能。 设备不支持对其生成的自签名证书进行生命周期管理(如证书更新、证书撤销等),为了确保设备和证书的安全,建议用户替换为自己的本地证书。 |
证书格式
设备支持三种文件格式保存,如表所示。
格式 |
描述 |
说明 |
---|---|---|
PKCS#12 |
以二进制格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有.P12和.PFX。 |
如果证书后缀为.CER或.CRT,可以用记事本打开证书,通过查看证书内容来区分格式。
|
DER |
以二进制格式保存证书,不包含私钥。常用的后缀有.DER、.CER和.CRT。 | |
PEM |
以ASCII码格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有.PEM、.CER和.CRT。 |
国密证书
通常情况下,设备仅会部署一张证书同时用于签名和加密,该证书为单证书,公私钥均由设备负责保存。按照规范,国密需要采用双证书体系,根据证书的使用目的和功能可分为签名证书和加密证书两种,签名证书仅用于验证身份,其公私钥均由设备本身生成并负责保管,签名密钥的用法为Digital Signature, Non-Repudiation,加密证书在密钥协商时使用,其公私钥均由CA产生,加密密钥的用法为Key Encipherment, Data Encipherment, Key Agreement。一般情况下,设备产生签名密钥对,生成只包含公钥信息的签名证书请求后发送签名证书给CA,CA验证设备的签名密钥对,生成加密密钥对和加密证书,设备获得加密证书和私钥的过程如图所示。签名证书和加密证书的密钥对均为SM2密钥对。
国密数字信封的加解密过程示意图
- CA生成对称密钥,使用设备的签名公钥加密对称密钥,生成对称密钥的密文,即数字信封。
- CA使用对称密钥对加密证书对应的私钥进行加密,生成加密私钥的密文。
- CA将加密证书、签名证书、对称密钥的密文和加密私钥的密文发给设备。
- 设备使用自己的签名私钥解密对称密钥的密文,得到对称密钥。
- 设备使用对称密钥对加密私钥的密文进行解密,得到加密私钥的明文。