Zhi Guan ade9fc1a2e sm2
2015-10-31 16:10:56 +08:00
2015-10-25 21:20:50 +08:00
2015-08-15 15:02:15 +08:00
2015-10-11 11:56:45 +08:00
sm2
2015-10-31 16:10:56 +08:00
2015-10-11 11:56:45 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2015-10-25 21:20:50 +08:00
2015-10-11 11:56:45 +08:00
2014-12-01 10:40:26 +08:00
2015-08-24 14:39:45 +08:00
2015-10-11 11:56:45 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2015-10-11 11:56:45 +08:00
2015-10-07 15:23:34 +08:00
2015-10-11 11:56:45 +08:00
2014-12-01 10:40:26 +08:00
2015-08-15 15:02:15 +08:00
2015-10-05 15:34:54 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2015-08-15 15:02:15 +08:00
2014-12-01 10:40:26 +08:00
2014-12-01 10:40:26 +08:00
2015-10-26 12:09:03 +08:00

GmSSL

GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室(http://infosec.pku.edu.cn)开发和维护。

GmSSL的libcrypto密码库增加的密码算法包括:

  • SM2是国密椭圆曲线公钥密码标准其中包含数字签名、公钥加密和密钥交换三个具体方案以及一个256比特素域上的推荐椭圆曲线参数。GmSSL内置了SM2的推荐曲线参数实现了SM2的签名算法和公钥加密算法。
  • SM3是国密密码杂凑算法标准输出的杂凑值长度为256比特。
  • SM4是国密分组密码标准又名SMS4其分组长度和密钥长度均为128比特。GmSSL实现了SMS4密码及SMS4的ECB、CBC、CFB、OFB等工作模式。
  • X9.63 KDF是密钥派生函数国际标准之一ECIES和SM2公钥加密方案依赖该算法GmSSL实现了X9.63 KDF并用于支持ECIES和SM2公钥加密。
  • ECIES (Elliptic Curve Integrated Encryption Scheme)是椭圆曲线公钥加密的国际标准,可用于加密数据。
  • CPK是由南相浩和陈钟设计的基于身份的密码。GmSSL实现了CPK的系统建立和密钥生成算法生成的密钥可以用于DSA、ECDH、ECDSA、ECIES、SM2等公钥密码算法。
  • ZUC(祖冲之算法)是由我国设计的序列密码以32位字为单位输出密钥流其密钥长度和IV长度均为128比特。GmSSL的ZUC算法处于开发中。

GmSSL提供命令行工具gmssl可用于生成SM2签名、SM3摘要、HMAC-SM3消息认证码支持SM4和ZUC数据加解密。

$ echo -n abc | gmssl dgst -sm3
66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0

显示SM2推荐椭圆曲线域参数

$ gmssl ecparam -text -noout -name sm2p256v1 -param_enc explicit

在代码目录./certs/sm2/目录中给出了SM2证书的例子可以用gmssl工具进行解析

$ gmssl x509 -text -noout -in certs/sm2/sm2-x509.pem
$ gmssl pkcs7 -print_certs -in certs/sm2/sm2-pkcs7.pem

GmSSL新增的EVP对象包括EVP_sm3()EVP_sm4_ecb()EVP_sm4_cbc()EVP_sm4_ofb()EVP_sm4_cfb()EVP_zuc()

注意事项

SM2签名中的摘要生成

SM2数字签名方案中被签名的杂凑值不仅仅是消息的杂凑值而是签名者身份信息串联上消息的杂凑值其中签名者身份信息是签名者的可辨别标识字串、椭圆曲线方程系数、生成元和签名者公钥串联后字串的杂凑值。SM2标准中并未说明签名者的可辨别标识字串格式及获得方式应用可以采用X.509证书中的Subject字段、CN (CommonName)或自行规定。

SM2参数选择

SM2标准中规定采用256比特的椭圆曲线域参数并采用256比特的密码杂凑算法并规定某些步骤中须采用SM3。GmSSL的实现支持灵活的参数设定并支持内置的所有密码杂凑算法因此应用可以选择安全程度更高的椭圆曲线域参数和密码杂凑算法如521比特的域参数和SHA-512算法。

Languages
C 97.3%
Assembly 2%
CMake 0.7%