国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现

11 篇文章 7 订阅
9 篇文章 4 订阅

包含SM2公钥密码、SM3杂凑算法和SM4分组密码的国密算法完整工具包完成了。此前分别发布过上述三个算法的代码:

SM2:国密算法 SM2 公钥加密 非对称加密 数字签名 密钥协商 python实现完整代码_qq_43339242的博客-CSDN博客_python国密sm2

SM3:国密算法 SM3 消息摘要 杂凑算法 哈希函数 散列函数 python实现完整代码_qq_43339242的博客-CSDN博客

SM4:国密算法 SM4 对称加密 分组密码 python实现完整代码_qq_43339242的博客-CSDN博客_sm4代码python

对上述几个算法和实现不了解的,建议点进去看看。上文提到要实现加速,运行效率与国外库成熟的python密码算法库看齐,与C语言编写的代码看齐,基本做到了。效果如下:

图1(SM3)

图2(SM4)

 图3(SM2)

图4 (SM2)

目前公开的国密算法python库主要是python-gmssl库和snowland-smx(pysmx)库,二者都对SM2(仅公钥加解密和数字签名)、SM3、SM4进行了细致而优雅的实现。在耗时测试中,还引入了国际算法MD5、SHA-256、AES和ECC作为对比,均采用成熟高效的Crypto(PyCryptodome)库。再次向这些优秀python库的作者表示诚挚敬意和由衷感谢。它们的来源如下:

1.GMSSL. https://github.com/duanhongyi/gmssl
2.snowland-smx. https://gitee.com/snowlandltd/ snowland-smx-python
3.PyCryptodome. https://www.pycryptodome.org

 可见,Crypto库的运行效率通常是最高的,因为他的核心算法用C语言编写,python只是调用编译好的链接库,所以能碾压纯python。

我把SM4和SM3用numba加速(numba是一个python库,用于把python代码先编译成机器代码再执行,对数值计算和循环的加速效果很明显),图1和图2表明其运行效率相比gmssl库和pysmx库提升了超过两个数量级,已与Crypto库不相上下。

SM2最耗时的环节是ECC点乘运算,一开始也想尝试用numba加速,但python如此顺手的大整数运算却不能直接被numpy+numba支持,于是把高德纳的《计算机程序设计艺术(卷2)》请下书架,用纯数组实现所需的高精度运算。一番折腾确实实现了,但速度却比python内置的大整数运算慢了很多,完全没有SM4和SM3立竿见影的加速效果。只好另辟蹊径。Crypto库有ECC,同样是用编译好的C语言链接库完成点乘运算,我把Crypto库的ECC嫁接过来,装载SM2的椭圆曲线参数,实现用Crypto库的ECC链接库完成SM2的ECC运算。使用此外挂加速后,点乘运算的耗时约为纯python实现的1/4。需要说明的是,图3的点乘运算测试中,Crypto库的ECC点乘运算耗时不到SM2加速后的1/4(二者使用相同的ECC链接库),是因为这个测试使用随机数乘基点,而美国标准ECC的p-256基点可能有什么特殊的数学特性,或者Crypto库做了什么特别优化,使得Crypto库对基点的点乘运算就是快上一截,如果是对其他点进行点乘,速度与我嫁接到SM2上的表现是一致的。

总之,加速后的SM2、SM3和SM4,运行速率完全超越现有的公开国密算法python库,并与国外的成熟密码库相当。其中,SM2包含密钥协商,这是其他两个国密算法库没有实现的。所有代码托管在码云:hggm - 国密算法 SM2 SM3 SM4 python实现完整代码: 国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现 效率高于所有公开的python国密算法库 (gitee.com)

根目录的hggm_test.py是测试代码,对SM2、SM3和SM4的代码进行完整测试,与Crypto、gmssl和pysmx三个库对比。上述这些库的AES、SM4、MD5、SHA256、SM3和SM2(包括公钥加解密、密钥协商、数字签名与验证)的用法,在测试代码里全部能够找到,原本不太好用的进行了封装。图1-4就是该测试代码的运行结果。欢迎大家下载、修改、应用,如果还能提出宝贵的意见建议,感激不尽O(∩_∩)O。

本库取名hggm,hggm目录里的python代码是加速后的实现,hggm/slow里的是未加速的实现。加速算法使用了python第三方库(Crypto和numba),运行效率明显提高,但对初学者不太友好,毕竟好些关键代码看起来不那么pythonic;未加速的算法,纯python实现,不依赖第三方库,适合学习算法代码。二者结构基本一致,功能是相同的,一个便于机器高效运行,一个便于初学者学习。如果读代码学代码用代码还有些吃力的话,多打打基础,欢迎随时提问和评论。

心愿已成,也算是为国密算法的推广使用尽了绵薄之力。

网信自主安全极端重要,“没有网络安全就没有国家安全,没有信息化就没有现代化。”世界一流强国,必然是世界一流的网络强国。信息网络基础设施及其核心技术是赢得未来的关键,网络安全买不来、等不来、要不来,必须靠我们一代一代接续奋斗创造出来。衷心希望能有更多密码学、信息安全、网络空间安全、计算机科学与技术等等专业的有识之士并肩作战,积极投身网信自主安全战线,让我们接过前辈的旗帜,为建设网络强国添砖加瓦。共勉!

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值