国密杂凑算法SM3

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(n-1)

n=(l+k+65)/512.

迭代过程如下:

FOR i=0 to n-1

  V(i+1) = CF(V(i),B(i)

ENDFOR

CF为压缩函数,V(0)为初始值IV,迭代压缩的结果为V(n)

消息扩展:

消息分组B(i)扩展生成132个字W0,W1,...W67,W0‘,W1‘...W63‘。

a)消息分组B(i)划分为16个字W0,W1,...W15.

b)FOR j=16 to 67

  Wj=P1(Wj-16 ^ Wj-9 ^ (Wj-3 <<<15)^(Wj-13<<<7)^Wj-6

ENDFOR

c)FOR j=0 to 63

  Wj‘=Wj^Wj+4

ENDFOR

压缩函数:

A/B/C/D/E/F/G/H为字寄存器,SS1/SS2/TT1/TT2为中间变量,压缩函数V(i+1) = CF(V(i),B(i))计算过程如下:

ABCDEFGH = V(i)

FOR j=0 to 63

  SS1 = ((A<<<12)+E+(Tj<<<j))<<<7

  SS2 = SS1^(A<<<12)

  TT1 = FFj(A,B,C)+D+SS2+Wj‘

  TT2 = GGj(E,F,G)+H+SS1+Wj

  D = C

  C = B<<<9

  B = A

  A = TT1

  H = G

  G = F<<<19

  F = E

  E = P0(TT2)

ENDFOR

V(i+1) = ABCDEFGH^V(i)

运算过程中,字按照大端格式存储。

2.3 杂凑结果

杂凑结果为256bit值y=ABCDEFGH=V(n)

时间: 2024-11-15 00:28:43

国密杂凑算法SM3的相关文章

SM3杂凑算法实现——第三部分

SM3杂凑算法实现--第三部分 一.SM3 密码概述 我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密码算法. 首先要明白SM3是一个什么样的东西:单向加密算法.也可以称之为密码哈希算法.杂凑算法.摘要算法,都可以指这类算法.顾名思义,这类算法只能加密不能解密,所以不是为了直接保护数据的秘密性而存在的,不是让使用者解密这串密文得到原文而使用的.这类算法一般用于保护数据明文的完整性,抗篡改而产生.只要输入的是同样的

谈谈PBOC3.0中使用的国密SM2算法

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/39780825 作者:小马 一 知识准备 SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用password算法.本身是基于ECC椭圆曲线算法的.所以要讲sm2, 先要弄懂ECC. 全然理解ECC算法须要一定的数学功底.由于涉及到射影平面坐标系,齐次方程求解, 曲线的运算规则等概念. 这里不做过多的数学分析(主要是我自己也没有全然整明确). 想要深入了解ECC的我推荐网

PBOC3.0中使用的国密SM2算法详解

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/39780825 作者:小马 一 知识准备 SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法.本身是基于ECC椭圆曲线算法的,所以要讲sm2, 先要弄懂ECC. 完全理解ECC算法需要一定的数学功底,因为涉及到射影平面坐标系,齐次方程求解, 曲线的运算规则等概念.这里不做过多的数学分析(主要是我自己也没有完全整明白).想要深入了解ECC的我推荐网名为ZMWorm

国密算法SM2证书制作

国密算法sm2非对称算法椭圆曲线 原文:http://www.jonllen.cn/jonllen/work/162.aspx 前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密算法DES(AES)和摘要MD5(SHA1)也相应改变,分别对应SM1.SM3算法,SM1算法基于硬件实现,SM2.SM3算法已公开. SM2签名验证算法 SM2签名同样也

2017-2018-2 20179204《网络攻防实践》第十三周学习总结 python实现国密算法

国密商用算法是指国密SM系列算法,包括基于椭圆曲线的非对称公钥密码SM2算法.密码杂凑SM3算法.分组密码SM4算法,还有只以IP核形式提供的非公开算法流程的对称密码SM1算法等. 第1节 SM2非对称密码算法原理 国密SM2算法是商用的ECC椭圆曲线公钥密码算法,其具有公钥加密.密钥交换以及数字签名的功能.椭圆曲线参数并没有给出推荐的曲线,曲线参数的产生需要利用一定的算法产生.但在实际使用中,国密局推荐使用素数域256 位椭圆曲线,其曲线方程为y^2= x^3+ax+b.参数如下: 其中p是大

国密算法

算法分类 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用. SM2为非对称加密,基于ECC.该算法已公开.由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA.ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA. SM3 消息摘要.可以用MD5作为对比理解.该算法已公

推荐一款能支持国密SM2的浏览器——密信浏览器

密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净.简洁.无广告,提供简洁.快速的浏览体验,满足国密安全合规需求.目前,密信浏览器支持Windows 32位和64位系统,未来将逐步推出Linux.Mac及移动端版本. 密信浏览器的主要特性 1.兼容国密标准和国际标准密信浏览器遵循国家标准<GM/T 0024-2014: SSL ×××技术规范>,支

Centos7 编译安装 Openssl 1.1.1 支持国密标准

OpenSSL项目新版本增加了中国SM2/SM3/SM4算法的支持: SM2椭圆曲线: https://github.com/openssl/openssl/pull/4793 SM3哈希摘要: https://github.com/openssl/openssl/pull/4616 SM4对称加密: https://github.com/openssl/openssl/pull/4552 参考: 中国×××制定的商业密码算法标准 <GM/T 0006-2012 密码应用标识规范>定义国密算法

[C#.NET] 如何 使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改

[C#.NET] 如果使用 HashAlgorithm 类 / 杂凑验证文件是否有被修改 1.HashAlgorithm 类 提供我们两种Hash算法包含了SHA1.SHA256.SHA384.SHA512.MD5. 2.HashAlgorithm 类 可以用来验证文件是否有被修改过. 3.只要有修改过文件内容就会产生不可预期的杂凑值变化,如果在网络上下载一个文件,通常都会附上该文件的MD5验证码,那就是要来验证文件是否被有心人士修改过,以确保文件是安全的. 4.我们可以不用知道杂凑算法,只要会