在此给出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. javascript 判断变量是否是数组(Array)

    过完春节又有好多人寻找新的机会,旁边的人面试完就会分享一些问题,明明会的但是面试的时候,想不全,面试官不满意...这个懊恼的行为,今天的文章跟大家分享下:javascript如何判断便是是数组. 1. ...

  2. H5: 表单验证失败的提示语

    前言     前端的童鞋在写页面时, 都不可避免的总会踩到表单验证这个坑. 这时候, 我们就要跪了, 因为要写一堆js来检查. 但是自从H5出现后, 很多常见的表达验证, 它都已经帮我们实现了, 让我 ...

  3. python-杨辉三角形

    [题目描述]输出n(0<n)行杨辉三角形,n由用户输入. [练习要求]请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释. [输入格式]一行中输入1个整数n. [输出格式]输出n行杨辉 ...

  4. IDEA安装配置Scala环境

    这里有详细步骤:windows上 IntelliJ IDEA安装scala环境 详细 初学

  5. 【Android开发】简单好用的阴影库 ShadowLayout

    先来看一张使用 ShadowLayout 库实现的各种阴影的效果图,如下图所示: 如上图所示,通过使用 ShadowLayout 可以控制阴影的颜色.范围.显示边界(上下左右四个边界).x 轴和 y ...

  6. c++对c的拓展_常量引用

    常量引用:不能通过引用去修改引用所指向的内容 const int &ref =val; // const int  *const ref =&val; 注意:可引用常量 (普通引用无法 ...

  7. What is ACPI

    What is ACPI, OnNow, and PCI Power Management? Microsoft began an initiative called OnNow to shorten ...

  8. 在UnityUI中绘制线状统计图

    ##先来个效果图 觉得不好看可以自己调整 ##1.绘制数据点 线状图一般由数据点和连线组成 在绘制连线之前,我们先标出数据点 这里我选择用Image图片来绘制数据点 新建Canvas,添加空物体Gra ...

  9. Fastjsonfan反序列链学习前置知识

    Fastjson前置知识 Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象. Fastjson 可以操作任何 ...

  10. 用于激光雷达的 APD,SPAD 和 SiPM 分析

    1. 术语及定义 1.1 激光雷达,Light Detection And Range, LiDAR  发射激光光束,并接收回波以获取目标三维和/或速度信息的系统: 1.2 机械旋转激光雷达,Mech ...