This commit is contained in:
Zhi Guan
2016-06-06 22:04:44 +02:00
parent 2bf25bd29f
commit 2cb43b7f80
142 changed files with 7768 additions and 1678 deletions

View File

@@ -1,35 +1,43 @@
# GmSSL
GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室(http://infosec.pku.edu.cn)开发和维护。
GmSSL [(http://gmssl.org)](http://gmssl.org) 是支持国密算法和标准的OpenSSL分支是一个提供了丰富密码学功能和安全功能的开源软件包。在保持OpenSSL原有功能并实现和OpenSSL API兼容的基础上GmSSL新增多种密码算法、标准和协议其中包括
GmSSL的`libcrypto`密码库增加的密码算法包括:
* 椭圆曲线公钥加密国际标准ECIES
* 国密SM2椭圆曲线公钥密码标准包含数字签名算法、公钥加密算法、密钥交换协议及推荐椭圆曲线参数
* 国密SM3密码杂凑算法、HMAC-SM3消息认证码算法、PBKDF2口令加密算法
* 国密SM4/SMS4分组密码、ECB/CBC/CFB/OFB/CTR/GCM/FFX加密模式和CBC-MAC/CMAC消息认证码算法
* 组合公钥(CPK)身份密码,可同时支持椭圆曲线国际标准算法和国密标准算法
* 国密动态口令密码规范
* 祖冲之(ZUC)序列密码
- 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还可以以安全中间件的方式访问PCI-E密码加速卡、USB Key等硬件密码设备为上层应用提供密钥安全存储、密码计算硬件加速以及国密SM1分组密码、国密SSF33分组密码等硬件实现的保密算法。GmSSL通过ENGINE机制支持符合不同接口规范的密码设备
GmSSL提供命令行工具`gmssl`可用于生成SM2签名、SM3摘要、HMAC-SM3消息认证码支持SM4和ZUC数据加解密。
* 提供国密算法和国密SKF接口规范实现的硬件密码设备
* 提供Windows Crypto API Provider的密码硬件设备
* 提供PKCS #11 (Cryptoki)接口实现的密码硬件设备
``` bash
$ echo -n abc | gmssl dgst -sm3
66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
GmSSL主要包含通用密码库`libcrypto`、SSL/TLS协议库`libssl`和命令行工具`gmssl`。除`gmssl`的命令行接口之外GmSSL还通过`libcrypto`密码库提供原生的EVP API抽象密码接口以及国密智能IC卡及智能密码钥匙密码应用接口SKF API以及通过JNI (Java Native Interface)本地接口实现的Java语言绑定。
为了便于商业软件安全地采用GmSSLGmSSL保持了和OpenSSL相似的BSD/Apache风格的许可证因此闭源软件或者商业软件可以安全地在产品中采用GmSSL的代码。自发布以来GmSSL荣获开源中国[(http://oschina.net)](http://oschina.net)密码类推荐开源项目、2015年度“一铭杯”中国Linux软件大赛二等奖(该年度最高奖项)等奖励和荣誉。
GmSSL项目目前由北京大学信息安全实验室开发和维护项目的长期目标是推动国产密码算法在国内互联网和开源领域的广泛应用提高国内商用非涉密领域的自主密码应用水平。
## 编译和安装
OpenSSL通过其独有的编译脚本支持非常广泛的硬件和操作系统GmSSL项目力求保持其跨平台特性。目前GmSSL可以在Linux平台和苹果OS X平台顺利编译安装在Windows上暂时无法编译通过。我们预计可以在下一个版本发布时修正Windows平台的编译问题。
在Linux平台上通过如下指令实现编译和安装
```
./config
make
make install
```
显示SM2推荐椭圆曲线域参数
``` bash
$ gmssl ecparam -text -noout -name sm2p256v1 -param_enc explicit
在苹果OS X操作系统上通过如下指令实现编译和安装
```
./Configure darwin64-x86_64-cc --prefix=/usr/local --openssldir=/usr/local/openssl
make
sudo make install
```
在代码目录`./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()`。