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哈希

测试结果

  1. SM2性能对比(TPS)

密码库 签名 验证 加密 解密
同济库 3194 691 680 984
北大gmssl 32793 17258 7633 8902
腾讯国密 43951 26937 29283 17054
  1. SM3性能对比 (TPS)

密码库 哈希
同济库 1767591
北大gmssl 2159385
腾讯国密 3048235
  1. SM4性能对比 (TPS)

密码库 加密 解密
同济库 722229 1844478
北大gmssl 399276 484226
腾讯国密 768583 2777679