Skip to content

SM2性能优化(续)

Sun Yimin edited this page May 23, 2024 · 21 revisions

这篇文章接续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架构优化

arm64架构优化

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