zoukankan      html  css  js  c++  java
  • 中国商用密码杂凑算法标准SM3算法(数字签名)

    明天就要回家惹,阿姨生日,祝happy捏

    走之前,再学点东西叭!!!!

    上一篇叭了叭密码学的算法简历,其中信息摘要部分提到了SHA家族和MD5,今天跑了一趟SM3,就来看看SM3算法叭~~

    国密算法是国家密码管理局制定并公布的一系列国产密码算法,包括SM1\2\3\4\7\9、ZUC祖冲之算法等等。

     

    SM3概述

    SM3算法是在SHA-256基础上改进的一种算法,消息分组的长度为512位,生成的摘要长度为256位,与SHA256安全性相当。

    (和上一篇的SHA256很像咧)

    算法流程

    填充比特

    在原始数据末尾进行填充,使数据长度= 448 (mod 512),规则为先补第一个比特为1,然后都补0

    若长度刚好为448也必须填充,此时需要增加512位,即填充的位数[1,512]

    附加长度信息

    附加长度值就是将原始数据的长度信息(无符号整数64bit)附加到已经填充消息的后面。

    前两个附加长度就构成了一个长度为512整数倍的消息结构。

    初始化数据

    初始值IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e

    Tj  =  79cc4519 0 j 15

             7a879d8a 16 j 63

    置换函数,x是消息字

    P0(X) = X (X 9) (X 17)

    P1(X) = X (X 15) (X 23)

    8个字寄存器存储初始值ABCDEFGH

    迭代过程

    将消息m’分解成n个512-bit大小的块,m’=B0B1B2……Bn-1

    令V0=IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e

    Vi+1=CF(Vi,Bi0 i n-1  ,CF为压缩函数

    消息扩展(将上一步得到的每一个消息分组Bi扩展到132*32bit的信息w[0],w[1],w[2],……,w[67],  w‘[0],w’[1],w‘[2],……,w’[63] )

    选择一个512bit的块Bi,将其分解为16个32bit的(big-endian)字,记为w[0],w[1],……,w[15],作为扩展消息的前16个,在递推生成剩余的116个字。

    当16 j 67时,Wj P1(Wj16 Wj9 (Wj3 15)) (Wj13 7) Wj−6

    当  0 j 63时,W'j = Wj Wj+4

    压缩函数:每一次轮回64次,共n次

     

     

    杂凑值

    信息摘要y=ABCDEFGH=Vn

  • 相关阅读:
    大约 C++ 几个方面分析--overload, override, overwrite, rewrite
    Catalan数总结
    JAVA该队列中的数组,圆阵队列,链队列
    hdu4770:Lights Against Dudely(回溯 + 修剪)
    Birt
    Activity
    简单实现的Servlet文件上传,并显示
    阿里云centos 6.5 32位安装可视化界面的方法
    cannot mount database in EXCLUSIVE mode
    ORA-00845: MEMORY_TARGET not supported on this system
  • 原文地址:https://www.cnblogs.com/0211ji/p/15799530.html
Copyright © 2011-2022 走看看