BLAKE2
Samuel Neves
Zooko Wilcox-O'Hearn
Christian Winnerlein
BLAKE2 是 BLAKE 的工程优化版本,于 2012 年发布。BLAKE2 的设计目标是在保持与 BLAKE 相当的安全性的同时,大幅提升性能。事实证明,BLAKE2 比 MD5 更快,同时提供了远超 MD5 的安全性,成为"又快又安全"的典范。
BLAKE 在 SHA-3 竞赛中表现出色,但作为竞赛提交方案,它需要满足 NIST 的各种要求(如多输出长度、盐值支持等),这些要求增加了实现复杂度。BLAKE2 的设计者认为,可以通过简化这些可选特性来大幅提升性能,同时不牺牲核心安全性。
BLAKE2 将轮数从 BLAKE 的 14/16 轮减少到 12/10 轮:
| 算法 | 原始轮数 | BLAKE2 轮数 | 减少 |
|---|---|---|---|
| BLAKE-256 → BLAKE2s | 14 轮 | 10 轮 | 29% |
| BLAKE-512 → BLAKE2b | 16 轮 | 12 轮 | 25% |
减少轮数的依据是安全余量分析:BLAKE 的最佳已知攻击仅能攻击到 2.5 轮,即使减少 4 轮,仍有足够的安全余量。
BLAKE 使用 HAIFA 结构,需要在消息末尾添加长度信息。BLAKE2 简化了这一过程:
BLAKE2 将盐值和计数器从压缩函数参数移到了初始化阶段,减少了每次压缩调用的开销。
BLAKE2 引入了参数块,在初始化时一次性配置所有参数,避免了运行时的条件判断:
BLAKE2 支持可选的树形哈希模式(BLAKE2bp/BLAKE2sp),可以充分利用多核处理器:
| 变体 | 字长 | 轮数 | 输出长度 | 并行度 | 适用场景 |
|---|---|---|---|---|---|
| BLAKE2b | 64 bit | 12 | 1~512 bit | 串行 | 64 位平台通用 |
| BLAKE2s | 32 bit | 10 | 1~256 bit | 串行 | 32 位/嵌入式 |
| BLAKE2bp | 64 bit | 12 | 512 bit | 4 路 | 多核 64 位 |
| BLAKE2sp | 32 bit | 10 | 256 bit | 4 路 | 多核 32 位 |
| BLAKE2Xb | 64 bit | 12 | 任意长度 | 串行 | 可扩展输出 |
| BLAKE2Xs | 32 bit | 10 | 任意长度 | 串行 | 可扩展输出 |
BLAKE2 的压缩函数与 BLAKE 基本相同,但有以下改进:
- 轮常量:使用固定的轮常量,避免了 BLAKE 中的盐值参数
- 消息调度:使用简化的消息置换表,减少了内存访问
- 最终化:简化了最终输出的计算
BLAKE2 内置密钥支持,可直接作为 MAC(消息认证码)使用,无需 HMAC 封装:
这比 HMAC 更高效,因为 HMAC 需要两次哈希调用。
BLAKE2 支持个性化字符串,可以为不同应用创建域分离的哈希实例:
BLAKE2 支持 1 到 512 位(BLAKE2b)或 1 到 256 位(BLAKE2s)的任意输出长度:
| 算法 | 单线程速度 | 安全性 | 特点 |
|---|---|---|---|
| BLAKE2b | ~3.5 GB/s | 安全 | 64 位平台首选 |
| BLAKE2s | ~3.0 GB/s | 安全 | 嵌入式首选 |
| MD5 | ~3.5 GB/s | 已破解 | 速度相当但不安全 |
| SHA-256 | ~1.8 GB/s | 安全 | BLAKE2b 快约 2 倍 |
| SHA-3 | ~1.5 GB/s | 安全 | BLAKE2b 快约 2.3 倍 |
- Apple APFS:使用 BLAKE2b-256 进行文件系统校验
- WireGuard VPN:使用 BLAKE2s 作为核心哈希
- GNU Coreutils:
b2sum命令使用 BLAKE2b - IPFS:使用 BLAKE2b-256 作为内容寻址哈希
- restic:备份工具使用 BLAKE2b 进行数据去重
- Python 3.6+:
hashlib.blake2b/hashlib.blake2s - Rust:
blake2crate - Go:
golang.org/x/crypto/blake2
BLAKE2 与 BLAKE 的关系可以类比为:
- BLAKE = 竞赛方案,功能全面,性能优秀
- BLAKE2 = 生产版本,去掉可选特性,优化关键路径
BLAKE2 保持了 BLAKE 的核心安全性(相同的 G 函数、相同的扩散特性),但通过工程优化实现了更好的性能。这种"竞赛方案 → 生产优化"的路径在密码学中并不常见,BLAKE2 是一个成功的案例。
- Aumasson, J.-P., Neves, S., Wilcox-O'Hearn, Z., Winnerlein, C. (2013). "BLAKE2: simpler, smaller, fast as MD5". SAC 2013.
- Aumasson, J.-P., Neves, S., Wilcox-O'Hearn, Z., Winnerlein, C. (2013). "BLAKE2: hashing faster than MD5". Cryptology ePrint Archive.
- BLAKE2 官方规范:https://www.blake2.net/blake2.pdf