- 本周计划完成的任务
- 本周实际完成情况(代码,文档,程序运行截图...),未完成计划的原因?如何改进?
- 本周遇到的问题与解决过程(要详细)
本周计划完成的任务
- 收集与python语言相关的国密算法库资料
- 给openeuler配置python语言环境
- 调通测试基于python语言的国密算法库hggm,并在openeuler中运行
本周实际完成情况
第一项任务:“收集与python语言相关的国密算法库资料”,已顺利完成
比较常用的是snowland-smx和gmssl,这两个我们小组成员也都调通并测试了。
在各种翻找资料后,我找到一个大神自己实现的国密算法库——hggm,支持SM2/SM3/SM4/ZUC等国密算法。
相较于现有Python国密算法工具包的SM2模块,本工具包的优势主要体现在以下3个方面:
1. 首次开源SM2密钥协商算法。gmssl库和pysmx库仅实现了SM2签名和验证、加密和解密算法,没有实现SM2密钥协商算法,互联网上也未找到实现SM2密钥协商算法的Python代码,故本工具包是首次在互联网上开源SM2密钥协商算法的Python代码。
2. 算法实现更为健壮和完整。gmssl库和pysmx库中的椭圆曲线点乘算法仅能输入有限域内的乘数(否则报错),所实现的SM2签名/验证算法不包含标准要求的Z值计算和Hash变换,除核心算法(密钥生成、签名、验证、加密、解密等)之外还缺少标准描述的一些辅助算法,gmssl库仅能输入bytes类型消息;本工具包的点乘算法能够输入任意自然数作为乘数并保证正确性,SM2签名/验证算法完整实现了Z值计算和Hash变换,除核心算法之外还实现了标准描述的一些重要辅助函数(如公钥验证、椭圆曲线系统参数验证等)。
3. 性能更佳。本工具包通过采用更高效的点乘算法、减少数据类型转换、充分运用算术运算加速技巧等途径,明显提高了计算效率。以SM2算法耗时的主要来源——椭圆曲线点乘运算为例进行测试,同等条件下本工具包的平均耗时约为gmssl库的35.5%、pysmx库的61.8%,实际运行签名与验证、加解密等算法同样具备上述幅度的性能优势。
其它的算法也进行了性能提升的实现,可以说是很良心了。
汇总了作者的相关博文,里面记录了各类实现方法和改进措施以及性能能测试:
第一篇SM2:
第二篇SM2:
SM3:
SM4:
ZUC:
汇总测试:
第二项任务:“给openeuler配置python语言环境”,已顺利完成
本来openeuler是自带python环境的,但是之前一次实验我将它卸载了。
所以现在需要去官网下载安装包:
步骤按照下面的参考博客做就行,
注意配置环境变量
参考博文:Linux下安装Python3.9.0详细步骤
第三项任务:“调通测试基于python语言的国密算法库hggm,并在openeuler中运行”,只在windows环境中完成调通,在openeuler中代码报错。
hggm这是一个小众库,是个人开发的,网上对于他的测试博客基本上没有,只有作者本人写的测试代码和注意事项,这就要求我们认真阅读gitee上的资料及其博客上分享的一些安装要点:
作者提供的安装教程如下
所以我们先下载gitee上的工具包,然后再pycharm中打开
- 此时要确保自己的windows里面有python环境和pip环境,在pycharm中配置后
- 接下来下载该项目所需要的包
pip install pycryptodome==3.10.1
pip install gmssl
pip install snowland-smx
以上三个是必须的,并且一定要安装pycryptodome的3.10.1版本
可能还会提示某些插件未安装。比如还需要pip install numpy
等。 - 接下来点击运行,代码还会报错,这里首先根据作者的提示:
- 找到自己下载的第三方库pysmx的目录,(报错提示中会打印出完整的目录)
- 在idea中能显示对应的python环境,其中site-packages就是我们安装所有库的地方
- 修改pysmx包的SM2文件夹下的init.py文件,在import里添加kG,sm2_G即可解决。
- 接着就是还需要修改(很坑):
- (这个下载好的库一开始是小写c,但是因为代码中引用都是大写所以需要重命名包的名词为Crypto)
- 以及代码有个地方会造成溢出错误:
把这里改成32,就不会报错了
然后就可以运行成功:
我是在Intellij idea里做的,不是专业搞python的ide,所以需要配置python插件,同时确保电脑里最好有python环境,并手动在idea中配置。
如果电脑本身没有python环境的话可以在idea中下载python环境,仅限于idea内部使用,但是比较麻烦,在想要pip install时无法在命令行中进行,只能自己配置pip源下载:
然后我在openeuler里也尝试进行完成,步骤和上面一样。
- 配置python环境
- pip install对应的包
- 修改对应代码
- 修改包名称
- 修改两处代码
- 运行
可以看到有一定的问题:
但是在windows环境里面就不会遇到,可能存在不兼容问题
遇到的问题
没有按照作者的指示下载对应模块,版本不匹配造成兼容性问题
之后卸载了默认下载的pycryptodome版本,下载了作者要求的3.10.1版本