首页 > 编程语言 >lake3哈希算法的介绍、特点、原理与Blake3.Net的特点

lake3哈希算法的介绍、特点、原理与Blake3.Net的特点

时间:2024-10-12 13:59:41浏览次数:5  
标签:Blake3 5.0 SHA256 lake3 SHA 哈希 ns

1. Blake3的介绍与特点

哈希函数专为文件完整性验证等应用而设计,加密数字签名的消息认证和数据生成。 Blake3不是为散列密码而设计的,因为它旨在尽可能快地计算散列(对于密码,建议使用慢散列和escrypt、bcrypt、scrypt 或Argon2函数)。

所讨论的散列函数对正在处理的数据大小不敏感,并且可以防止冲突搜索和原像攻击。

该算法是由著名密码学家开发并继续开发Blake2算法并使用Bao机制对区块链树进行编码。与Blake2(Blake2b、BlakeE2s)不同,Blake3 为所有平台提供单一算法 这与位宽和哈希大小无关。

至于块拆分,在Blake3 中,流被拆分为1KB块每个哈希片段都是独立的。大哈希是在基于Merkle二叉树的碎片哈希的基础上形成的。

这种分离可以解决并行化数据处理的问题计算散列时; 例如,您可以使用4线SIMD指令同时计算4块哈希。传统的SHA-*哈希函数按顺序处理数据。

Blake3 的特点是:
  • 在 PRF、MAC、KDF、XOF模式和普通哈希中的应用;
  • 适用于所有体系结构的算法,在x86-64系统和32位ARM处理器上都很快。

2. Blake3、Blake2Fast、SHA256哈希算法效率比较
2.1 在Intel Ice Lake 或 AMD Zen 之前的CPU没有英特尔SHA的CPU扩展。

在这种情况下,Blake3比内置的SHA256快大约5倍到10倍。

以下基准测试是在英特尔酷睿i7-4980HQCPU2.80 GHz(Haswell)上运行的:
// Benchmarks
// BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1139 (1909/November2018Update/19H2)
// Intel Core i7-4980HQ CPU 2.80GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
// .NET Core SDK=5.0.100
// [Host] : .NET Core 5.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
// DefaultJob : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
算法 字节数 耗时 最大误差 平均误差 平均耗时
Blake3 4 85.06 ns 1.704 ns 2.154 ns 83.55 ns
Blake2Fast 4 138.30 ns 0.755 ns 0.670 ns 138.36 ns
SHA256 4 531.82 ns 0.842 ns 0.778 ns 531.85 ns
Blake3 100 145.12 ns 2.899 ns 4.064 142.56
Blake2Fast 100 153.41 ns 3.057 ns 4.760 ns 150.66 ns
SHA256 100 803.32 ns 11.420 ns 8.916 ns 797.37 ns
Blake3 1000 999.01 ns 19.658 ns 26.908 ns 984. 60 ns
Blake2Fast 1000 789.41 ns 15.814 ns 18.825 ns 784.82 ns
SHA256 1000 4,489.81 ns 84.032 ns 78.603 ns 4,525.27 ns
Blake3 10000 4,099.92 ns 49.985 ns 46.756 ns 4,121.94 ns
Blake2Fast 10000 7,593.55 ns 127.193 ns 112.753 ns 7,609,07 ns
SHA256 10000 40,799.82 ns 769.102 ns 1386.850 ns 41,460.32 ns
Blake3 100000 28,491.58 ns 394.692 ns 369.195 ns 28,498.05 ns
Blake2FAST 100000 78,732.84 ns 648.124 ns 606.255 ns 78,887.56 ns
SHA256 100000 408,581.45 ns 2,359.416 ns 2,207.000 ns 409,059.91 ns
Blake3 1000000 138,481.22 ns 1,300.797 ns 1,216.767 ns 1,38.460.16 ns
Blake2Fast 1000000 724,092.30 ns 6,995.547 ns 6,543.639 ns 720,115.33 ns
SHA256 1000000 3,6999,812.03 ns 37,739.460 ns 35,301.514 ns 3,678,276.17 ns

2.2 使用SHA CPU扩展的结果

如果你的CPU有Intel SHA CPU扩展,那么Blake3的~平均比SHA256快2倍。

