BLAKE / BLAKE2 / BLAKE3
BLAKE 算法族
设计者
Aumasson, Henzen, Meier, Pham (BLAKE)
Aumasson, Neves, Wilcox-O'Hearn, Winnerlein (BLAKE2)
O'Connor, Aumasson (BLAKE3)
Aumasson, Neves, Wilcox-O'Hearn, Winnerlein (BLAKE2)
O'Connor, Aumasson (BLAKE3)
首次发布
2008 / 2012 / 2020
类别
密码学哈希函数
输出长度
256 / 512 bit(可变)
结构
HAIFA (BLAKE/2)
简化的海绵结构 (BLAKE3)
简化的海绵结构 (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轮)、简化填充方案、支持可调参数等。
| 变体 | 字长 | 轮数 | 输出长度 | 速度 | 适用平台 |
|---|---|---|---|---|---|
| BLAKE2b | 64 bit | 12 | 1~512 bit | ~3.5 GB/s | 64位平台 |
| BLAKE2s | 32 bit | 10 | 1~256 bit | ~3.0 GB/s | 32位/嵌入式 |
| BLAKE2bp | 64 bit | 12 | 512 bit | 更高(4路并行) | 多核 |
| BLAKE2sp | 32 bit | 10 | 256 bit | 更高(4路并行) | 多核 |
| BLAKE2Xb | 64 bit | 12 | 任意长度 | - | 可扩展输出 |
| BLAKE2Xs | 32 bit | 10 | 任意长度 | - | 可扩展输出 |
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
参考文献
- Aumasson, J.-P., Henzen, L., Meier, W., Phan, R.C.-W. (2008). "SHA-3 proposal BLAKE". NIST SHA-3 Competition Submission.
- Aumasson, J.-P., Neves, S., Wilcox-O'Hearn, Z., Winnerlein, C. (2013). "BLAKE2: simpler, smaller, fast as MD5". SAC 2013.
- O'Connor, J., Aumasson, J.-P. (2020). "BLAKE3: one function, fast everywhere". blake3.io.