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

国密算法的一些简单学习

作者: 竹屋听雨 | 来源:发表于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 :)
站在大佬的肩膀上学习真香。鸣谢。

相关文章

  • 国密算法的一些简单学习

    1:国密算法是什么? 国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称...

  • 国密算法

    国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。SM1 ...

  • 国密 SM 算法快速入门:Python 和 Java 示例

    注:这是一篇简单记录国密算法示例的笔记,不涉及具体算法原理的描述,如有需要可参考国家密码局公布的算法描述手册。 鸣...

  • 国密算法纯软件实现(java+javascript )

    国密算法简介 国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称、摘要等...

  • 自学资源整理--干货

    算法学习 书籍: 1、算法图解 Aditya Bhargava (作者) 袁国忠(译者) ——在非常适合入门,简单...

  • 国密芯片及国网安全接入平台终端开发说明

    一、简介 1.国密算法 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长...

  • DES/AES、SM4、RSA、SM2、SM3

    现以分组密码算法(DES和SM4)、公钥密码算法(RSA和SM2)、摘要算法(SM3)为例,谈谈国际算法和国密算法...

  • sm2算法理解

    sm2算法是国密标准的非对称算法标准。基于ecc的扩展 椭圆曲线算法 破解难度高于rsa算法。椭圆曲线方程:y2=...

  • 排序基础(一)

    排序算法 O(n2)的排序算法 为什么要学习O(n2)的排序算法? 基础 编码简单,易于实现,是一些简单场景的首选...

  • 椭圆加密简介

    椭圆加密算法 区块链入门时候最难理解的应该就时候这个椭圆加密算法,椭圆加密算法用于生成公钥生成,现在国密SM2算法...

网友评论

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

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