铜锁SM2算法性能优化实践:(三)快速模逆元算法实现
模逆元的概念
在数学上,乘法逆元有一个更加广为人知的别名,“倒数”。也就是说,对于实数,其倒数满足。由于1是实数域的乘法单位元,故而倒数为实数的乘法逆元。 而在有限域模运算中,乘法逆元的定义要更复杂一些:如果和都是正整数且满足,那么在模意义下,存在一个整数,使得,此时就是在模运算下的逆元,常表示为**,简称为模逆元。**由于引入了模运算,在实数域上简单求倒数获得逆元的方法并不能直接求得有限域上的模逆元,需要改用更为复杂的方式求解运算结果。 在SM2数字签名算法中,存在两个必须计算模逆元的步骤:一是将椭圆曲线公钥点由仿射坐标转化为雅可比坐标时,需要计算轴坐标对素数域参数的模逆元,二是在签名计算过程中,需要求解私钥对椭圆曲线阶数的模逆元。由于模逆元的计算非常复杂,是椭圆曲线中开销最大的单体运算(无任何优化时计算耗时是模乘法的数千倍),且运算处于数字签名算法流程的关键链路上, 因此是制约SM2数字签名性能的瓶颈之一。目前,铜锁项目为SM2数字签名算法提供了通用的模逆元优化实现,尚未针对SM2曲线实现特定优化,存在可以进一步优化提升的空间。