Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Sun Yimin edited this page Oct 23, 2025 · 49 revisions

中国国家密码管理局商用密码实现及优化系列。

总体而言,在AMD64架构下,SM2/3的性能已经和主流NIST P256 / SHA 256相差不大了(要是AMD64也实现了SHA指令扩展,那SM3/SHA256的性能差别就会显著扩大。注:crypto/sha256: add sha-ni implementation,NI实现预计将于golang 1.21发布。SHA extensions);而SM4,由于CPU指令级别的差距,AES具有无法比拟的性能优势。

不过,Intel CPU很快(大概2025年)也会支持SM3/SM4: Intel CPU supports SM3 SM4

各算法架构优化表

amd64 arm64 ppc64x(*1) s390x riscv64(*3) loong64(*4)
SM2
SM3
SM4
SM9 ✘(*2)
ZUC

注1:ppc64x主要指ppc64le, 因为ppc64没有test/CI环境。
注2:s390x的SM9优化基于现实需求没有实现。
注3:riscv64的SM2优化需要Zbb (Bitmanip), M (Multiply/Divide)。
注4:loong64的SIMD支持(LSX/LASX),需要golang 1.25+,所以LSX/LASX支持将在以后版本发布。

实现策略

算法用C语言实现,其它语言使用链接库绑定实现

C语言实现的话,大部分实现都修改、扩展、剪裁自OpenSSL。好处在于OpenSSL认可度高、社区活跃、功能完善。典型的例子如:

OpenSSL本身也已经支持基本的SM2/SM3/SM4实现。

不依赖于链接库

优点在于:

  • 不需要受限于依赖的链接库,使用方便;
  • 易于维护;

缺点:

  • 可能是重复造轮子,开发难度相对较大,密码软件不只是结果正确,其执行过程安全性非常重要;
  • 纯Go语言(无汇编优化)实现的性能可能没有那么好;
Clone this wiki locally