ICS35.040
L80
中华人民共和国国家标准
GB/T32905—2016
信息安全技术 SM3密码杂凑算法
Informationsecuritytechniques—SM3cryptographichashalgorithm
2016-08-29发布 2017-03-01实施
中华人民共和国国家质量监督检验检疫总局
中国国家标准化管理委员会发布目 次
前言 Ⅲ …………………………………………………………………………………………………………
1 范围 1 ………………………………………………………………………………………………………
2 术语和定义 1 ………………………………………………………………………………………………
3 符号 1 ………………………………………………………………………………………………………
4 常数与函数 2 ………………………………………………………………………………………………
4.1 初始值 2 ………………………………………………………………………………………………
4.2 常量 2 …………………………………………………………………………………………………
4.3 布尔函数 2 ……………………………………………………………………………………………
4.4 置换函数 2 ……………………………………………………………………………………………
5 算法描述 2 …………………………………………………………………………………………………
5.1 概述 2 …………………………………………………………………………………………………
5.2 填充 2 …………………………………………………………………………………………………
5.3 迭代压缩 3 ……………………………………………………………………………………………
5.4 输出杂凑值 4 …………………………………………………………………………………………
附录A(资料性附录) 运算示例 5 …………………………………………………………………………
ⅠGB/T32905—2016
前 言
本标准按照GB/T1.1—2009给出的规则起草。
本标准由国家密码管理局提出。
本标准由全国信息安全标准化技术委员会(SAC/TC260)归口。
本标准起草单位:清华大学、国家密码管理局商用密码检测中心、解放军信息工程大学、中国科学院
数据与通信保护研究教育中心。
本标准主要起草人:王小云、李峥、王永传、于红波、谢永泉、张超、罗鹏、吕述望。
ⅢGB/T32905—2016
信息安全技术 SM3密码杂凑算法
1 范围
本标准规定了SM3密码杂凑算法的计算方法和计算步骤,并给出了运算示例。
本标准适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可
满足多种密码应用的安全需求。
2 术语和定义
下列术语和定义适用于本文件。
2.1
比特串 bitstring
具有0或1值的二进制数字序列。
2.2
大端 big-endian
数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位。即数的高阶字节放在存储
器的低地址,数的低阶字节放在存储器的高地址。
2.3
消息 message
任意有限长度的比特串,本标准中消息作为杂凑算法的输入数据。
2.4
杂凑值 hashvalue
杂凑算法作用于一条消息时输出的消息摘要(比特串)。
2.5
字 word
长度为32比特的组(串)。
3 符号
下列符号适用于本文件。
ABCDEFGH:8个字寄存器或它们的值的串连
B(i):第i个消息分组
CF:压缩函数
FFj:布尔函数,随j的变化取不同的表达式
GGj:布尔函数,随j的变化取不同的表达式
IV:初始值,用于确定压缩函数寄存器的初态
P0:压缩函数中的置换函数
P1:消息扩展中的置换函数
Tj:算法常量,随j的变化取不同的值
1GB/T32905—2016
m:消息
m':填充后的消息
mod:模运算
n:消息分组个数
∧:32比特与运算
∨:32比特或运算
:32比特异或运算
:32比特非运算
+:mod232比特算术加运算
<<<k:32比特循环左移k比特运算
:左向赋值运算符
4 常数与函数
4.1 初始值
IV=7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e
4.2 常量
Tj=79cc4519 0≤j≤15
7a879d8a 16≤j≤63 {
4.3 布尔函数
FFj(X,Y,Z)=XYZ 0≤j≤15
(X∧Y)∨(X∧Z)∨(Y∧Z) 16≤j≤63 {
GGj(X,Y,Z)=XYZ 0≤j≤15
(X∧Y)∨(X∧Z) 16≤j≤63 {
其中X,Y,Z为字。
4.4 置换函数
P0(X)=X(X<<<9)(X<<<17)
P1(X)=X(X<<<15)(X<<<23)
其中X为字。
5 算法描述
5.1 概述
SM3密码杂凑算法的输入为长度为l(l<264)比特的消息m,经过填充、迭代压缩,生成杂凑值,杂
凑值输出长度为256比特。运算示例参见附录A。
5.2 填充
假设消息m的长度为l比特,则首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足l+1
+k≡448(mod512)的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表
2GB/T32905—2016
示。填充后的消息m'的比特长度为512的倍数。
例如:对消息:011000010110001001100011,其长度l=24,经填充得到比特串:
5.3 迭代压缩
5.3.1 迭代过程
将填充后的消息m'按512比特进行分组:m'=B(0)B(1)…B(n-1),其中n=(l+k+65)/512。
对m'按下列方式迭代:
FOR i=0 TO n-1
V(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:
第一步,将消息分组B(i)划分为16个字W0,W1,…W15。
第二步,
FOR j=16 TO 67
WiP1(Wi-16Wi-9(Wi-3<<<15))(Wi-13<<<7)Wi-6ENDFOR
第三步,
FOR j=0 TO 63
W'i=WiWi+4
ENDFOR
5.3.3 压缩函数
令A,B,C,D,E,F,G,H为字寄存器,SS1,SS2,TT1,TT2为中间变量,压缩函数Vi+1=
CF(V(i),B(i)),0≤i≤n-1。计算过程描述如下:
ABCDEFGHV(i)
FOR j=0 TO 63
SS1((A<<<12)+E+(Ti<<<(jmod32)))<<<7
SS2SS1(A<<<12)
TT1FFi(A,B,C)+D+SS2+W'i
TT2GGi(E,F,G)+H+SS1+Wi
DC
CB<<<9
BA
ATT1
HG
GF<<<19
3GB/T32905—2016
FE
EP0(TT2)
ENDFOR
V(i+1)ABCDEFGHV(i)
其中,字的存储为大端(big-endian),左边为高有效位,右边为低有效位。
5.4 输出杂凑值
ABCDEFGHV(n)
输出256比特的杂凑值y=ABCDEFGH。
4GB/T32905—2016
附 录 A
(资料性附录)
运 算 示 例
A.1 示例1
A.1.1 输入十六进制数据
616263
A.1.2 填充后的消息
6162638000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000018
A.1.3 扩展后的消息
W0W1…W67
6162638000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000018
9092e20000000000000c0606719c70ed000000008001801f939f7da900000000
2c6fa1f9adaaef14000000000001801e9a965f894971004823ce86a1b2d12f1b
e1dae338f8061807055d68be86cfd4811f447d83d9023dbf185898e0e0061807
050df55ccde0104ca5b9c955a7df01846e46cd08e3babdf870caa4220353af50
a92dbca15f33cfd2e16f6e89f70fe941ca5462dc85a9015276af6296c922bdb2
68378cf5975853440900872386faee742ab908b04a64bc50864e6
GB-T 32905-2016 信息安全技术 SM3密码杂凑算法
文档预览
中文文档
15 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共15页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2025-07-16 21:10:12上传分享