在了解SM3算法之前,我们有必要了解一下单向散列函数。
1. 单向散列函数
单向散列函数 (one-way hash function)有很多名字:压缩函数、收缩函数、消息摘要、指纹、密码校验和、信息完整性检验(Message Integrity Check,MIC)、操作检验码(Manipulation Detection Code,MDC)。不管你怎么叫,它都是现代密码学的中心。单向散列函数是许多协议的另一个结构模块。
散列函数长期以来一直在计算机科学中使用,无论从数学或其他角度看,散列函数就是把可变长度输入串(叫做预映射 ,pre-image)转换成固定长度(经常更短)输出串(叫做散列值 ,hash value)的一种函数。简单的散列函数就是对预映射的处理,并且返回由所有输入字节异或组成的字节。
这里的关键就是采集预映射的指纹:产生一个值,这个值能够指出候选预映射与真实的预映射是否有相同的值。因为散列函数是典型的多到一的函数,所以不能用它来确定两个串一定相同,但可用它来得到准确性的合理保证。
单向散列函数是在一个方向上运算的散列函数,从预映射的值很容易计算其散列值,但要使其散列值等于一个特殊值却很难。前面提到的散列函数不是单向函数:已知一个特殊的字节值,要产生一个字节串使它的异或结果等于那个值是很容易的事情。用单向散列函数你不可能那样做。好的散列函数也是无冲突的 (collision-free):难于产生两个预映射的值,使它们的散列值相同。
散列函数是公开的,对处理过程不用保密。单向散列函数的安全性是它的单向性。其输出不依赖于输入。平均而言,预映射值单个位的改变,将引起散列值中一半位的改变。已知一个散列值,要找到预映射的值,使它的散列值等于已知的散列值在计算上是不可行的。
可把单向散列函数看做是构成指纹文件的一种方法。如果你想验证某人持有特定的文件(你同时也持有该文件),但你不想让他将文件传给你,那么就要求他将该文件的单向散列值传送给你。如果他传送的散列值是正确的,那么几乎可以肯定地说他持有那份文件。这在金融交易中非常有用,你不希望在网络某个地方把提取100美元变成提取1000美元。一般情况下,应使用不带密钥的单向散列函数,以便任何人都能验证散列值。文章来源:https://www.toymoban.com/news/detail-417354.html
2. 什么是SM3算法
SM3算法是由我国著名的密码学家王小云和国内其他专家共同设计的哈希算法,它只能用于加密而不能解密,是一种简单的单向算法。SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准,具体算法标准原始文本参见参考文献[1]。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。现已广泛应用于金融、交通、国家电网等重要经济领文章来源地址https://www.toymoban.com/news/detail-417354.html
到了这里,关于国密SM3杂凑算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!