编辑: Cerise银子 2019-07-04
SM3密码杂凑算法 SM3 Cryptographic Hash Algorithm 国家密码管理局 2010年12月目目目次次次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.3.1 迭代过程

3 5.3.2 消息扩展

3 5.3.3 压缩函数

3 5.4 杂凑值

4 附录A (资料性附录) 运算示例・5 A.1 示例1

5 A.1 示例2

7 I SM3密码杂凑算法

1 范范范围 围围本文本规定了SM3密码杂凑算法的计算方法和计算步骤,并给出了运算示例. 本文本适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成, 可满足多种密码应用的安全需求.同时,本文本还可为安全产品生产商提供产品和技术的标准定位以 及标准化的参考,提高安全产品的可信性与互操作性.

2 术术术语 语 语和 和 和定 定 定义 义义1.1 比比比特 特 特串 串串bit string 由0和1组成的二进制数字序列. 1.2 大大大端 端端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数的高阶字节放在存储 器的低地址,数的低阶字节放在存储器的高地址. 1.3 消消消息 息息message 任意有限长度的比特串.本文本中消息作为杂凑算法的输入数据. 1.4 杂杂杂凑 凑 凑值 值值hash value 杂凑算法作用于消息后输出的特定长度的比特串.本文本中的杂凑值长度为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 =7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e 4.2 常量 Tj = { 79cc4519

0 ≤ j ≤

15 7a879d8a

16 ≤ j ≤

63 4.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 为字. 4.4 置换函数 P0(X) = X ? (X ? 9) ? (X ? 17) P1(X) = X ? (X ? 15) ? (X ? 23) 式中X为字.

5 算算算法 法 法描 描 描述 述述5.1 概述 对长度为l(l <

264 ) 比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度 为256比特. 5.2 填充 假设消息m 的长度为l 比特.首先将比特

1 添加到消息的末尾,再添加k 个

0 ,k是满 足l +

1 + k ≡ 448mod512 的最小的非负整数.然后再添加一个64位比特串,该比特串是长度l的二进 制表示.填充后的消息m′ 的比特长度为512的倍数. 例如:对消息01100001

01100010 01100011,其长度l=24,经填充得到比特串:

01100001 01100010

01100011 1 423比特

00 ・ ・ ・

00 64比特

00 ・ ・ ・

011000 l的二进制表示

2 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: a)将消息分组B(i) 划分为16个字W0, W1,W15. b)FOR j=16 TO

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题