在此给出SM3和Blake的对比

哈希函数

哈希算法 (Hash Algorithm) 是将任意长度的数据映射为固定长度数据的算法,也称为消息摘要。一般情况下,哈希算法有两个特点, 一是原始数据的细微变化(比如一个位翻转)会导致结果产生巨大差距;二是运算过程不可逆,理论上无法从结果还原输入数据。因此,哈希算法主要用于数据完整性校验和加密/签名。

哈希算法的安全性就在于碰撞难易度,即已知结果,构建出具有相同结果的输入数据的难易度。

常见的哈希算法有 MD5, SHA-1, SHA-2, SHA-3。其中 MD5 已经可以在 \(2^{21}\) 复杂度(在主流智能手机上只需30秒)内完成碰撞,谷歌也于17年早些时候在 \(2^{64}\) 复杂度(约 110 GPU年的计算量)内完成了第一次 SHA-1 碰撞。至此,MD5 和 SHA-1 已经在安全领域被废弃。

SM3



SM3是中国发布的国标杂凑密码算法,主要用于数字签名及验证、消息认证码生成及验证、随机数生成等。

SM3采用Merkle-Damgard结构,消息分组长度为512bit,输出摘要长度256bit。

方案

对长度为\(l(l < 264)\) 比特的消息\(m\),SM3杂凑算法经过填充迭代压缩,生成杂凑值,杂凑值长度 为256比特。

填充

迭代压缩





输出

特点

SM3压缩函数整体结构和SHA-256相似,但增加了一些新技术:增加16步全异或操作,消息双子介入,增加快速雪崩效应的P置换等,能有效的避免高概率的局部碰撞,有效抵抗碰撞行的差分分析、弱碰撞性的线性分析和比特追踪法等密码分析。

SM3 密码杂凑算法合理使用字加运算, 构成进位加 4 级流水, 在不显著增加硬件开销的情况下 ,采 用 P 置 换 , 加 速 了 算 法 的 雪 崩 效 应 , 提 高 了运算效率 同时 SM3 密码杂凑算法采用了适合32bit的微处理器和8bit智能卡实现的基本运算,具有跨平台的高效性和广泛的适用性。

性能

SM3整体性能和SHA-256同等条件下相似,下面和SHA-256和SHA-512对比:



(1)当消息长度为16字节,SM3执行速度是最高的。

(2)当消息长度大于等于64字节,SM3执行速度和SHA-256相当,高于其他的。

(3)X64环境下,当消息长度等于64字节,SM3执行速度和SHA-256相当,低于SHA3-256,高于SHA-512和Whirlpool。

(4)X64环境下,当消息长度大于64字节,SM3执行速度和SHA-256相当,低于SHA-512和SHA3-256,高于Whirlpool。



(1)SM3的ASIC实现面积优于其他四种算法,是性能优越的Merkle-Damgard结构的杂凑算法。



(1)SM3的FPGA实现面积由于其他四种,在Xilinx Virtex-5上的实现和性能于SHA-256相当。

安全性



其他

标准文档:【2】

标准源码:SM3源码

Blake

当前除了 SHA-2,SHA-3 之外,还有另外一个哈希算法系列可供选择,那就是 BLAKEBLAKE2 系列比常见的 MD5,SHA-1,SHA-2,SHA-3 更快,同时提供不低于 SHA-3 的安全性。BLAKE2 系列从著名的 ChaCha 算法衍生而来,有两个主要版本 BLAKE2b(BLAKE2)BLAKE2s

BLAKE2b 为 64 位 CPU(包括 ARM Neon)优化,可以生成最长64字节的摘要;BLAKE2s 为 8-32 位 CPU 设计,可以生成最长 32 字节的摘要。

二者的衍生版 BLAKE2bpBLAKE2sp 可以进行多核并行计算,在保持相同安全性的前提下,进一步提升计算速度。此外,BLAKE2 系列有一个特殊的变种,BLAKE2x,可以生成最多 4GiB 的“摘要”,可以用于 KDF(密钥派生)和 DRBG(固定随机数序列)。

BLAKE2 算法基于 BLAKE 算法,2012年被提出,也就是说在 Blake2 之前 Blake 系列算法已经产生。BLAKE 算法于2008年提出,它包含两个版本,一种基于32位消息用于产生最长256位的哈希结果,一种基于64位消息用于产生最长512位的哈希结果,BLAKE算法核心操作是不断地将8个散列中间结果和16个输入消息进行组合,从而产生下一轮组合的8个中间结果。按照最终截断的哈希长度,BLAKE-256BLAKE-224使用32位字分别产生256位和224位的哈希结果(也称消息摘要),而BLAKE-512BLAKE-384使用64位字并产生512位和384位哈希结果。

性能

下图显示BLAKE2在Skylake Intel CPU上的性能如何优于MD5、SHA-1、SHA-2和SHA-3(速度适用于使用单核进行哈希运算;使用多核,BLAKE2可以更快):

