美文网首页
国密算法的一些简单学习

国密算法的一些简单学习

作者: 竹屋听雨 | 来源:发表于2018-12-20 14:57 被阅读21次

    1:国密算法是什么?

    国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称、摘要等算法功能。
    SM1 为对称加密;
    SM2为非对称加密,基于ECC;
    SM3 消息摘要;
    SM4 对称加密;

    2:SM2的学习-数字签名

    先了解几个东西

    ECC: 椭圆曲线算法。
    数字签名:由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性。每个签名 者有一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。在签名的生成 过程之前,要用密码杂凑函数对M (包含ZA和待签消息M)进行压缩;在验证过程之前,要用密码杂 凑函数对M′(包含ZA和验证消息M′)进行压缩。
    详细可参考《国密算法SM2椭圆曲线公钥密码算法》
    下面来看一下数字签名的过程:
    准备工作:计算用户的ZA值(椭圆曲线方程参数a、b、G的 坐标xG、yG 和PA的坐标xA、yA的数据类型转换为比特串,ZA=H256(ENTLA ∥ IDA ∥ a ∥ b ∥ xG ∥ yG ∥xA ∥yA)。)
    A1:置M=ZA ∥ M;
    A2:计算e = Hv(M),国密算法第1部分4.2.3和4.2.2给出的细节将e的数据类型转换为整数;
    A3:用随机数发生器产生随机数k ∈[1,n-1];
    A4:计算椭圆曲线点(x1,y1)=[k]G,国密算法第1部分4.2.7给出的细节将x1的数据类型转换为整
    数;
    A5:计算r=(e+x1) modn,若r=0或r+k=n则返回A3;
    A6:计算s = ((1 + dA)−1 · (k − r · dA)) modn,若s=0则返回A3;

    A7:按本文本第1部分4.2.1给出的细节将r、s的数据类型转换为字节串,消息M 的签名为(r,s)。

    屏幕快照 2018-12-20 下午2.22.59.png

    数字签名的验证算法:
    B1:检验r′ ∈[1,n-1]是否成立,若不成立则验证不通过;
    B2:检验s′ ∈[1,n-1]是否成立,若不成立则验证不通过;
    B3:置M′=ZA ∥ M′;
    B4:计算e′ = Hv(M′),国密算法文档第1部分4.2.3和4.2.2给出的细节将e′的数据类型转换为整数;
    B5:按本文本第1部分4.2.2给出的细节将r′、s′的数据类型转换为整数,计算t = (r′ + s′) modn, 若t = 0,则验证不通过;
    B6:计算椭圆曲线点(x′1, y1′ )=[s′]G + [t]PA;
    B7:按本文本第1部分4.2.7给出的细节将x′1的数据类型转换为整数,计算R = (e′ + x′1) modn,检 验R=r′是否成立,若成立则验证通过;否则验证不通过。

    屏幕快照 2018-12-20 下午2.25.42.png
    接下来就是对于给的测试数据进行代码分析(本文所用代码是从Github大佬下载的,然后学习的,本着学习的精神来的,如果有合适的,请大佬赐教)
    Fp 上的椭圆曲线数字签名
    椭圆曲线方程为:y2 = x3 + ax + b
    Fp -256 下面是一些参数:直接上图。
    屏幕快照 2018-12-20 下午2.29.55.png
    下面是参数输入
    屏幕快照 2018-12-20 下午2.32.41.png
    预处理 (ENTLA )
    屏幕快照 2018-12-20 下午2.34.57.png
    杂凑值ZA=H256(ENTLA ∥IDA ∥a∥b∥xG ∥yG ∥xA ∥yA)。
    屏幕快照 2018-12-20 下午2.36.50.png
    屏幕快照 2018-12-20 下午2.39.13.png
    得到摘要
    屏幕快照 2018-12-20 下午2.39.42.png
    获取随机值K
    屏幕快照 2018-12-20 下午2.41.23.png
    屏幕快照 2018-12-20 下午2.42.30.png
    屏幕快照 2018-12-20 下午2.42.30.png
    屏幕快照 2018-12-20 下午2.43.41.png
    屏幕快照 2018-12-20 下午2.43.53.png
    基于libtommath函数的实现
    libtommath是一个大数算法库.这个C语言的函数库非常牛X可以实现多种算法。感兴趣的可以去学习https://github.com/libtom/libtommath
    可以验证算法文档给出的实例。
    代码项目作者simonpang/steven.psm@gmail.com;感谢libtommath作者及goldbar :)
    站在大佬的肩膀上学习真香。鸣谢。

    相关文章

      网友评论

          本文标题:国密算法的一些简单学习

          本文链接:https://www.haomeiwen.com/subject/zpemhqtx.html