GM/T 0004-2012 SM3密码杂凑算法
GM/T 0004-2012 SM3 cryptographic hash algorithm
基本信息
本标准适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。同时,本标准还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。
发布历史
-
2012年03月
研制信息
- 起草单位:
- 清华大学、国家密码管理局商用密码检测中心、解放军信息工程大学、中国科学院数据与通信保护研究教育中心
- 起草人:
- 王小云、李峥、于红波、张超、罗鹏、吕述望
- 出版信息:
- 页数:14页 | 字数:24 千字 | 开本: 大16开
内容描述
ICS35040
L80.
备案号36831—2012
:
中华人民共和国密码行业标准
GM/T0004—2012
SM3密码杂凑算法
SM3cryptographichashalgorithm
2012-03-21发布2012-03-21实施
国家密码管理局发布
GM/T0004—2012
目次
前言…………………………
Ⅲ
范围………………………
11
术语和定义………………
21
符号………………………
31
常数与函数………………
42
初始值………………
4.12
常量…………………
4.22
布尔函数……………
4.32
置换函数……………
4.42
算法描述…………………
52
概述…………………
5.12
填充…………………
5.22
迭代压缩……………
5.33
杂凑值………………
5.44
附录资料性附录运算示例…………
A()5
示例………………
A.115
示例………………
A.227
Ⅰ
GM/T0004—2012
SM3密码杂凑算法
1范围
本标准规定了密码杂凑算法的计算方法和计算步骤并给出了运算示例
SM3,。
本标准适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成可
、,
满足多种密码应用的安全需求同时本标准还可为安全产品生产商提供产品和技术的标准定位以及
。,
标准化的参考提高安全产品的可信性与互操作性
,。
2术语和定义
下列术语和定义适用于本文件
。
21
.
比特串bitstring
具有或值的二进制数字序列
01。
22
.
大端big-endian
数据在内存中的一种表示格式规定左边为高有效位右边为低有效位即数的高阶字节放在存储
,,。
器的低地址数的低阶字节放在存储器的高地址
,。
23
.
消息message
任意有限长度的比特串本标准中消息作为杂凑算法的输入数据
,。
24
.
杂凑值hashvalue
杂凑算法作用于一条消息时输出的消息摘要比特串
()。
25
.
字word
长度为比特的组串
32()。
3符号
下列符号适用于本标准
。
ABCDEFGH个字寄存器或它们的值的串连
:8
i
B()第i个消息分组
:
CF压缩函数
:
FFj布尔函数随的变化取不同的表达式
:,j
GGj布尔函数随的变化取不同的表达式
:,j
IV初始值用于确定压缩函数寄存器的初态
:,
P压缩函数中的置换函数
0:
P消息扩展中的置换函数
1:
1
GM/T0004—2012
Tj算法常量随的变化取不同的值
:,j
m消息
:
m填充后的消息
′:
模运算
mod:
n消息分组个数
:
比特与运算
∧:32
比特或运算
∨:32
比特异或运算
췍「:32
比特非运算
:32
32比特算术加运算
+:mod2
k比特循环左移k比特运算
<<<:32
左向赋值运算符
←:
4常数与函数
41初始值
.
IV
=7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e
42常量
.
j
Tj79cc45190≤≤15
={j
7a879d8a16≤≤63
43布尔函数
.
XYZj
FFjXYZ췍췍0≤≤15
(,,)={XYXZYZj
(∧)∨(∧)∨(∧)16≤≤63
XYZj
GGjXYZ췍췍0≤≤15
(,,)={XYXZj
(∧)∨(∧)16≤≤63
式中XYZ为字
,,。
44置换函数
.
PXXXX
0()=췍(<<<9)췍(<<<17)
PXXXX
1()=췍(<<<15)췍(<<<23)
式中X为字
。
5算法描述
51概述
.
对长度为ll64比特的消息m杂凑算法经过填充迭代压缩和输出选裁生成杂凑值杂
(<2),SM3、,,
凑值输出长度为比特
256。
52填充
.
假设消息m的长度为l比特则首先将比特添加到消息的末尾再添加k个k是满
,“1”,“0”,
2
GM/T0004—2012
足lk的最小的非负整数然后再添加一个位比特串该比特串是长度l的二
+1+≡448(mod512)。64,
进制表示填充后的消息m′的比特长度为的倍数
。512。
例如对消息其长度l经填充得到比特串
::011000010110001001100011,=24,:
比特比特
42364
︷췍——췍——췍
011000010110001001100011100…0000…011000
췍—l的—二췍进制—表—示췍
53迭代压缩
.
531迭代过程
..
将填充后的消息m′按比特进行分组
512:
n
m′B(0)B(1)B(-1)
=…
其中nlk
=(++65)/512。
对m′按下列方式迭代
:
FORiTOn
=0-1
iii
V(+1)CFV()B()
=(,)
ENDFOR
i
其中CF是压缩函数V(0)为比特初始值IVB()为填充后的消息分组迭代压缩的结果
,256,,
n
为V()
。
532消息扩展
..
i
将消息分组B()按以下方法扩展生成个消息字WWWW′W′W′用于压缩函
1320,1,…67,0,1,…63,
数CF
:
i
将消息分组B()划分为个字WWW
a)160,1,…15。
FORjTO
b)=1667
WjPWjWjWjWjWj
췍1(-16췍-9췍(-3<<<15))췍(-13<<<7)췍-6
ENDFOR
FORjTO
c)=063
W′jWjWj
=췍+4
ENDFOR
533压缩函数
..
i
令ABCDEFGH为字寄存器SSSSTTTT为中间变量压缩函数V(+1)CF
,,,,,,,,1,2,1,2,=
ii
V()B()in计算过程描述如下
(,),0≤≤-1。:
i
ABCDEFGHV()
췍
FORjTO
=063
SSAETjj
1췍((<<<12)++(<<<(mod32)))<<<7
SSSSA
2췍1췍(<<<12)
TTFFjABCDSSW′j
1췍(,,)++2+
TTGGjEFGHSSWj
2췍(,,)++1+
DC
췍
CB
췍<<<9
BA
췍
3
GM/T0004—2012
ATT
췍1
HG
췍
GF
췍<<<19
FE
췍
EPTT
췍0(2)
ENDFOR
ii
V(+1)ABCDEFGHV()
췍췍
其中字的存储为格式左边为高有效位右边为低有效位
,big-endian,,。
54杂凑值
.
n
ABCDEFGHV()
췍
输出比特的杂凑值yABCDEFGH
256=。
4
推荐标准
- DB37/T 2439.1-2013 鲜活农产品生产流通管理规范 第1部分 蔬菜 2013-12-26
- DB37/T 2434-2013 离心泵质量评价技术规范 2013-12-26
- DB31/T 778-2014 超市服务管理规范 2014-02-17
- DB37/T 2454-2013 普通货物运输物流单证数据元规范 2013-12-26
- DB37/T 2447-2013 黄河三角洲地区盐碱地紫花苜蓿种子生产技术规程 2013-12-26
- DB37/ 2441-2013 陶瓷(硅酸铝)纤维棉单位产品电耗限额 2013-12-26
- DB37/T 2445-2013 复合变比电流互感器自动转换计量装置 2013-12-26
- DB37/T 2461-2013 地面气象资料基础产品技术规范 2013-12-26
- DB37/T 2453-2013 汽车零部件统一编码与标识 2013-12-26
- DB37/T 2449-2013 现代烟草农业生产组织方式与要求 2013-12-26