BLAKE
Luca Henzen
Willi Meier
Raphael C.-W. Phan
BLAKE 是 2008 年提交给 NIST SHA-3 竞赛的密码学哈希函数,由 Jean-Philippe Aumasson 等人设计。BLAKE 在 64 个参赛算法中脱颖而出,进入最终五强(BLAKE、Grøstl、JH、Keccak、Skein),但最终败给 Keccak。尽管如此,BLAKE 的设计理念和安全性表现极为出色,成为后续 BLAKE2 和 BLAKE3 的坚实基础。
2007 年,NIST 发起 SHA-3 竞赛,旨在寻找 SHA-2 的替代算法。当时 SHA-2 虽然安全,但结构与 SHA-1 相似,业界担心一旦 SHA-2 被攻破,将没有备用方案。BLAKE 的设计目标是:
- 高安全性:抵抗已知的所有哈希函数攻击(长度扩展、碰撞、原像等)
- 高性能:在软件实现中达到或超过 SHA-2 的速度
- 简洁性:基于已有的、经过充分分析的密码学原语
BLAKE 使用 HAIFA(HAsh Iterative FrAmework)迭代结构,这是 Merkle-Damgård 结构的改进版本。HAIFA 由 Orr Dunkelman 和 Eli Biham 于 2006 年提出,解决了原始结构的两个关键问题:
- 长度扩展攻击:知道 H(m) 和 m 的长度,可以计算 H(m || padding || extension)
- 多碰撞攻击:Joux 的多碰撞攻击表明,找到 n 段消息的 2^n 碰撞的代价仅相当于 n 次找到单个碰撞
HAIFA 在压缩函数中引入两个额外参数:
- 盐值(salt):随机化压缩函数,抵抗多碰撞攻击
- 计数器(counter):记录已处理的比特数,抵抗长度扩展攻击
BLAKE 的压缩函数基于 ChaCha 流密码的四分之一轮函数(quarter-round function)。ChaCha 由 Daniel J. Bernstein 于 2008 年设计,是 Salsa20 的改进版本,具有以下优势:
- 高扩散性:每个输出位依赖于所有输入位
- 高效实现:仅使用加法、异或和循环移位操作
- 安全性证明:对差分攻击和线性攻击有可证明的安全界
G 函数是 BLAKE 的核心操作,每轮执行 8 次(4 次列操作 + 4 次对角线操作)。G 函数的设计保证了高度的非线性和扩散性:
| 变体 | 字长 | 轮数 | 输出长度 | 消息块大小 | 应用场景 |
|---|---|---|---|---|---|
| BLAKE-224 | 32 bit | 14 | 224 bit | 512 bit | SHA-224 替代 |
| BLAKE-256 | 32 bit | 14 | 256 bit | 512 bit | SHA-256 替代 |
| BLAKE-384 | 64 bit | 16 | 384 bit | 1024 bit | SHA-384 替代 |
| BLAKE-512 | 64 bit | 16 | 512 bit | 1024 bit | SHA-512 替代 |
BLAKE-256 和 BLAKE-512 是两个主要变体。32 位版本适用于嵌入式设备和 32 位处理器,64 位版本在现代 64 位处理器上性能更优。
在 SHA-3 竞赛期间,BLAKE 经受了严格的公开分析:
- 碰撞攻击:直到竞赛结束,未发现有效的碰撞攻击。最佳攻击仅能攻击到 2.5 轮(BLAKE-256 有 14 轮)
- 原像攻击:无已知的原像攻击,安全性达到理论最优
- 长度扩展:HAIFA 结构天然抵抗长度扩展攻击
- 多碰撞:盐值机制有效抵抗 Joux 的多碰撞攻击
尽管 BLAKE 安全性极高,但最终 Keccak 胜出,主要原因包括:
- 结构差异:Keccak 使用海绵结构(sponge),与 SHA-2 的 Merkle-Damgård 结构完全不同,提供了更好的"算法多样性"
- 硬件性能:Keccak 在硬件实现中表现优异,适合资源受限环境
- 灵活性:Keccak 的海绵结构天然支持可扩展输出(XOF)
然而,BLAKE 在软件性能上的优势使其在后续发展中脱颖而出,BLAKE2 和 BLAKE3 的成功证明了这一点。
BLAKE 虽然没有成为 SHA-3 标准,但其设计理念影响深远:
- 启发了 BLAKE2(2012),成为最快的密码学哈希函数之一
- 启发了 BLAKE3(2020),实现了真正的并行哈希
- ChaCha 的安全性分析成果被广泛应用于 TLS 1.3、WireGuard 等协议
- HAIFA 结构的设计思想影响了后续哈希函数的设计
- Aumasson, J.-P., Henzen, L., Meier, W., Phan, R.C.-W. (2008). "SHA-3 proposal BLAKE". NIST SHA-3 Competition Submission.
- Aumasson, J.-P., Henzen, L., Meier, W., Phan, R.C.-W. (2010). "SHA-3 Submission: BLAKE, Specification and Analysis". NIST SHA-3 Competition, Round 2.
- Dunkelman, O., Biham, E. (2006). "A Framework for Iterative Hash Functions - HAIFA". Cryptology ePrint Archive.
- Bernstein, D.J. (2008). "ChaCha, a variant of Salsa20". Workshop Record of SASC.