总结一下搞了一个月的SM2,SM3,当作导引来看吧

开始老大让我搞国密算法,就去官网下了一文档

地址【http://www.oscca.gov.cn/News/201012/News_1197.htm】

下回来对于应该怎么开始是一头雾水,也没看目录就一页页地看,很没效率

一、文档分了四部分,第一部分是对于ECC的解释说明,实现计算之类。

        第二,三,四部分,看你要往哪部分用再去看。

        我这用的是数字签名,也就是得清楚,第一二部分。

        我就只按照我做的来讲了,实现签名的加密与验证,其中较大的两人部分是ECC倍点,还有哈希。

一、1.先讲哈希

       这里用的哈希也就是官方文档SM3中的杂凑算法,这个实现中要做的基本就是与、或、异或、非的运算。

       其中有一点我在开始实现的时候不明白是,一个模32的加法运算,其实就是两32位的数相加,不管进位的加法。

       实现后,我在PC上运行大约为20ms,应该是可优化的。

       文档中还给出了测试数据,相当好用

       如果还想知道SS1、SS2、TT1、TT2的中间数据,可以找我要

一、2 ECC倍点

       这点用到的也就是SM2文件中的第一部分总则中讲的核心内容,那就是怎么快速实现倍点的计算

       这里大概说下,因为要用到图。在官方文档中没有,在y^2 = x^3 + x+ 1时候,曲线是左边一个闭合曲线,右边是一条开口的曲线,能过不停地点的映射来实现倍现

      更加形象的带图的说明,请下载文档

      这不是我做的,感谢原作者,由于我找不到原一址了,就又上传了一回【http://download.csdn.net/detail/conquerwave/5639269】

      关于椭原曲线点加原理更多的解说,《哈代数论》25.2椭圆曲线加法法则 解释得比较清楚

      SM2的官方文档第一部分的其它内容就是对这种加密方法的验证,还有某些算法快速实现的介绍

       如果想更深入地了解椭圆曲线加密的原理可以去这下一本书

       【http://download.csdn.net/detail/conquerwave/5463667】

       中文版的“椭圆曲线密码学导论”,我没分了,希望能友情下载一下,谢谢

       多倍点实现中的中间数据可以和这里地对照一下,看是否正确,地址【http://download.csdn.net/detail/conquerwave/5529407】

到这里SM2的第一部分也就介绍完了

二、实现

       2.1    关于数学计算库

        有关的数学计算库看官可以自己搜一下,由于我要移植,不能用库,尽量不使用别的资源,代码占用空间尽可能地小,我这也就被限制了。

        在我给的第一个链接中的博主给出了自己调用openssl库的实现,这速度很快,我的和这没法比,模拜一下。

        要用的话得安装openssl的函数库,这也就不说了,相信看这文章的人都能搞定这事。

        我还另外参考了libtomath的数学计算库,这库比较小,说明文档很全,pudn中也有用这库实现的例子。

       2.2  我的实现

       大数运算中要实现加、减、乘、整除、模逆、取模

       加、减用最普通的笔算方式实现就行

       乘法用comba优化的笔算计算方式能优化一些,更好的优化还在研究,有兴趣地可以联系我。

        整除我用的方法是移位比较做减法

      模逆用的是文档中推荐的扩展欧几里得算法,所说是最快的,但感觉我的时间全花在这了。对于这一算法解释的好的帖子【www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html】感谢原作者

      取模的方法和整除差不多。

      这里我贴上我的第一版的计算实现函数【http://download.csdn.net/detail/conquerwave/5529607】这是第一版,没有优化

        如果你有兴趣将其完善,希望你能找我一起做这事,谢谢

       2.3 运行时间

        在我的PC上运行,在2.1节中提到的博主花的时间几乎为0s,我的实现花去8秒多,第一版的时间在60秒左右,测试数据为官文第二部分的K倍点计算

目前我就做到这,还得继续优化数学计算部分

希望有兴趣和我一起实现库的朋友能联系我[email protected]     新浪微博‘我叫王小才’

你可能感兴趣的:(总结一下搞了一个月的SM2,SM3,当作导引来看吧)