41
Home
Sun Yimin edited this page 2025-01-24 08:51:32 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

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

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

各算法架构优化表

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

注1ppc64x主要指ppc64le, 因为ppc64没有test/CI环境。
注2s390x的SM9优化基于现实需求没有实现。
注3loong64的test/CI环境还没有Ready且loong64和riscv64类似几乎没有CPU feature可以利用SIMD/VectorLSX/LASX目前在Golang也不支持(从Golang 1.23.x开始正在逐步支持)。

实现策略

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

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

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

不依赖于链接库

优点在于:

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

缺点:

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