以下基准测试是在AMD锐龙9 3900X上运行的:
// Benchmarks
// BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.630 (2004/?/20H1)
// AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
// .NET Core SDK=5.0.100
// [Host] : .NET Core 5.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
// DefaultJob : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
算法 字节数 耗时 最大误差 平均误差
Blake3 4 77.86 ns 0.332 ns 0.310 ns
Blake2Fast 4 123.57 ns 0.939 ns 0.879 ns
SHA256 4 244.31 ns 1.157 ns 1.082 ns
Blake3 100 125.60 ns 0.497 ns 0.440
Blake2Fast 100 124.48 ns 1.053 ns 0.985 ns
SHA256 100 279.82 ns 1.853 ns 1.734 ns
Blake3 1000 888.90 ns 0.873 ns 0.681 ns
Blake2Fast 1000 790.85 ns 4.364 ns 3.645 ns
SHA256 1000 700.81 ns 2.078 ns 1.842 ns
Blake3 10000 3,508.37 ns 23.411 ns 21.899 ns
Blake2Fast 10000 7,569.91 ns 40.661 ns 38.034 ns
SHA256 10000 4,922.90 ns 14.360 ns 13.432 ns
Blake3 100000 22,109.48 ns 47.699 ns 39.830 ns
Blake2FAST 100000 75,937 ns 223.972 ns 209.503 ns
SHA256 100000 48,655.78 ns 102.273 ns 246.435 ns
Blake3 1000000 117,936.94 ns 263.454 ns 246.435 ns
Blake2Fast 1000000 768,752.03 ns 1,836.783 ns 1,718.128 ns
SHA256 1000000 485,944.26 ns 1,326.657 ns 1,240.956 ns

3. Blake3原理

Blake3一种安全、快速且可并行的加密哈希函数

Blake3加密哈希函数的特点是比MD5、SHA-1、SHA-2、SHA-3和BLAKE2快得多,而且它更安全,不像MD5和SHA-1。 与 SHA-2不同,可安全防止长度扩展。

它可以跨任意数量的线程和SIMD通道高度并行化,因为它内部是一个Merkle树,并且具有无变量算法,在x86-64和较小的体系结构上都很快。

Blake3依赖于已建立的哈希函数 BLake2的优化实例,并在原始的宝树模式下。 Blake3论文中提供了规范和设计论证。 默认输出大小为256位。

在16KB文件的哈希生成测试中,Blake3使用256位密钥超过SHA3-256 17倍,超过SHA-256 14 倍, SHA-512 9次,SHA-1 6次和 Blake2b 5次。

这是一个即使在处理大量数据时仍然存在的重大差距,例如,在计算3GB随机数据的哈希时,Blake8比SHA-256快1倍。

哈希算法效率图

通过将轮数从10轮减少到7轮并将块分别散列到1KB 块中,实现了性能提升。根据创作者的说法,他们找到了令人信服的数学证明,证明你可以用7轮而不是10轮来完成,同时保持相同水平的可靠性。

同时,也有研究人员表示怀疑,认为即使目前7轮足以应对所有已知的哈希攻击,如果未来检测到新的攻击,额外的3轮可能会有用。


4. 关于Blake3和Blake2的主要区别:

在哈希计算中使用二叉树结构实现无限并行。

将回合数从 10 减少到 7。

三种操作模式:散列、键控散列 (HMAC) 和密钥生成 (KDF)。

由于使用了先前由密钥的参数块占用的区域,因此在对密钥进行散列时没有额外的开销。

以可扩展输出函数 (XOF) 的形式工作的内置机制,允许它并行化和定位搜索。


5. Blake3.Net的一些特征

Blake3.NET是一个围绕Blake3加密哈希函数的SIMD Rust实现的一个快速托管包装器。

Blake3.NET支持以平系统平台:
  • win-x64, win-x86, win-arm64, win-arm
  • linux-x64, linux-arm64, linux-arm
  • osx-x64, osx-arm64

Blake3.Net的特点:
  • 兼容。净7.0+。(当前最新.net版本:.net8.0)
  • 快速互操作与跨度友好的API。
  • API类似于Blake3生锈的API。
  • CPU SIMD硬件加速与动态CPU特性检测。
  • 支持多个平台。
  • 增量更新API,通过Hasher进行增量更新API。
  • 支持通过Hasher进行的多线程散列。更新退出加入。

总结

Blake3现在的多数hash算法效率高,如果是大进行文件hash计算,或者对效率有较高要求的程序,那么Blake3是个不错的选择。


Blake3.Net的下载
Github:https://github.com/xoofx/Blake3.NET/tree/master

Blake3其它编程语言版本:
Github:https://github.com/BLAKE3-team/BLAKE3

