2026/1/12 6:21:19
网站建设
项目流程
自己做网站推广产品,夜狼seo,建设公司企业简介,平面设计师网站Sm3加密算法
SM3是中国国家密码管理局2010年发布的商用密码杂凑算法标准#xff0c;生成256位固定长度的哈希值#xff0c;适用于数字签名、消息认证、密码存储等场景。其设计基于Merkle-Damgrd结构#xff0c;安全性等效于国际SHA-256算法#xff0c;但采用定制化的压缩函…Sm3加密算法SM3是中国国家密码管理局2010年发布的商用密码杂凑算法标准生成256位固定长度的哈希值适用于数字签名、消息认证、密码存储等场景。其设计基于Merkle-Damgård结构安全性等效于国际SHA-256算法但采用定制化的压缩函数增强抗攻击能力。二、核心流程消息填充将输入补足至512位倍数补10...064位消息长度消息扩展将512位分组扩展为132个32位字迭代压缩通过64轮压缩函数更新8个寄存器状态结果生成最终寄存器组合输出256位哈希值算法的本质给任意长度的数据(l≤264)经过填充、迭代压缩后生成固定长度的杂凑值,这个固定长度就是256比特。处理过程第一步填充。使填充后的数据的长度是512的整数倍。在数据的末尾上加一个1然后把原始数据的长度用64比特表示放在最后面再看看现在的数据的长度值离512的整数还差多少个差多少个就填多少个0在加的这个1和64比特的长度之间。第二步分组。把填充后的信息按照512比特一个分组进行分组。如果分成了n组就是B0,B1,…,Bn−1个分组。第三步迭代压缩。对每一个分组都进行消息扩展再借助寄存器得到最后的杂凑值哈希值。迭代压缩这里有很多中间变量和寄存器的操作具体还是看一下算法。分组的目的是为了把填充后的消息m′能拆成512比特在对每个512比特分别进行扩展和迭代压缩。前一个分组的结果会参与下一个分组的迭代压缩计算。经过一连串的迭代计算后最终寄存器中的结果为SM3算法处理得到的杂凑值。2. 相关符号和函数2.1 一些符号定义mod模运算∧32比特与运算∨32比特或运算¬32比特非运算⊕32比特异或运算由于输入法打不出这个符号因此下面的配图里用xor代替了mod223算数加运算⋘k循环左移k比特运算←左向赋值运算符2.2 一些固定值和函数初始值IV7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4d b0fb0e4e常量Tj{79cc45190≤j≤157a879d8a16≤j≤63布尔函数FFj(X,Y,Z){X⊕Y⊕Z0≤j≤15(X∧Y)∨(X∧Z)∨(Y∧Z)16≤j≤63GGj(X,Y,Z){X⊕Y⊕Z0≤j≤15(X∧Y)∨(¬X∧Z)16≤j≤63式中X,Y,Z为字。置换函数P0(X)X⊕(X⋘9)⊕(X⋘17)P1(X)X⊕(X⋘15)⊕(X⋘23)式中X为字。3. 算法流程3.1 填充假设消息m的长度为l比特。首先将比特“1”添加到消息的末尾再添加k个0,k是满足l1k≡448mod512的最小非负整数。然后再添加一个64位比特串该比特串是长度l的二进制表示。填充后的消息m′的比特长度为512的倍数。3.2 分组将填充后的消息m′按512比特进行分组m′B0B1…Bn−1,n(lk65)/5123.3 迭代压缩3.3.1 消息扩展将消息分组Bi按以下方法扩展生成132个字W0,W1,…,W67,W′0,W′1,⋯W′63。每一个分组Bi都需要扩展成这么多的字每一个结果都会作为压缩函数的中间参数参与迭代计算。a) 将消息分组Bi划分为16个字W0,W1,…,W15b) FOR j16 TO 67 Wj←P1(Wj−16⊕Wj−9⊕(Wj−3⋘15))⊕(Wj−13⋘7)⊕Wj−6ENDFORc) FOR j0 TO 63 W′jWj⊕Wj4ENDFOR3.3.2 压缩函数令A,B,C,D,E,F,G,H为字寄存器SS1, SS2, TT1, TT2为中间变量压缩函数Vi1CF(V(i),B(i)),0≤i≤n−1计算过程如下ABCDEFGH←V(i)FOR j0 TO 63 SS1←((A⋘12)E(Tj⋘j))⋘7 SS2←SS1⊕(A⋘12) TT1←FFj(A,B,C)DSS2W′j TT2←(E,F,G)HSS1Wj D←C C←B⋘9 B←A A←TT1 H←G G←F⋘19 F←E E←P0(TT2)ENDFORVi1←ABCDEFGH⊕V(i)其中字的存储为大端big-endian格式。3.3.3 杂凑值结果ABCDEFGH←V(n)输出256比特的杂凑值yABCDEFGH。