• Anemoi hash:一种SNARK-friendly的哈希函数


    随着zk的兴起,出现了一大批zk友好且面向算术化(Arithmetization-Oriented)的哈希函数,如MiMC-Hash, Rescue–Prime, Poseidon等等,本文要介绍的Anemoi是今年新出的一种zk友好且面向算术化的哈希函数,与其他哈希函数相比,Anemoi具有以下特点:

    • 可以被用于Groth16, Plonk等证明系统中

    • 包含对特定应用的优化,如merkle tree的证明

    • 性能优越,参见下表

      image-20221125172840139

    1. Flystel Structure

    Flystel结构是butterfly和Feistel的结合:butterfly + Feistel = Flystel

    image-20221125160740030

    图(a)是开放的Flystel结构,图(b)是封闭的Flystel结构,图(a)通过一次旋转即可得到图(b),这样做的好处是消除了逆运算。

    在实际运算中Flystel一般定义在 F q F_q Fq中,并且 Q r ( X ) = β x 2 + γ Q_r(X) = \beta x^2 +\gamma Qr(X)=βx2+γ Q δ ( X ) = β x 2 + δ Q_{\delta}(X) = \beta x^2 +\delta Qδ(X)=βx2+δ E ( X ) = X α E(X) = X^{\alpha} E(X)=Xα

    所以对于封闭的Flystel结构,我们有下面等式成立
    u = ( y − v ) α + β v 2 + δ x = ( y − v ) α + β y 2 + γ u = (y-v)^{\alpha} + \beta v^2 + \delta \\ x = (y-v)^{\alpha} + \beta y^2 + \gamma u=(yv)α+βv2+δx=(yv)α+βy2+γ

    2. Anemoi

    Anemoi每轮主要由 constant addition 、linear layer M和 S-box layer这三步构成:

    image-20221125164455005

    • 如果 l l l很小,那么域则需要很大,一般用于基于配对的证明系统,如groth16,plonk等

    • 如果 l l l很大,则域不需要很大,一般用于基于FRI的证明系统

      我们知道
      u = ( y − v ) α + β v 2 + δ x = ( y − v ) α + β y 2 + γ u = (y-v)^{\alpha} + \beta v^2 + \delta \\ x = (y-v)^{\alpha} + \beta y^2 + \gamma u=(yv)α+βv2+δx=(yv)α+βy2+γ
      一般 β \beta β取生成元 g g g γ \gamma γ取零, δ \delta δ g − 1 g^{-1} g1,则
      u = ( y − v ) α + g v 2 + g − 1 x = ( y − v ) α + g y 2 u = (y-v)^{\alpha} + g v^2 + g^{-1} \\ x = (y-v)^{\alpha} + g y^2 u=(yv)α+gv2+g1x=(yv)α+gy2
      一式减二式,可得
      u − x = g ( v 2 − y 2 ) = > u = x + g v 2 − g y 2 + g − 1 u -x = g(v^2 -y^2) => u = x + gv^2 - gy^2 + g ^{-1} ux=g(v2y2)=>u=x+gv2gy2+g1
      以及由二式,可得
      x − g y 2 = ( y − v ) α = > v = y − ( x − g y 2 ) α − 1 x-gy^2 = (y-v)^{\alpha} => v = y -(x-gy^2)^{\alpha^{-1}} xgy2=(yv)α=>v=y(xgy2)α1
      从而可得输出 u , v u,v u,v,与上图中的S-box输出对应
      v = y − ( x − g y 2 ) α − 1 u = x + g v 2 − g y 2 + g − 1 v = y -(x-gy^2)^{\alpha^{-1}} \\ u = x + gv^2 - gy^2 + g ^{-1} v=y(xgy2)α1u=x+gv2gy2+g1

    2.1 Diffusion Layer M.

    image-20221125170203117

    l ∈ { 1 , 2 , 3 , 4 } l \in \{1,2,3,4\} l{1,2,3,4}时,我们可以使用矩阵 M x l M_x^l Mxl来表达,如
    M x 1 = M x 2 = [ 1 g g g 2 + 1 ] M_x^1=M_x^2 = \left[ 1ggg2+1

    \right] Mx1=Mx2=[1ggg2+1]
    输出等于
    [ x 0 , x 1 ] ⋅ M x 2 [x_0,x_1] \cdot M_x^2 [x0,x1]Mx2

    2.2 S-box Layer S

    令H是Flystel结构,则
    S ( X , Y ) = ( H ( x o , y o ) , . . . , H ( x l − 1 , y l − 1 ) ) S(X,Y) = (H(x_o,y_o),...,H(x_{l-1},y_{l-1})) S(X,Y)=(H(xo,yo),...,H(xl1,yl1))

    2.3 完整的Anemoi

    遵循海绵结构构造
    image-20221125172048488

    3. R1CS 约束

    我们使用封闭的Flystel结构,得到如下S-Box验证等式
    ( y − v ) α + β v 2 + δ − u = 0 ( y − v ) α + β y 2 + γ − x = 0 (y-v)^{\alpha} + \beta v^2 + \delta -u = 0\\ (y-v)^{\alpha} + \beta y^2 + \gamma -x = 0 (yv)α+βv2+δu=0(yv)α+βy2+γx=0

    参考
    1. https://eprint.iacr.org/2022/840.pdf
    2. https://github.com/anemoi-hash/anemoi-hash
    3. https://github.com/FindoraNetwork/noah/blob/develop/crypto/src/basic/anemoi_jive.rs
  • 相关阅读:
    初始Linux(2):Shell、文件权限
    小程序开发 - 基本组件
    MPCS-480 LSOP-6 IPM正输出图腾极 高速光电耦合器代替TLP2710
    Oracle Exadata换盘操作-Replacing a Hard Disk Proactively
    蛋白质基础组成结构
    RAG开山之作:结合参数化与非参数化记忆的知识密集型NLP任务新解法
    【每日一题】Day 38 选择题
    WEB端显示三维地形模型
    Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
    计算机视觉——python在一张图中画多条ROC线
  • 原文地址:https://blog.csdn.net/qq_34793644/article/details/128041734