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

路径:首页 > 知识文章 > 文章内容
文章种类: 作者:管理员 发布时间:
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 一种安全、快速且可并行的加密哈希函数