zoukankan      html  css  js  c++  java
  • 国密杂凑算法SM3

    0. 引言

    SM3杂凑算法是中国国家密码局公布的hash算法商用标准,能应用于数字签名与验证、消息认证码的生成以及伪随机数的生成。

    1. 常数与函数

    1.1 初始值

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

    1.2 常量

    Tj={ 79cc4519    0≤j≤15;7a879d8a    16≤j≤63}

    1.3 布尔函数

    FFj(X,Y,Z)={X^Y^Z  0≤j≤15;(X & Y)|(X&Z)|(Y&Z) 16≤j≤63}

    GGj(X,Y,Z)={X^Y^Z  0≤j≤15;(X & Y)|(~X&Z)16≤j≤63}

    X,Y,Z为字(32bit)

    1.4 置换函数

    P0(X)= X^(X<<<9)^(X<<<17)

    P1(X)= X^(X<<<15)^(X<<<23)

    X 为字

    2. 算法简介

    SM3算法能够对长度为l(l<2^64)bit的消息m,进行填充和迭代压缩,生成杂凑值,最终的杂凑值为256bit。

    2.1 填充过程

    设消息m的长度为l bit,首先将bit"1"添加到消息末尾,再加k个“0”,k是满足l+1+k =448 mod 512的最小非负整数。然后再添加一个64bit串,该串是l的二进制表示,填充后的消息m'长度为512的整数倍。

    2.2 迭代压缩

    迭代过程:

    m'按照512bit进行分组:m'=B(0)B(1)...B(n-1)

    n=(l+k+65)/512.

    迭代过程如下:

    FOR i=0 to n-1

      V(i+1) = CF(V(i),B(i)

    ENDFOR

    CF为压缩函数,V(0)为初始值IV,迭代压缩的结果为V(n)

    消息扩展:

    消息分组B(i)扩展生成132个字W0,W1,...W67,W0',W1'...W63'。

    a)消息分组B(i)划分为16个字W0,W1,...W15.

    b)FOR j=16 to 67

      Wj=P1(Wj-16 ^ Wj-9 ^ (Wj-3 <<<15)^(Wj-13<<<7)^Wj-6

       ENDFOR

    c)FOR j=0 to 63

      Wj'=Wj^Wj+4

       ENDFOR

    压缩函数:

    A/B/C/D/E/F/G/H为字寄存器,SS1/SS2/TT1/TT2为中间变量,压缩函数V(i+1) = CF(V(i),B(i))计算过程如下:

    ABCDEFGH = V(i)

    FOR j=0 to 63

      SS1 = ((A<<<12)+E+(Tj<<<j))<<<7

      SS2 = SS1^(A<<<12)

      TT1 = FFj(A,B,C)+D+SS2+Wj'

      TT2 = GGj(E,F,G)+H+SS1+Wj

      D = C

      C = B<<<9

      B = A

      A = TT1

      H = G

      G = F<<<19

      F = E

      E = P0(TT2)

    ENDFOR

    V(i+1) = ABCDEFGH^V(i)

    运算过程中,字按照大端格式存储。

    2.3 杂凑结果

    杂凑结果为256bit值y=ABCDEFGH=V(n)

  • 相关阅读:
    Java的三种代理模式
    关于C# 中的Attribute 特性
    jvm虚拟机原理1
    Java和C#中的接口对比(有你不知道的东西)
    c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
    Java运行时,各种类型存储介绍
    Java中的内存处理机制和final、static、final static总结
    Debug目录、Release目录,bin目录、obj目录,vshost.exe.config文件、.exe.config文件分析【C#】
    C#有关的vshost、exe、config格式说明
    C#中的程序集和命名空间
  • 原文地址:https://www.cnblogs.com/lkiller/p/5107693.html
Copyright © 2011-2022 走看看