SM3和Blake
在此给出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 之外,还有另外一个哈希算法系列可供选择,那就是 BLAKE,BLAKE2 系列比常见的 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 字节的摘要。
二者的衍生版 BLAKE2bp 和 BLAKE2sp 可以进行多核并行计算,在保持相同安全性的前提下,进一步提升计算速度。此外,BLAKE2 系列有一个特殊的变种,BLAKE2x,可以生成最多 4GiB 的“摘要”,可以用于 KDF(密钥派生)和 DRBG(固定随机数序列)。
BLAKE2 算法基于 BLAKE 算法,2012年被提出,也就是说在 Blake2 之前 Blake 系列算法已经产生。BLAKE 算法于2008年提出,它包含两个版本,一种基于32位消息用于产生最长256位的哈希结果,一种基于64位消息用于产生最长512位的哈希结果,BLAKE算法核心操作是不断地将8个散列中间结果和16个输入消息进行组合,从而产生下一轮组合的8个中间结果。按照最终截断的哈希长度,BLAKE-256和BLAKE-224使用32位字分别产生256位和224位的哈希结果(也称消息摘要),而BLAKE-512和BLAKE-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的输入下,和其他算法相比的测试性能:

其他
- 官网:Balke2
- Blake3(github):the official Rust and C implementations of the BLAKE3 cryptographic hash function
- Blake(github):SHA-3 finalist (reference code)
- Blake2(github):BLAKE2 official implementations
- Blake2论文:【3】:提出了Balke2算法,并分析其性能和安全性
- RFC 7693:The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC):提出变体BLAKE2b和BLAKE2s
- BLAKE2X:提出变体BLAKE2X
- Blake3论文:提出Blake3算法
总结
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的更多相关文章
- KlayGE 4.4中渲染的改进(一):只需要SM3的TBDR
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2736 KlayGE从4.0开始引入deferred rendering层(DR),并且这几个 ...
- 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 ...
- AES SHA-1 SM3 MD5
AES是美国国家标准技术研究所NIST旨在代替DES的21世纪的加密标准. 输入:128bit 的消息分组 输出:128bit 的密文分组 密钥长度及圈数 128 10 192 12 256 14 消 ...
- SM3杂凑算法Python语言实现——第三部分
SM3杂凑算法实现--第三部分 一.SM3 密码概述 我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...
- 国密SM3算法在linux和windows平台结果不一致问题
什么是sm3,是一种类似于sha256的哈希算法,是咱们国家的哈希标准算法: 最近在使用sm3算法时,同样的一份数据,调用同样的sm3接口,发现得到的结果是不一样的: 那么在应用过的过程中,如果同样的 ...
- Expanded encryption and decryption signature algorithm SM2 & SM3
Expanded encryption and decryption signature algorithm supports multiple signature digest algorithms ...
- 关于国密算法 SM1,SM2,SM3,SM4 的笔记
国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...
- java sm3加密算法
java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...
- 毕业设计预习:SM3密码杂凑算法基础学习
SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...
随机推荐
- Python - 文档格式转换(CSV与JSON)
- (stm32f103学习总结)—USART串口通信
一. USART简介 USART即通用同步异步收发器,它能够灵活地与外部设备进行全双工 数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求. UART即通用异步收发器,它是在USART基 ...
- AGENS算法
3.2 层次方法 下图,上面是从左到右由5个簇逐渐合并成1个簇的过程,下面是从右到左由一个簇逐渐分裂成5个簇的过程 AGENS算法 最后面一句话是重点,假设有<A,B>,<C,D&g ...
- ESD@TVS选型
一.工作原理 ESD ESD静电保护元件,又称静电抑制二极管.ESD是多个TVS晶粒或二极管采用不同的布局做成具有特定功能的多路或单路ESD保护器件,主要应用于各类通信接口静电保护,如USB.HDMI ...
- 【weex开发】vue-swipe 滑动组件的使用
一,vue-swipe简介 vue-swipe 是饿了么团队开发的vue专用的轮播图插件: 可以实现简单的图片和view轮播,可控制动画时长,可限制手动滑动: 简而言之,可以实现轮播,也可以实现ppt ...
- java中当static块和构造函数同时出现,顺序是?
静态块先于构造函数执行 class Student { int age; String name; static int count; public Student() { ...
- error: failed to push some refs to 'git@gitee.com:xxxx'
出现错误的主要原因是向上仓库的一些文件(README.md,LICENSE等文件)不在本地代码目录中 git pull --rebase origin master 通过这行命令, 可以解决 注释福利 ...
- Spring Boot配置druid监控页功能
1.导入坐标 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- 正则表达式小技巧,sql中in的字符串处理
工作中我经常写sql,当写带in的语句时,需要敲好多单引号,逗号,敲写起来容易易出错.因此,我写了一个小工具,处理这种繁琐工作.原理简单,利用正则表达式匹配.替换. 先看界面,一个html页面,包含三 ...
- redis 指定db库导入导出数据
最近根据之前的项目重新改编一个新的项目,发现上一个项目的搭建者,把一些区域权限和划分放在redis上存储,因此不得不照搬过来,所以搜索一下相关如何做的 发现一个比较简单的做法,记录一下操作过程,方便以 ...