国密 SM9 数字签名及验证签名算法的 Python 代码实现,基于 GmSSL 库编写。
GmSSL 是一个开源的密码工具箱。基于 GmSSL 库所提供的底层模块,包括椭圆曲线、配对、有限域模块,针对接口层与功能层对数字签名软件进行编写实现。
🔗 http://gmssl.org/docs/sm9-cn.html
由用户输入其身份标识(可以是身份证号、电话号码、电子邮箱地址等信息),然后调用 SM9 系统接口生成所需要的签名主密钥、用户加密私钥等。接着由用户决定对输入消息进行签名或选择具体文件进行签名(若选择具体文件进行签名,需要提供完整的程序路径)。
程序接收到用户输入后,调用 SM9 签名模块进行数字签名处理。最后验证签名部分传入由数字签名模块返回的返回值作为参数,调用 SM9 功能层进行验证签名。
-
SM3 密码杂凑算法是 SM9 算法中数字签名算法调用的主要杂凑算法。
-
随机数模块调用国密局批准的随机数发生器。
程序测试主要选取用户输入的字符串、普通文本文件、可执行程序三项作为签名对象。
测试环境:
macOS Mojave 10.14.6; 内存 16GB; CPU Intel Core i5-8279U
测试用例的椭圆曲线方程是:
y^2 = x^3 + 3
若干次测试后,对于用户输入消息的签名耗时可控制在 0.1s 内,验证签名的耗时可控制在 0.4s 内,性能较为稳定。