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

news2025/8/2 22:01:58

随着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的证明系统
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[ \begin{array}{cc|r} 1 & g\\g & g^2+1 \end{array} \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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

让我们进入面向对象的世界(三)

文章目录前言一.了解什么是继承二.我们针对继承来设计一个动物继承树前言2.1 第一步 找出共同属性和行为的对象2.2 设计代表共同状态行为的类2.3 决定子类是否让某项行为有不同的运作方式。2.4我们仔细去观察一下子类的特征,争取更多的抽象化的机会。三.继承的相关语…

leetcode:887. 鸡蛋掉落【经典dp定义】

目录题目截图题目分析ac code总结题目截图 题目分析 变量:鸡蛋的数量,楼层n,尝试的次数m有一个单调性容易发现:尝试的次数越多,能解决楼层越高的确切值另一个单调性:鸡蛋的数量越多,能够解决楼…

Flutter 实现局部刷新 StreamBuilder 实例详解

一、前言 在flutter项目中,页面内直接调用setState方法会使得页面重新执行build方法,导致内部组件被全量刷新,造成不必要的性能消耗。出于性能和用户体验方面的考虑我们经常会使用局部刷新代替全量刷新进行页面更新的操作。包括Provider、Va…

制造业企业如何高效进行生产计划排单?

随着社会的发展,个性化订单需求越来越多。面对如今更加多样化、紧迫化、随机化的订单,企业必须采用科学合理的方式和手段对生产计划进行控制,以提高企业的经济效益。生产计划在实施的过程中,由于一些原因,往往造成实施…

Node.js 模块化及npm概念介绍

文章目录模块化1 模块化的基本概念1.1 什么是模块化1.2 模块化规范2 Nodejs中的模块化2.1 Nodejs中模块的分类2.2 加载模块2.3 模块的作用域2.4 向外共享模块作用域中的成员2.4.1 module对象2.4.2 module.export对象2.4.3 共享成员时的注意点2.4.4 exports对象2.4.5 exportshe …

栈和队列及其多种接口实现-c语言

今天我们来完成栈和队列,首先我们要明白什么是栈,什么是队列。 目录 栈的选择 栈的结构 栈的初始化 栈的销毁 入栈 出栈 返回栈顶元素 计算数据个数 判断是否为空 队列的选择 队列的结构 入队列 出队列 判断是否为空 取队头元素 取队尾…

Java Spring Bean的生命周期 三级缓存

Java Spring Bean的生命周期 三级缓存 SpringBean的生命周期:是从 Bean 实例化之后(即通过反射创建出对象之后),到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Spring…

盘一盘那些年我们使用的Java

一、序 那些年我们使用过的Java版本。我是一个80后,当年在大学时代使用的是Java5,当时是大三的时候学校有了编程课,最开始学的是汇编语言、VB、C然后再是Java。当时就是Java5,搞了个课程设计与顺便也参加了个校园程序设计大赛。当…

MCE | Nrf2 的“戏精”之路

外界刺激 (如药物、紫外线和电离辐射) 和内源性自由基和活性氧 (ROS) 会直接或者间接地损伤蛋白质、脂质和 DNA 等细胞成分,为了抵御这些不利影响,机体形成了一套复杂的氧化应激应答系统来缓解细胞所受的损害。而 Nrf2,作为调控抗氧化应激的一…

SAP ABAP Function Module 的动态调用方式使用方式介绍试读版

在本教程前面的步骤 7,我们介绍了 ABAP Function Module 的基本使用方法: 7. ABAP function module 的使用 最近我的知识星球有朋友提问: 大佬,我想问一下动态获取到物料主数据的字段名之后,如何将获取到的字段名去与…

01. Docker的基本介绍

Docker概述? Docker 是一个开源的应用容器引擎,基于Go语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器…

1网络模型

网络层次可划分为五层因特网协议栈和七层因特网协议栈 五层 互联网分层 物理层 发送端:链路层给的bit把他变成信号,什么电磁波的信号通过介质传出去 接收端:把物理信号还原为原来的数据01010110这种 传的是比特 链路层 网卡:有…

力扣 112. 路径总和

力扣 112. 路径总和 题目 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。…

[附源码]java毕业设计医院挂号系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

css解决uniapp使用image标签图片无法撑满全屏问题

css解决uniapp使用image标签图片无法撑满全屏问题 文章目录css解决uniapp使用image标签图片无法撑满全屏问题前言一、问题还原二、问题解决1、在解决问题之前有必要先来学习一个css的属性2、问题的原因3、解决问题总结前言 本片文章主要讲解了如何解决,开发中遇到需…

RTL8380M管理型交换机系统软件操作指南三:VLAN

接下来对管理型交换机的VLAN部分进行详细的描述,主要包括以下七部分内容: VLAN概述、VLAN优点、VID概念、PVID、端口处理报文方式、基础配置、VLAN端口配置一 VLAN概述 VLAN(Virtual Local Area Network)的中文名为“虚拟局域网”…

数仓之范式

学习目录一、基本概念二、函数依赖三、三范式区别一、基本概念 定义:范式是指数据建模中必须遵守一定的规则 目的:降低数据的冗余性 缺点:获取数据时,需要通过Join拼接出最后的数据 分类:第一范式(1NF)、第二范式(…

大数据可视化之医疗大数据平台

一 项目背景 随着信立泰企业的不断发展,公司管理的需求倒逼业务系统不断引入。经营数据的不断积累使得企业的信息化成为企业进行技术改造及提高企业管理水平的重要手段。信立泰因之而制定了对应的信息化战略,主要任务是最大限度的利用医疗大数据平台加強…

基于java的购物中心商铺管理系统的设计与实现/商铺管理系统

摘 要 随着社会的发展,计算机的优势和普及使得购物中心商铺管理系统的开发成为必需。购物中心商铺管理系统主要是借助计算机,通过对信息进行管理。减少管理员的工作,同时也方便广大用户对个人所需信息的及时查询,其次是大量信息的…

Python:语法进阶

目录 一、运算符 基本运算符 比较运算符 赋值运算符 多变量赋值 逻辑运算符 三元运算符 源码&运行结果 test01 案列 效果 二、循环语句 一、运算符 基本运算符 比较运算符 赋值运算符 多变量赋值 a, b, c 1, 2, 3 # a b c 3 print(b, c) 逻辑运算符 三元运…