【SM3哈希算法】算法原理

这篇具有很好参考价值的文章主要介绍了【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+k448mod512
    计算得出最小的非负整数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

填充后:

sm3,哈希算法,安全

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(n1)

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
    
  2. 符号定义:
    在详细讲解压缩函数之前,需要先看一些参考文献中的符号:
    sm3,哈希算法,安全
    sm3,哈希算法,安全
    sm3,哈希算法,安全
    P 0 ( X ) = X ⊕ ( X < < < 9 ) ⊕ ( X < < < 17 ) , P0(X)=X⊕(X<<<9)⊕(X<<<17), P0(X)=X(X<<<9)(X<<<17),

    P 1 ( X ) = X ⊕ ( X < < < 15 ) ⊕ ( X < < < 23 ) . P1 (X)=X⊕(X<<<15)⊕(X<<<23). P1(X)=X(X<<<15)(X<<<23).

    其中 ’<<<k‘ 表示的是32比特(1word)循环左移k比特运算

  3. 压缩函数:
    C F ( V , B ) CF(V,B) CFVB
    ​ 其中V为256比特256/32=8个字的长度,每个字分别用ABCDEFGH寄存器存储

    ​ 我们之前所分组生成的B为512字节,也就是16个字的长度,但是由于压缩函数中需要用到更长的B,因此此处对B进行一个扩展操作,将其扩展为132个字

    • 扩展操作:
      将消息分组B(i)划分为16个字W0…W15,然后接下来的W16到W67,由以下公式循环计算获得:

      sm3,哈希算法,安全

      W‘0到W’63由以下公式循环计算获得:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDqwqwb1-1686183881087)(file:///C:/Users/12235/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

      因此,最后获得扩展后的消息长度为68+64=132个字

      Example:

      当j=16

      sm3,哈希算法,安全

      sm3,哈希算法,安全

    • 压缩函数:
      令ABCDEFGH为字寄存器,SS1,SS2,TT1,TT2为中间变量
      sm3,哈希算法,安全

C语言实现

后续更新~文章来源地址https://www.toymoban.com/news/detail-715370.html

到了这里,关于【SM3哈希算法】算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sm3加密(32位哈希,64位十六进制数据)

    https://blog.csdn.net/nicai_hualuo/article/details/121555000 中介绍了sm3的算法并给出了可用代码,我只是将其拷贝过来,测试、去掉多余的输出,并进行了简单封装,以方便项目中使用。 修正了十六进制转字符串和十进制的方法支持小写的十六进制字符串。 用法见main函数。

    2024年02月11日
    浏览(43)
  • sm3国密算法怎么玩?原理看不懂,但是急着用怎么办?

    看到这篇文章的读者,估计都会急着想知道如何使用SM3国密算法的, 好吧,我们废话不多说,直接开门见山了。 关于加密算法的一些简单的理论知识,我直接附在下方了,可以自行查看。 https://download.csdn.net/download/skyksksksksks/87490417 接下来简要说明一下国密算法,SM3国密算法

    2023年04月23日
    浏览(44)
  • 国密SM2/SM3算法

    分类 1、SM1是一种分组加密算法 对称加密算法中的分组加密算法,其分组长度、秘钥长度都是128bit,算法安全保密强度跟 AES 相当,但是算法不公开,仅以IP核的形式存在于芯片中,需要通过加密芯片的接口进行调用。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙

    2024年02月05日
    浏览(66)
  • SM3密码杂凑算法

    SM3密码杂凑算法用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。 1.1.1 消息(message) 任意有限长度的比特串。本文文中的消息作为杂凑算法的输入数据。 1.1.2 杂凑值 (hash value) 杂凑算法作用于消息后输

    2024年02月12日
    浏览(42)
  • 国密SM3杂凑算法

    在了解SM3算法之前,我们有必要了解一下单向散列函数。 单向散列函数 (one-way hash function)有很多名字:压缩函数、收缩函数、 消息摘要 、指纹、密码校验和、信息完整性检验(Message Integrity Check,MIC)、操作检验码(Manipulation Detection Code,MDC)。不管你怎么叫,它都是现

    2023年04月18日
    浏览(47)
  • 国密算法SM2、SM3的使用

    1. SM2是非对称加密算法         它是基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号发布。 2.SM3是一种密码杂凑

    2024年02月06日
    浏览(48)
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    由于项目的需求,需要集成国密加解密,于是对国密又温故知新了一遍。同时整理了一下国密的一些算法。 本文主要从国密相关算法的简介、应用系统的集成、工具类的封装等方面入手,对国密进行深入的学习。 为了保障商用密码的安全性,国家密码局制定了一系列密码标

    2024年02月14日
    浏览(73)
  • Go实现国密算法SM2、SM3、SM4

    SM2椭圆曲线公钥密码算法 Public key cryptographic algorithm SM2 based on elliptic curves 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012 依赖包: github.com/tjfoc/gmsm/sm2 SM3密码杂凑算法 - SM3 cryptographic hash algorithm 遵循的SM

    2024年02月15日
    浏览(48)
  • vue中使用国密算法SM2、SM3、SM4

    gm-crypto相关文档:https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator vue3+element ui例子:https://gitee.com/huanglgln/vue-sys-manage-el  vue3+view ui例子:https://gitee.com/huanglgln/vue-sys-manage  vue3+Ant Design Vue ui例子:https://gitee.com/huanglgln/vue-sys-manage-adv 

    2024年02月15日
    浏览(54)
  • java 国密算法工具类(支持SM2 SM3 SM4)

    前言 工具采用BC库实现,支持前后端加解密,前端建议使用sm-crypto 引入pom依赖 基本使用如下 国密SM2算法 国密SM3算法 国密SM4算法使用

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包