1. 引言
Bouvier等人2022年论文《New Design Techniques for Efficient Arithmetization-Oriented Hash Functions:Anemoi Permutations and Jive Compression Mode》,开源代码见:
- https://github.com/anemoi-hash/anemoi-hash(Sage)
- https://github.com/anemoi-hash/anemoi-rust(Rust)
- https://github.com/toposware/hash/tree/anemoi(Rust,基于Goldilocks域实现了state width为8,capacity为7的Anemoi哈希算法)
ZK证明系统中,要求哈希函数基于大素数域是计算友好的,如:
- MiMC哈希函数
- Rescue-Prime哈希函数
- Poseidon哈希函数
- Reinforced Concrete哈希函数
- Griffin哈希函数
Anemoi:为新的ZK友好的哈希函数和压缩函数,其主要特性有:
- 可高效与多种证明系统合作
- 包含了针对特定应用的优化函数(如Merkle tree哈希以及通用哈希)
- 性能优势明显:
- 比R1CS约束中的Poseidon和Rescue-Prime哈希函数快2倍
- 比Plonk约束中的高度优化的Poseidon哈希函数快28%~48%
- 原生执行时,比Rescue-Prime哈希函数快2~3倍,具体取决于field size
2. 代码解析
https://github.com/anemoi-hash/anemoi-rust(Rust)中,当前支持的域有:
- BLS12-377 basefield
- BLS12-381 basefield
- BN-254 basefield
- ED_ON_BLS12-377 basefield (= BLS12-377 scalar field)
- Jubjub basefield (= BLS12-381 scalar field)
- Pallas basefield (= Vesta scalar field)
- Vesta basefield (= Pallas scalar field)
对于以上每个域,实现了6种Anemoi sponge construction:
- 1 column (2 cells) and rate 1
- 2 columns (4 cells) and rate 3
- 3 columns (6 cells) and rate 5
- 4 columns (8 cells) and rate 7
- 5 columns (10 cells) and rate 9
- 6 columns (12 cells) and rate 11
在Intel i7-9750H CPU @ 2.60GHz 服务器上测试:
RUSTFLAGS="-C target-cpu=native" cargo bench --bench bls12_377 --bench vesta
基本性能为:
- 2-to-1 compression
Field \ Instantiation | Anemoi-2-1 | Anemoi-4-3 | Anemoi-6-5 | Anemoi-8-7 | Anemoi-10-9 | Anemoi-12-11 |
---|---|---|---|---|---|---|
BLS12-377 | 429.61 µs | 485.99 µs | 610.08 µs | 815.19 µs | 1.0179 ms | 1.2245 ms |
Vesta | 129.48 µs | 176.58 µs | 243.45 µs | 292.13 µs | 406.56 µs | 440.80 µs |
- 10KB data hashing
Field \ Instantiation | Anemoi-2-1 | Anemoi-4-3 | Anemoi-6-5 | Anemoi-8-7 | Anemoi-10-9 | Anemoi-12-11 |
---|---|---|---|---|---|---|
BLS12-377 | 85.369 ms | 35.937 ms | 30.141 ms | 28.519 ms | 26.151 ms | 24.766 ms |
Vesta | 44.448 ms | 20.307 ms | 15.042 ms | 14.361 ms | 15.414 ms | 13.987 ms |
与预期的一致,底层的素数域越大,哈希运算越慢。不要求algebraic group的FRI协议,可采用更小的域,使用Anemoi的效率将更高。
https://github.com/toposware/hash/tree/anemoi(Rust,基于Goldilocks域实现了state width为8,capacity为7的Anemoi哈希算法)中所实现的基于Goldilocks域
p
=
2
64
−
2
32
+
1
p=2^{64}-2^{32}+1
p=264−232+1 的Anemoi-8-7:
- 当哈希10KB数据时,仅需要1.8249ms,比上面的BLS12-377和Vesta要快约15倍和7.8倍。
- 当2-to-1 compression时,仅需3.9317us,比上面的BLS12-377和Vesta要快约207倍和74倍。
https://github.com/toposware/hash/tree/anemoi(Rust,基于Goldilocks域实现了state width为8,capacity为7的Anemoi哈希算法),除此之外,还基于Goldilocks域 p = 2 64 − 2 32 + 1 p=2^{64}-2^{32}+1 p=264−232+1实现了:
- Rescue-Prime with state width 8 and capacity 4
- Rescue-Prime with state width 12 and capacity 4
- Rescue-Prime with state width 14 and capacity 7