您好,欢迎访问三七文档
SM3密码杂凑算法SM3CryptographicHashAlgorithm国家密码管理局2010年12月目目目次次次1范围12术语和定义13符号14常数与函数24.1初始值24.2常量24.3布尔函数24.4置换函数25算法描述25.1概述25.2填充25.3迭代压缩35.3.1迭代过程35.3.2消息扩展35.3.3压缩函数35.4杂凑值4附录A(资料性附录)运算示例5A.1示例15A.1示例27ISM3密码杂凑算法1范范范围围围本文本规定了SM3密码杂凑算法的计算方法和计算步骤,并给出了运算示例。本文本适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。同时,本文本还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。2术术术语语语和和和定定定义义义1.1比比比特特特串串串bitstring由0和1组成的二进制数字序列。1.2大大大端端端big-endian数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位。数的高阶字节放在存储器的低地址,数的低阶字节放在存储器的高地址。1.3消消消息息息message任意有限长度的比特串。本文本中消息作为杂凑算法的输入数据。1.4杂杂杂凑凑凑值值值hashvalue杂凑算法作用于消息后输出的特定长度的比特串。本文本中的杂凑值长度为256比特。1.5字字字word长度为32的比特串。3符符符号号号下列符号适用于本文本。ABCDEFGH:8个字寄存器或它们的值的串联B(i):第i个消息分组CF:压缩函数FFj:布尔函数,随j的变化取不同的表达式GGj:布尔函数,随j的变化取不同的表达式IV:初始值,用于确定压缩函数寄存器的初态P0:压缩函数中的置换函数P1:消息扩展中的置换函数Tj:常量,随j的变化取不同的值m:消息m′:填充后的消息mod:模运算^:32比特与运算_:32比特或运算1:32比特异或运算::32比特非运算+:mod232算术加运算≪k:循环左移k比特运算:左向赋值运算符4常常常数数数与与与函函函数数数4.1初始值IV=7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e4.2常量Tj={79cc45190j157a879d8a16j634.3布尔函数FFj(X;Y;Z)={XYZ0j15(X^Y)_(X^Z)_(Y^Z)16j63GGj(X;Y;Z)={XYZ0j15(X^Y)_(:X^Z)16j63式中X,Y,Z为字。4.4置换函数P0(X)=X(X≪9)(X≪17)P1(X)=X(X≪15)(X≪23)式中X为字。5算算算法法法描描描述述述5.1概述对长度为l(l264)比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。5.2填充假设消息m的长度为l比特。首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足l+1+k448mod512的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m′的比特长度为512的倍数。例如:对消息011000010110001001100011,其长度l=24,经填充得到比特串:0110000101100010011000111423比特z}|{000064比特z}|{00011000|{z}l的二进制表示25.3迭代压缩5.3.1迭代过程将填充后的消息m′按512比特进行分组:m′=B(0)B(1)B(n−1)其中n=(l+k+65)/512。对m′按下列方式迭代:FORi=0TOn-1V(i+1)=CF(V(i);B(i))ENDFOR其中CF是压缩函数,V(0)为256比特初始值IV,B(i)为填充后的消息分组,迭代压缩的结果为V(n)。5.3.2消息扩展将消息分组B(i)按以下方法扩展生成132个字W0;W1;;W67;W′0;W′1;;W′63,用于压缩函数CF:a)将消息分组B(i)划分为16个字W0;W1;;W15。b)FORj=16TO67WjP1(Wj−16Wj−9(Wj−3≪15))(Wj−13≪7)Wj−6ENDFORc)FORj=0TO63W′j=WjWj+4ENDFOR5.3.3压缩函数令A,B,C,D,E,F,G,H为字寄存器,SS1,SS2,TT1,TT2为中间变量,压缩函数Vi+1=CF(V(i);B(i)),0in 1。计算过程描述如下:ABCDEFGHV(i)FORj=0TO63SS1((A≪12)+E+(Tj≪j))≪7SS2SS1(A≪12)TT1FFj(A;B;C)+D+SS2+W′jTT2GGj(E;F;G)+H+SS1+WjDCCB≪9BAATT1HGGF≪19FEEP0(TT2)ENDFORV(i+1)ABCDEFGHV(i)其中,字的存储为大端(big-endian)格式。35.4杂凑值ABCDEFGHV(n)输出256比特的杂凑值y=ABCDEFGH。4附附附录录录A(资资资料料料性性性附附附录录录)运运运算算算示示示例例例A.1示例1输输输入入入消消消息息息为为为“““abc”””,,,其其其ASCII码码码表表表示示示为为为616263填填填充充充后后后的的的消消消息息息61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018扩扩扩展展展后后后的的的消消消息息息W0W1W67616263800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189092e20000000000000c0606719c70ed000000008001801f939f7da9000000002c6fa1f9adaaef14000000000001801e9a965f894971004823ce86a1b2d12f1be1dae338f8061807055d68be86cfd4811f447d83d9023dbf185898e0e0061807050df55ccde0104ca5b9c955a7df01846e46cd08e3babdf870caa4220353af50a92dbca15f33cfd2e16f6e89f70fe941ca5462dc85a9015276af6296c922bdb268378cf5975853440900872386faee742ab908b04a64bc50864e6e08f07e6590325c8f78accb8011e11db9ddb99c0545W′0W′1W′636162638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189092e20000000000000c0606719c70f59092e2008001801f93937baf719c70ed2c6fa1f92dab6f0b939f7da90001801eb6f9fe70e4dbef5c23ce86a1b2d0af057b4cbcb1b177184f2693ee1f341efb9afe9e9ebb210425b81d05f05e66c9cc861a4988df14e22df3bde151b547d919836b4b38542e5aadb4d5736d77a48caed4c76b71a9bc89722a91a5caabf45c46116379de7dda9ace8097c00c1f3e2d54f3a263ee2912f152167fafe5b54fd853c6428e8445dd3cef148f4ee92b76848be418e587c8e6af3c416753d7d549e260d5迭迭迭代代代压压压
本文标题:SM3密码杂凑算法
链接地址:https://www.777doc.com/doc-5365956 .html