Blake3

比MD5、SHA-1、SHA-2、SHA-3和BLAKE2快得多。

更安全,不像MD5和SHA-1。和SHA-2不同,它可以防止长度延长。

可在任意数量的线程和SIMD通道上高度并行,因为它的内部是一棵Merkle树。

能够验证流媒体和增量更新,这也是因为它是一个Merkle树。

和普通的哈希函数一样,有A PRF, MAC, KDF, 和XOF

没有变体算法,在x86-64和更小的体系结构上都很快。

下面是在16 KiB的输入下,和其他算法相比的测试性能:

其他

总结

SM3总体和SHA-256相当,而Blake3总体比SHA-256更优。

参考

1、SM3 密 码 杂 凑 算 法-王小云

2、SM3密码杂凑算法-国标

3、BLAKE2: simpler, smaller, fast as MD5

4、An Efficient and Low-Power Design of the SM3 Hash Algorithm for IoT

5、不仅仅只是简单的哈希函数的Blake 和 Blake2

SM3和Blake的更多相关文章

  1. KlayGE 4.4中渲染的改进(一):只需要SM3的TBDR

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2736 KlayGE从4.0开始引入deferred rendering层(DR),并且这几个 ...

  2. Shader Model 3.0:Using Vertex Textures SM3:使用顶点纹理 (NVIDIA spec, 6800支持使用D3DFMT_R32F and D3DFMT_A32B32G32R32F的纹理格式实现Vertex Texture。)

    翻译者 周波 zhoubo22@hotmail.com 版权所有 Philipp Gerasimov Randima (Randy) Fernando Simon Green NVIDIA Corpo ...

  3. AES SHA-1 SM3 MD5

    AES是美国国家标准技术研究所NIST旨在代替DES的21世纪的加密标准. 输入:128bit 的消息分组 输出:128bit 的密文分组 密钥长度及圈数 128 10 192 12 256 14 消 ...

  4. SM3杂凑算法Python语言实现——第三部分

    SM3杂凑算法实现--第三部分 一.SM3 密码概述        我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...

  5. 国密SM3算法在linux和windows平台结果不一致问题

    什么是sm3,是一种类似于sha256的哈希算法,是咱们国家的哈希标准算法: 最近在使用sm3算法时,同样的一份数据,调用同样的sm3接口,发现得到的结果是不一样的: 那么在应用过的过程中,如果同样的 ...

  6. Expanded encryption and decryption signature algorithm SM2 & SM3

    Expanded encryption and decryption signature algorithm supports multiple signature digest algorithms ...

  7. 关于国密算法 SM1,SM2,SM3,SM4 的笔记

    国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...

  8. java sm3加密算法

      java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...

  9. 毕业设计预习:SM3密码杂凑算法基础学习

    SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...

随机推荐

  1. 顺利通过EMC实验(10)

  2. mobileSite开发Tips

    1,根节点(html,body)overflow属性会遮盖fixed定位元素 2,fixed元素点击时会弹出底部的菜单,应该是浏览器特性(safari) 3,fixed元素使用后,在body里面使用p ...

  3. HTML5相关文章和资源

    Polyfills HTML5 Cross Browser Polyfills canvas HTML5 JS实现毛玻璃效果(高斯模糊) 高斯模糊的算法Canvas 内部元素添加事件处理 应用场景 P ...

  4. python-筛法求素数

    [题目描述]用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数. [练习要求]请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释. [输入格式 ...

  5. centos6的yum源更新版本

    概述 centos6系统从2020年12月1号开始不再维护,官方的yum源不再可用,同时国内的阿里云镜像和163镜像也都不再可用. 但是我们有一些老的服务器仍然在使用centos6系统版本,依赖库的安 ...

  6. Flutter 打印日志封装及创建Live Templates快捷打印日志

    只需要输入logi 就可出现以下代码 /// tag(类名.函数名)LogUtil.i(index, tag: '_MyHomePageState.onItemClick:');打印日志效果如下: 实 ...

  7. Java进阶 JVM 内存与垃圾回收篇(一)

    JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...

  8. 微信小程序 因文件大小不能使用本地背景图片解决方法

    因微信文件只允许2m,所以不能给图片太多空间.所以出现背景图片的坑 解决方案1: 把背景图片放到服务器文件件下,直接将路径给url. 得是https开头的路径才可以 解决方案2:将图片转换成base6 ...

  9. SSL及GMVPN握手协议详解

    之前写过一篇文章搞懂密码学基础及SSL/TLS协议,主要介绍了加密学的基础,并从整体上对SSL协议做了介绍.由于篇幅原因,SSL握手的详细流程没有深入介绍.本文将拆解握手流程,在消息级别对握手进行详细 ...

  10. android软件简约记账app开发day09-主页面模块,收支记账信息的展示

    android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...