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