BLAKE / BLAKE2 / BLAKE3

BLAKE 算法族
设计者
Aumasson, Henzen, Meier, Pham (BLAKE)
Aumasson, Neves, Wilcox-O'Hearn, Winnerlein (BLAKE2)
O'Connor, Aumasson (BLAKE3)
首次发布
2008 / 2012 / 2020
类别
密码学哈希函数
输出长度
256 / 512 bit(可变)
结构
HAIFA (BLAKE/2)
简化的海绵结构 (BLAKE3)
基础
ChaCha 流密码
BLAKE3速度
~7 GB/s (多线程更快)
安全状态
安全

BLAKE 是一族基于 ChaCha 流密码核心的密码学哈希函数。BLAKE 参加了 NIST SHA-3 竞赛并进入最终五强;BLAKE2 是其优化版本,速度比 MD5 更快且安全性远超 MD5;BLAKE3 是 2020 年发布的最新版本,支持并行计算,性能进一步提升。

BLAKE(2008)

BLAKE 由 Jean-Philippe Aumasson、Luca Henzen、Willi Meier 和 Raphael C.-W. Phane 设计,提交给 NIST SHA-3 竞赛。BLAKE 使用 HAIFA(HAsh Iterative FrAmework)结构,压缩函数基于 ChaCha 的四分之一轮函数。BLAKE 在 SHA-3 竞赛中表现优异,但最终 Keccak 胜出。

  • BLAKE-256:32位字长,输出256位,14轮
  • BLAKE-512:64位字长,输出512位,16轮
BLAKE2(2012)

BLAKE2 由 Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O'Hearn 和 Christian Winnerlein 设计,是对 BLAKE 的工程优化。主要改进包括减少轮数(BLAKE2b 12轮、BLAKE2s 10轮)、简化填充方案、支持可调参数等。

变体字长轮数输出长度速度适用平台
BLAKE2b64 bit121~512 bit~3.5 GB/s64位平台
BLAKE2s32 bit101~256 bit~3.0 GB/s32位/嵌入式
BLAKE2bp64 bit12512 bit更高(4路并行)多核
BLAKE2sp32 bit10256 bit更高(4路并行)多核
BLAKE2Xb64 bit12任意长度-可扩展输出
BLAKE2Xs32 bit10任意长度-可扩展输出

BLAKE2 的独特特性:

  • 可调输出长度:1 到 512 位(BLAKE2b)或 1 到 256 位(BLAKE2s)
  • 密钥模式:可作为 MAC 使用,无需额外 HMAC 封装
  • 个性化:可为不同应用创建域分离的哈希实例
  • 加盐:内置盐值支持
BLAKE3(2020)

BLAKE3 由 Jack O'Connor 和 Jean-Philippe Aumasson 设计,是 BLAKE 系列的最新版本。BLAKE3 使用简化的海绵结构,每个块仅执行 7 轮压缩函数(比 BLAKE2b 的 12 轮更少),通过更宽的内部状态保证安全性。

BLAKE3 的核心创新:

  • 树形哈希:原生支持并行计算,可充分利用多核 CPU
  • 可扩展输出:默认输出 256 位,但可扩展到任意长度(XOF 模式)
  • 多用途:一个算法同时支持普通哈希、密钥哈希(MAC)、密钥派生(KDF)和可扩展输出
  • 极简压缩函数:基于 ChaCha 的简化版本,7 轮即足够
BLAKE3 伪代码(简化): compress(chunk chaining_value, block, counter, flags): working_state = chaining_value || block for round in 0..6: # 仅 7 轮 permute_and_mix(working_state) return first_half ^ second_half hash_tree(chunks): # 每个 chunk 独立计算 → 可并行! return merge(subtree_hashes)
性能对比
算法单线程速度多线程加速安全性推荐场景
BLAKE3~7.0 GB/s线性加速安全高性能通用哈希
BLAKE2b~3.5 GB/s有限(bp变体)安全64位平台通用
BLAKE2s~3.0 GB/s有限(sp变体)安全嵌入式/32位
SHA-256~1.8 GB/s不支持安全标准合规
MD5~3.5 GB/s不支持已破解不建议使用
应用
  • Apple 的文件系统 APFS 使用 BLAKE2b-256 进行校验
  • WireGuard VPN 使用 BLAKE2s 作为核心哈希
  • GNU Coreutils 的 b2sum 命令使用 BLAKE2b
  • 众多编程语言标准库已集成 BLAKE2/3(Python 3.6+, Rust, Go 等)
  • IPFS 使用 BLAKE2b-256 作为内容寻址哈希
  • Silicon Valley 的备份工具 restic 使用 BLAKE2b
参考文献
  1. Aumasson, J.-P., Henzen, L., Meier, W., Phan, R.C.-W. (2008). "SHA-3 proposal BLAKE". NIST SHA-3 Competition Submission.
  2. Aumasson, J.-P., Neves, S., Wilcox-O'Hearn, Z., Winnerlein, C. (2013). "BLAKE2: simpler, smaller, fast as MD5". SAC 2013.
  3. O'Connor, J., Aumasson, J.-P. (2020). "BLAKE3: one function, fast everywhere". blake3.io.