国密SM3杂凑算法

本文介绍了国密SM3算法,一种由中国密码学家设计的单向散列函数,主要用于加密和数字签名。SM3算法基于SHA-256,具有高安全性。内容包括SM3的特性、用途、填充和消息扩展等详细步骤。

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

在了解SM3算法之前,我们有必要了解一下单向散列函数。

1. 单向散列函数

单向散列函数 (one-way hash function)有很多名字:压缩函数、收缩函数、消息摘要、指纹、密码校验和、信息完整性检验(Message Integrity Check,MIC)、操作检验码(Manipulation Detection Code,MDC)。不管你怎么叫,它都是现代密码学的中心。单向散列函数是许多协议的另一个结构模块。


散列函数长期以来一直在计算机科学中使用,无论从数学或其他角度看,散列函数就是把可变长度输入串(叫做预映射 ,pre-image)转换成固定长度(经常更短)输出串(叫做散列值 ,hash value)的一种函数。简单的散列函数就是对预映射的处理,并且返回由所有输入字节异或组成的字节。


这里的关键就是采集预映射的指纹:产生一个值,这个值能够指出候选预映射与真实的预映射是否有相同的值。因为散列函数是典型的多到一的函数,所以不能用它来确定两个串一定相同,但可用它来得到准确性的合理保证。


单向散列函数是在一个方向上运算的散列函数,从预映射的值很容易计算其散列值,但要使其散列值等于一个特殊值却很难。前面提到的散列函数不是单向函数:已知一个特殊的字节值,要产生一个字节串使它的异或结果等于那个值是很容易的事情。用单向散列函数你不可能那样做。好的散列函数也是无冲突的 (collision-free):难于产生两个预映射的值,使它们的散列值相同。


散列函数是公开的,对处理过程不用保密。单向散列函数的安全性是它的单向性。其输出不依赖于输入。平均而言,预映射值单个位的改变,将引起散列值中一半位的改变。已知一个散列值,要找到预映射的值,使它的散列值等于已知的散列值在计算上是不可行的。


可把单向散列函数看做是构成指纹文件的一种方法。如果你想验证某人持有特定的文件(你同时也持有该文件),但你不想让他将文件传给你,那么就要求他将该文件的单向散列值传送给你。如果他传送的散列值是正确的,那么几乎可以肯定地说他持有那份文件。这在金融交易中非常有用,你不希望在网络某个地方把提取100美元变成提取1000美元。一般情况下,应使用不带密钥的单向散列函数,以便任何人都能验证散列值。


2. 什么是SM3算法

SM3算法是由我国著名的密码学家王小云和国内其他专家共同设计的哈希算法,它只能用于加密而不能解密,是一种简单的单向算法。SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准,具体算法标准原始文本参见参考文献[1]。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。现已广泛应用于金融、交通、国家电网等重要经济领域。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒家肉山大魔王

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值