16. 密码算法引擎介绍和使用手册
16.1. 密码算法引擎介绍
长安链支持多种密码算法引擎,并支持 动态可配置,长安链引入多种密码算法引擎主要考虑以下几点:
- 不同密码库密码算法实现性能差异较大 
- 不同密码库开源开放程度不同 
- 开源密码库活跃程度,已知漏洞是否能够及时修复 
- 密码库实现语言以及跨平台兼容问题 
长安链当前已支持引擎如下:

- 同济国密库 Tjfoc, 代码库地址 https://github.com/tjfoc/gmsm 
- 北大国密库 GMSSL, 代码库地址 https://github.com/guanzhi/GmSSL 
- 腾讯国密库 TencentSM,暂未开源 
16.2. 密码算法引擎配置
在长安链chainmaker.yml配置文件中,通过配置项crypto_engine来配置具体的密码算法引擎,如下:
log:
  config_file: ../config/wx-org2/log.yml # config file of logger configuration.
#crypto engine config setting
crypto_engine: tjfoc #support gmssl, tencentsm and tjfoc
blockchain:
  - chainId: chain1
    genesis: ../config/wx-org2/chainconfig/bc1.yml
其中,crypto_engine目前支持tjfoc、gmssl以及tencentsm配置选项,缺省配置为tjfoc.
注:密码算法引擎目前仅支持SM2和SM4,用来进行算法性能优化.如果长安链网络使用非国密启动(或者非linux平台),则该配置项不会生效。
16.3. 不同引擎密码算法性能对比
软硬件环境
- 处理器:6-Core Intel Core i7, 2.6 GHz 
- 内存:16 GB 
- go版本:go1.16.6 darwin/amd64 
测试方法
- c实现密码库,统一使用cgo进行了封装,性能上有一定影响 
- 采用golang原生benchmark进行测试(串行性能) 
- 测试使用数据msg=“hello world”, 加解密直接针对msg,签名/验证操作先对msg取sm3哈希 
测试结果
- SM2性能对比(TPS) 
| 密码库 | 签名 | 验证 | 加密 | 解密 | 
|---|---|---|---|---|
| 同济库 | 3194 | 691 | 680 | 984 | 
| 北大gmssl | 32793 | 17258 | 7633 | 8902 | 
| 腾讯国密 | 43951 | 26937 | 29283 | 17054 | 
- SM3性能对比 (TPS) 
| 密码库 | 哈希 | 
|---|---|
| 同济库 | 1767591 | 
| 北大gmssl | 2159385 | 
| 腾讯国密 | 3048235 | 
- SM4性能对比 (TPS) 
| 密码库 | 加密 | 解密 | 
|---|---|---|
| 同济库 | 722229 | 1844478 | 
| 北大gmssl | 399276 | 484226 | 
| 腾讯国密 | 768583 | 2777679 |