21
SM2性能优化(续)
Sun Yimin edited this page 2024-05-23 21:56:27 +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.

这篇文章接续SM2实现及优化着重当前实现我说过目前纯golang实现通过fiat-crypto生成代码大家可以参考POC项目sm2fiat

纯Go实现

  • 通过fiat-crypto生成SM2曲线参数P的域运算使用Montgomery算法主要是加、减、乘、平方
  • 通过addchain生成优化的求逆运算。
  • 通过代码模板生成SM2曲线点运算主要是点加、倍点和点标量乘法其中点加是完全加法意思是就算两个点相同也能得到正确结果具体请参考Complete addition formulas for prime order elliptic curves, §A.2。这里也用代码模板,一是因为本来就要通过addchain生成优化的生成求平方跟算法另外一个也就是和Go语言保持一致Go语言因为有多条曲线所以用代码模板保持代码的一致性和正确性

通过代码生成方式保证算法实现的正确性、一致性。有尝试自己编写SM2曲线纯Go语言优化实现的同学应该体会很深。

amd64 arm64架构实现

总体而言,和以前实现相比,变化不大。

amd64架构优化

  • 使用MULX优化, 可以参考这个提交 a0c4a389b8
  • AVX2优化这里只是SELECT、MOVE等优化不涉及计算。

arm64架构优化

SM2签名、加解密等算法优化