【SM3哈希算法】算法原理

【SM3哈希算法】算法原理

参考:

文章目录

一、算法简介

SM3算法是一种密码散列函数标准,由国家密码管理局发布。它的安全性和SHA-256相当,适用于商用密码应用中的数字签名和验证、消息认证码生成和验证、随机数生成等。

二、基本原理

将输入的消息分成512位的分组,并对每个分组进行填充、分组、扩展、迭代压缩等操作,最后输出256位的摘要值。这里给大家展示一个之前密码学课程设计,通过调用java已有的密码学库实现的SM3哈希值计算:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TmZ2BVSN-1686183884493)(null)]
输入:
Hello World!
输出:
0AC0A9FEF0D212AA76A3C431F793853CE145659CA1D14B114E96C1215CF26582

三、具体流程

1、填充

此处我们记输入的消息为m,假设m的长度为l比特,填充后得到的消息为m‘。因为我们输入的消息内容长度不是固定的,但是为了后续能够运算,需要将消息m填充为512倍数的消息m’。

填充步骤:

  1. 先将1比特添加到消息的末尾
  2. 通过公式

l

1

k

448

m

o

d

512

l + 1 + k ≡ 448 mod 512

l+1+k≡448mod512
计算得出最小的非负整数k,然后再添加k个0
补充:448=512-64,448是因为最后需要添加l的64比特长度二进制表示,详见下一步。
3. 最后,再添加一个64位比特串,比特串的内容是m的长度 ‘l’ 的二进制表示

Example

输入的消息	 m:01100001 01100010 01100011
输入m的长度: l = 24
计算出来的k: l+1+k≡24+1+423≡448 mod 512----->k=423

填充后:

image-20230607221659996

2、分组

分组这一步,就是简单的将上一步填充得到的消息m‘,由于填充后,m’的长度为512的倍数,因此分组只需将m‘分为512位长度的n (n=(l+k+64)/512) 个小组即可。(||表示拼接)

m

=

B

(

0

)

B

(

1

)

B

(

n

1

)

m’ = B(0)||B(1)||···||B(n-1)

m’=B(0)∣∣B(1)∣∣⋅⋅⋅∣∣B(n−1)

3、迭代压缩

针对每个分组的内容,进行n轮迭代运算,所得结果V(n)即为最终的哈希值。

  1. 迭代原理:
for i=0 to n-1
	v(i+1)=CF(V(i), B(i))
endfor

CF():压缩函数

B(i):填充后的消息分组

V(n):最终结果

V(0):256比特的初始值IV,IV的初始值已提前规定

V(0)=IV=7380166f 4914b2b9 172442d7
        da8a0600 a96130bc 163138aa
        E38dee4d b0fb0e4e

  1. 符号定义:
    在详细讲解压缩函数之前,需要先看一些参考文献中的符号:
    image-20230607224407091
    image-20230607224547508
    image-20230608073646387

P

0

(

X

)

=

X

(

X

<

<

<

9

)

(

X

<

<

<

17

)

,

P0(X)=X⊕(X<<<9)⊕(X<<<17),

P0(X)=X⊕(X<<<9)⊕(X<<<17),

P

1

(

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

[外链图片转存中…(img-kcI4Fpse-1715565783392)]

[外链图片转存中…(img-yjKouSkc-1715565783392)]

[外链图片转存中…(img-YbKGYi0m-1715565783393)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值