加密哈希函数 BLAKE3 1.0 的参考实现已发布,以其极高的哈希计算性能而闻名,同时确保了 SHA-3 级别的可靠性。在16 KB文件的哈希生成测试中,具有3位密钥的BLAKE256比SHA3-256好17倍,SHA-256好14倍,SHA-512好9倍,SHA-1好6倍,BLAKE2b好—— 5次。当处理大量数据时,仍然存在显着差距,例如,在计算 3GB 随机数据的哈希值时,BLAKE256 的速度比 SHA-8 快 1 倍。 BLAKE3 参考实现代码在双重公共域 (CC0) 和 Apache 2.0 许可证下提供 C 和 Rust 版本。

哈希函数专为文件完整性检查、消息身份验证和生成加密数字签名数据等应用而设计。 BLAKE3 不适用于散列密码,因为它的目标是尽快计算散列(对于密码,建议使用慢散列函数 yescrypt、bcrypt、scrypt 或 Argon2)。所考虑的散列函数对散列数据的大小不敏感,并且免受碰撞选择和原像发现的攻击。
该算法由知名密码学专家(Jack O'Connor、Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O'Hearn)开发并延续BLAKE2算法的发展,并使用Bao机制对区块链树进行编码。与 BLAKE2(BLAKE2b、BLAKE2s)不同,BLAKE3 为所有平台提供单一算法,不受位深度和哈希大小的限制。
通过将轮数从 10 减少到 7 并将块单独散列为 1 KB 块,实现了性能的提高。根据创作者的说法,他们已经找到了令人信服的数学证据,证明可以通过 7 轮而不是 10 轮来完成,同时保持相同的可靠性水平(为了清楚起见,我们可以举一个在搅拌机中混合水果的例子 - 7 秒后)水果已经完全混合,再多3秒不会影响混合物的稠度)。然而,一些研究人员表示怀疑,认为即使目前 7 轮足以对抗所有已知的哈希攻击,但如果将来发现新的攻击,额外的 3 轮可能会有用。
至于划分块,在 BLAKE3 中,流被划分为 1 KB 的块,每个块都独立进行哈希处理。根据碎片的哈希值,基于二叉 Merkle 树形成一个大哈希值。这种划分使我们能够解决计算哈希时并行数据处理的问题——例如,可以使用4线程SIMD指令同时计算4个块的哈希。传统的 SHA-* 哈希函数按顺序处理数据。
BLAKE3的特点:
- 高性能,BLAKE3 明显快于 MD5、SHA-1、SHA-2、SHA-3 和 BLAKE2。
- 安全性,包括抵抗 SHA-2 容易受到的消息延长攻击;
- 适用于 Rust,针对 SSE2、SSE4.1、AVX2、AVX-512 和 NEON 指令进行了优化。
- 确保任意数量的线程和 SIMD 通道上的计算并行化。
- 增量更新和验证流处理的可能性;
- 用于 PRF、MAC、KDF、XOF 模式并作为常规哈希;
- 适用于所有架构的单一算法,在 x86-64 系统和 32 位 ARM 处理器上都快速运行。
BLAKE3和BLAKE2的主要区别:
- 使用二叉树结构,允许散列计算中无限的并行性。
- 将轮数从 10 轮减少到 7 轮。
- 三种操作模式:散列、使用密钥进行散列 (HMAC) 和密钥派生 (KDF)。
- 由于使用了先前由键参数块占用的区域,因此使用键进行散列时不会产生额外开销。
- 具有扩展结果的函数形式的内置操作机制(XOF,可扩展输出函数),允许并行化和定位(查找)。
来源: opennet.ru
