Anemoi Permutation和Jive Compression模式:高效的ZK友好的哈希函数

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=264232+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=264232+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

你可能感兴趣的:(基础理论,哈希算法)