这得从几个方面来讲
1.官方文档中的问题
这里就不贴官文了,在我另一篇文章中给了下载链接,做这个实现的估计也是人手一份了。
以下只解释了三个问题。
1.1第12页,有如下一行
在上边的计算中有3*10^2 + 1它怎么就变成了3*5 + 1了呢
这里,其实少写了一些信息,这个椭圆曲线是基于素数域的一个曲线P的取值为19,那么所有大于19的数都应该对19进行取模。
以上图为例10^2=100>19于是有100=100%19=5,于是就有了3*10^2 + 1 = 3*5 + 1
1.2模逆的问题
还是1.1中的例子,最后一步为“16/4 = 4”如果认为这是普通的除法运算,那么将在后面运到相当大的问题。
如果不是搞加密的,对于模逆什么也不知道就像我一样,那么这就难理解了。
其实“16/4 = 4”这一步中间略写了好几步的内容,首先1/4怎么求
自己先去看一下模逆怎么求,官方的文档没给具体方法,但是写了一句,目前最快的求模逆的方法是用扩展欧几里德的方法,在这怎么实现不表了。
回到之前的问题4*5 mod 19 = 1, 所以在加密中其实1/4=5
继续往下16*5=80 mod 19 = 4,这结果其实是这么来的

本文探讨了SM2算法实现中的问题,包括官方文档的错误、模逆运算的处理、大数计算和模逆运算的实现,以及坐标系优化。作者提到大数计算库的选择,并分享了优化坐标系以减少模逆运算的思路,但表示优化结果仍不理想,寻求进一步的优化方案。
最低0.47元/天 解锁文章
664





