> 文章列表 > Poseidon Hash

Poseidon Hash

Poseidon Hash

之前我们介绍了zk友好的哈希函数Anemoi,今天我们介绍另一种zk友好的哈希函数Poseidon

Poseidon采用 sponge/squeeze 结构,该结构吸纳万物并生成固定大小的输出,内部有一个状态 S = ( s 1 , s 2 , . . . , s t ) S=(s_1,s_2,...,s_t) S=(s1,s2,...,st),初始状态为0,状态 S S S可分为外部状态和内部状态,即 r ( r a t e ) r(rate) r(rate) c ( c a p a c i t y ) c(capacity) c(capacity)

ps:内部状态是不透明的,也不是输出的一部分,这对安全至关重要

Illustration of the sponge construction

如果要absorb一个元素,sponge将这个元素放在外部状态中,然后执行poseidon-permutation产生一个新的状态 S S S, 如下图

如果要squeeze元素,sponge结构返回它的外部状态,并执行poseidon-permutation
image-20230331114615564

Poseidon Permutation

主要有两种类型的轮函数:

  • full rounds(more secure)

  • partial rounds (more efficient)

image-20230331115930656

轮函数主要主要有三部分组成:

  • ARC: 轮常量和 s t a t e state state进行相加
  • S-box:采用低阶多项式,如$ Sbox(x) = x^\\alpha$,且 α 满足 \\alpha满足 α满足 g c d ( α , p − 1 ) = 1 gcd(\\alpha,p-1)=1 gcd(α,p1)=1,通常 α \\alpha α取5
  • Mix: 乘以 t ∗ t t*t tt MDS矩阵

partial rounds 和 full rounds 最大不同在于partial rounds 每轮只使用了一个S-box,下图描绘了这种差异

image-20230331141203890

参考:
1.https://eprint.iacr.org/2019/458.pdf
2.https://extgit.iaik.tugraz.at/krypto/hadeshash