在此给出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. CountDownLatch和CyclicBarrier:如何让多线程步调一致?

    案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库:之后物流会生成派送单给用户发货,派送单保存在派送单库.为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单 ...

  2. 4.7 ROS分布式通信

    4.7 ROS分布式通信 ROS是一个分布式计算环境.一个运行中的ROS系统可以包含分布在多台计算机上多个节点.根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信. 因此,ROS对网络配置 ...

  3. 基于HTML5的网络拓扑图(1)

    什么是网络拓扑 网络拓扑,指构成网络的成员间特定的排列方式.分为物理的,即真实的.或者逻辑的,即虚拟的两种.如果两个网络的连接结构相同,我们就説它们的网络拓扑相同,尽管它们各自内部的物理接线.节点间距 ...

  4. 《CSS 揭秘》作者Lea Verou:我喜欢分享开源的行业文化

    本文仅用于学习和交流,不用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾: Lea VerouW3C CSS ...

  5. java中为什么接口中的属性和方法都默认为public?

    4)为什么接口中的属性和方法都默认为public?Sun公司当初为什么要把java的接口设计发明成这样? [新手可忽略不影响继续学习]答:如上所述,马克-to-win:既然接口强于抽象类能胜任作为和外 ...

  6. eclipse 执行main方法 错误: 找不到或无法加载主类

    检查环境变量是否正确 JAVA_HOME JAVA的实际安装目录 CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\ ...

  7. line-height: 1; line-height: 100%;是什么意思

    先简单看个例子: css 页面: 应该猜测出来了: line-height: 1; = line-height: 100%; = font-size: 50px; 把哪一个放到最后都是一样的.我理解的 ...

  8. css 实现随风摆动

    无标题文档 @-webkit-keyframes open { 0% { -webkit-transform: rotateX(-120deg); } 25% { -webkit-transform: ...

  9. gin框架使用【6.JSON渲染】

    package main import ( "github.com/gin-gonic/gin" ) type User struct { Id int `json:"i ...

  10. AcWing 165. 小猫爬山 DFS

    165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...