国密杂凑算法SM3

SM3是国家密码局公布的商用hash算法,适用于数字签名、消息认证和伪随机数生成。算法包括初始值设定、常量定义、布尔及置换函数,通过填充和迭代压缩过程生成256位的杂凑值。填充步骤中,消息末尾添加'1'和适当数量的'0',然后是64位的消息长度二进制表示,确保总长度为512的倍数。迭代压缩使用压缩函数CF,通过消息扩展和压缩函数计算更新寄存器状态,最终得到杂凑结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 引言

SM3杂凑算法是中国国家密码局公布的hash算法商用标准,能应用于数字签名与验证、消息认证码的生成以及伪随机数的生成。

1. 常数与函数

1.1 初始值

IV = 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e

1.2 常量

Tj={ 79cc4519    0≤j≤15;7a879d8a    16≤j≤63}

1.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为字(32bit)

1.4 置换函数

P0(X)= X^(X<<<9)^(X<<<17)

P1(X)= X^(X<<<15)^(X<<<23)

X 为字

2. 算法简介

SM3算法能够对长度为l(l<2^64)bit的消息m,进行填充和迭代压缩,生成杂凑值,最终的杂凑值为256bit。

2.1 填充过程

设消息m的长度为l bit,首先将bit"1"添加到消息末尾,再加k个“0”,k是满足l+1+k =448 mod 512的最小非负整数。然后再添加一个64bit串,该串是l的二进制表示,填充后的消息m'长度为512的整数倍。

2.2 迭代压缩

迭代过程:

m'按照512bit进行分组:m'=B(0)B(1)...B

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值