1. 本周计划完成的任务
  2. 本周实际完成情况(代码,文档,程序运行截图...),未完成计划的原因?如何改进?
  3. 本周遇到的问题与解决过程(要详细)

本周计划完成的任务

  1. 收集与python语言相关的国密算法库资料
  2. 给openeuler配置python语言环境
  3. 调通测试基于python语言的国密算法库hggm,并在openeuler中运行

本周实际完成情况

第一项任务:“收集与python语言相关的国密算法库资料”,已顺利完成

比较常用的是snowland-smx和gmssl,这两个我们小组成员也都调通并测试了。
在各种翻找资料后,我找到一个大神自己实现的国密算法库——hggm,支持SM2/SM3/SM4/ZUC等国密算法。

python 国密数字信封 python国密算法库_ide

相较于现有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%,实际运行签名与验证、加解密等算法同样具备上述幅度的性能优势。

python 国密数字信封 python国密算法库_python语言_02

其它的算法也进行了性能提升的实现,可以说是很良心了。

汇总了作者的相关博文,里面记录了各类实现方法和改进措施以及性能能测试:

第一篇SM2:
第二篇SM2:
SM3:
SM4:
ZUC:
汇总测试:

第二项任务:“给openeuler配置python语言环境”,已顺利完成

本来openeuler是自带python环境的,但是之前一次实验我将它卸载了。

所以现在需要去官网下载安装包:

python 国密数字信封 python国密算法库_python_03


步骤按照下面的参考博客做就行,

注意配置环境变量

参考博文:Linux下安装Python3.9.0详细步骤

第三项任务:“调通测试基于python语言的国密算法库hggm,并在openeuler中运行”,只在windows环境中完成调通,在openeuler中代码报错。

hggm这是一个小众库,是个人开发的,网上对于他的测试博客基本上没有,只有作者本人写的测试代码和注意事项,这就要求我们认真阅读gitee上的资料及其博客上分享的一些安装要点:

作者提供的安装教程如下

python 国密数字信封 python国密算法库_python语言_04

所以我们先下载gitee上的工具包,然后再pycharm中打开

  • 此时要确保自己的windows里面有python环境和pip环境,在pycharm中配置后
  • 接下来下载该项目所需要的包
    pip install pycryptodome==3.10.1pip install gmsslpip install snowland-smx 以上三个是必须的,并且一定要安装pycryptodome的3.10.1版本
    可能还会提示某些插件未安装。比如还需要
    pip install numpy等。
  • 接下来点击运行,代码还会报错,这里首先根据作者的提示:
  • python 国密数字信封 python国密算法库_ide_05


  • 找到自己下载的第三方库pysmx的目录,(报错提示中会打印出完整的目录)
  • python 国密数字信封 python国密算法库_python 国密数字信封_06


  • 在idea中能显示对应的python环境,其中site-packages就是我们安装所有库的地方
  • 修改pysmx包的SM2文件夹下的init.py文件,在import里添加kG,sm2_G即可解决。
  • python 国密数字信封 python国密算法库_python语言_07


  • python 国密数字信封 python国密算法库_python语言_08

  • 接着就是还需要修改(很坑):
  • (这个下载好的库一开始是小写c,但是因为代码中引用都是大写所以需要重命名包的名词为Crypto)
  • python 国密数字信封 python国密算法库_python_09

  • 以及代码有个地方会造成溢出错误:

python 国密数字信封 python国密算法库_python语言_10


把这里改成32,就不会报错了

然后就可以运行成功:

python 国密数字信封 python国密算法库_ide_11


python 国密数字信封 python国密算法库_python 国密数字信封_12


python 国密数字信封 python国密算法库_python语言_13

我是在Intellij idea里做的,不是专业搞python的ide,所以需要配置python插件,同时确保电脑里最好有python环境,并手动在idea中配置。

如果电脑本身没有python环境的话可以在idea中下载python环境,仅限于idea内部使用,但是比较麻烦,在想要pip install时无法在命令行中进行,只能自己配置pip源下载:

python 国密数字信封 python国密算法库_ide_14

然后我在openeuler里也尝试进行完成,步骤和上面一样。

  1. 配置python环境
  2. pip install对应的包

python 国密数字信封 python国密算法库_python_15

python 国密数字信封 python国密算法库_python语言_16

  1. 修改对应代码
  • 修改包名称
  • 修改两处代码

python 国密数字信封 python国密算法库_python语言_17

  1. 运行

可以看到有一定的问题:

python 国密数字信封 python国密算法库_ide_18

python 国密数字信封 python国密算法库_ide_19

python 国密数字信封 python国密算法库_python语言_20

但是在windows环境里面就不会遇到,可能存在不兼容问题

遇到的问题

没有按照作者的指示下载对应模块,版本不匹配造成兼容性问题

python 国密数字信封 python国密算法库_python_21


之后卸载了默认下载的pycryptodome版本,下载了作者要求的3.10.1版本