参考:
BLAKE3 一种安全、快速且可并行的加密哈希函数原文地址:Blake3哈希算法的介绍、特点、原理与Blake3.Net的特点
https://www.awaterbloom.com/ArticleDetail?id=5

标签:Blake3,5.0,SHA256,lake3,SHA,哈希,ns
From: https://www.cnblogs.com/freemindblog/p/18460416

相关文章

  • 哈希
    哈希常用于需要\(O(1)\)比较两个\(O(n)\)的东西。可以采用双模数减少冲突概率。哈希冲突率的粗略计算:可以看做\(\frac{n}{\prodmod}\)。字符串哈希常用于需要\(O(1)\)比较两个字符串,可以代替一些字符串匹配的KMP题目。以及可以使用哈希+二分的技巧\(\log\)的时......
  • SMB签名是一种通过数字签名技术保障数据在网络传输过程中的完整性和来源验证的机制。
    SMB签名是ServerMessageBlock(SMB)协议中的一种安全机制,旨在确保数据的完整性和身份验证。1.什么是SMB签名?SMB签名是一种通过数字签名技术保障数据在网络传输过程中的完整性和来源验证的机制。它通过对数据进行哈希处理,并附加一个签名,确保接收方能够确认收到的数据没有被篡改。......
  • Redis 数据类型hash(哈希)
    目录1基本特性2主要操作命令 2.1设置和获取字段2.1.1 HSETkeyfieldvalue2.1.2 HGETkeyfield2.1.3 HMSETkeyfield1value1[field2value2...] 2.1.4 HMGETkeyfield1[field2...]2.2检查字段是否存在2.2.1 HEXISTSkeyfield2.3获取所有字段和......
  • 散列表(Hash table哈希表)应用案例
    文章目录散列表基础内容散列表的基本操作包括:散列表的关键组成部分:散列表的优点:散列表的缺点:实现散列表的方法1.散列函数的设计2.冲突解决策略3.重新哈希实现示例具体案例展示步骤:Python实现:输出结果:扩展功能:Python实现:输出结果:新增功能解释:进一步扩展:散列表......
  • 记录一道面试题(哈希表 稀疏矩阵)
    题目:有一个游戏中的三维地图,是由i,j,k三个轴组成的三维网络。每个立方体由不同的种类代表,比如空气,水,沙子,泥土。地图上方的空气方块,不会经常变动且数量占大多数,下方是各种类型的方块,会经常相互转换(水变沙子,沙子变泥土等)。问题:请你实现一个存储该地图的方案(地图方块和对应类型)。要......
  • 【JS】哈希法解决两数之和
    思路使用哈希法:需要快速查询一个元素是否出现过,或者一个元素是否在集合里时本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,符合要求的某元素是否遍历过,也就是是否出现在这个集合。因为要返回下标,所以使用Map集合,key存放元素值,value存放元素下......
  • 【模板】树哈希
    https://peehs-moorhsum.blog.uoj.ac/blog/7891题目描述对一棵树求hash值,以判断两棵树是否同构。有有根树和无根树两个版本。solution找一个随机函数\(f\)(可以选xor-shift),然后每个点的子树的哈希值如下计算:\[h_u=1+\sum_{v}f(h_v)\]这是有根树的情况,对于无根树,1.可以换......
  • 洛谷 P7469 [NOI Online 2021 提高组] 积木小赛(字符串哈希)
    题目传送门解题思路读题后,我们可以发现,字母串  只能从两边删除,于是我们可以枚举一个区间 ,然后在字母串  中匹配(可以用指针来进行匹配),同时可以做字符串哈希去重。注意如果怕被卡,可以用双模哈希;记得开longlong代码#include<bits/stdc++.h>usingnamespacestd;......
  • python3常用库之哈希hashlib和hmac使用
    hashlibimporthashlib#MD5是最常见的哈希算法,速度很快,生成结果是固定的128bit/16字节,通常用一个32位的16进制字符串表示。md5=hashlib.md5()md5.update("hello".encode())print(md5.hexdigest())#5d41402abc4b2a76b9719d911017c592#数据量很大时分块多次调用up......
  • 哈希表和字符串哈希算法
    哈希哈希表(HashTable)是一种数据结构,它可以通过一个哈希函数将键(key)映射到存储位置,从而实现高效的数据查找、插入和删除操作。哈希表的特点是能够在常数时间(O(1))内完成查找和更新,前提是哈希冲突处理得当。哈希表的基本结构数组:哈希表的底层通常是一个数组,数组中的每个元......