如何选择ZK-friendly 哈希函数?

news2024/11/17 10:00:13

1. 引言

在What’s the deal with hash functions in Zero Knowledge?中,研究了哈希函数对ZKP场景的用途。当前有各种ZK-friendly 哈希函数设计,各有优缺点,且针对不同的性能维度进行了优化,如:

  • MiMC
  • GMiMC
  • Poseidon
  • Poseidon2
  • Rescue
  • Griffin
  • Anemoi
  • Neptune
  • Grendel
  • Reinforced Concrete
  • Tip5
  • Monolith
  • 等等

如何从中选择适合特定应用场景的哈希函数?

选择依据取决于多个维度,如:

  • 所用的ZKP证明系统
  • 应用场景的主要开销指标

本文提供了2种决策树方案供选择。

2. 仅关心fast prover的应用场景——Griffin

仅考虑prover性能的情况下,即,使ZK电路内部开销最小化的情况下,来选择最好的哈希函数。
自从第一次尝试用MiMC最小化乘法次数以来,研究人员已经取得了长足的进步。在What’s the deal with hash functions in Zero Knowledge?中,解释了low-degree equivalence的设计原则。这些设计特别适于让prover开销最小化,其主要与众不同的特性在于:

  • 同时使用了 y = x d y=x^d y=xd y = x 1 / d y=x^{1/d} y=x1/d
  • 从而实现了具有小轮数的安全哈希函数。其中小轮数,对应为更少数量的约束。
  • 在ZK电路中,昂贵的 y = x 1 / d y=x^{1/d} y=x1/d计算,实际与 y = x d y=x^d y=xd一样便宜,因为有等价表示: y = x 1 / d ≡ x = y d y=x^{1/d}\equiv x=y^d y=x1/dx=yd

第一个成功使用该设计方法的哈希函数为Rescue,后经小幅优化为Rescue-Prime。不过研究人员又进一步优化,引入了Griffin和Anemoi哈希函数。

Griffin和Anemoi哈希函数的作者,使用不同配置和证明系统,比较了其哈希函数性能:

  • 当用于R1CS-based ZKP系统中时,其具有大幅优势——如Poseidon哈希需要240个约束,而Griffin仅需要96个约束。
  • 当用于AIR-based STARKs和Plonk证明系统中(使用原始Plonk-gate)时,也具有大幅优势——如Poseidon需要518个gate,而Griffin仅需要173个gate。

Griffin和Anemoi哈希函数在不同ZKP系统中提供了类似的性能,如何从中选择呢?

  • 某些配置下Griffin要更好一点,某些配置下Anemoi略占优势。
  • Griffin需要更少的 y = x 1 / d y=x^{1/d} y=x1/d计算,使得其在现代CPU上evaluate更快。具体见https://github.com/anemoi-hash/hash_f64_benchmarks(Rust)benchmark。
    其哈希性能更快,对ZK电路外的Merkle tree预计算 很重要。与此同时,对于必须填充traces的阶段,可贡献更快的ZK proving。因此,选择Griffin。
    在这里插入图片描述

3. ZKP证明系统之外的哈希同等重要

尽管ZK电路内的Griffin/Anemoi/Rescue很快,但与原生暗哈希相比,其仍相对较慢。

CPU中,计算 y = x 1 / d y=x^{1/d} y=x1/d,要比计算 y = x d y=x^d y=xd low-degree计算,慢得多。对于某些 原生性能与ZK prover性能同等重要 的应用场景,应避免选择Griffin或Anemo。如:

  • recursive STARK中:需要在每个递归步骤中,原生计算huge Merkle tree,同时,要ZK证明该计算的正确性。
  • Fractal,所使用哈希函数的原生性能慢,使得prover花费大多数时间用于构建Merkle tree。

此时,怎样是最好的哈希函数呢?——首要回答的问题是:

  • 所使用ZKP系统是否支持lookup argument?——
    • 支持,且大素数域:Reinforced Concrete
    • 支持,且小素数域:Monolith
    • 不支持:Poseidon2
  • 所使用的ZKP系统的原生素数域是什么?

不过,当使用Reinforced Concrete时,还需考虑:

  • Reinforced Concrete使用lookup tables来提升原生哈希性能,但可能易受cache-based side-channel攻击。尽管当前文献或其它公开场合并未发生类似攻击,但未来可能有,这个应牢记于心。若对所应用场景有影响,则应转而选择Poseidon2。

3.1 ZKP系统支持lookup argument

对于某些 原生性能与ZK prover性能同等重要 的应用场景,若所使用的ZKP系统支持lookup argument,则可使用如下采用lookup原生性能设计的哈希函数,如:

  • Reinforced Concrete
  • Tip5
  • Monolith

根据支持lookup argument 的ZKP系统 所采用的原生素数域,来选择不同的哈希函数:

  • 1)若为big ≈ 256 \approx 256 256 bit素数域,如BLS12-381或BN254,则可使用Reinforced Concrete。Reinforced Concrete:为首个在大素数域使用lookup argument的哈希函数,从而相比于之前的哈希函数,对大域size,具有更快的原生哈希性能。如使用BN254,Poseidon哈希为 20.4 μ s 20.4\mu s 20.4μs,而Reinforced Concrete为 3.5 μ s 3.5\mu s 3.5μs
  • 2)若为small 素数域,如64-bit Goldilocks域(当前已用于FRI-based Plonky2证明系统中),或,31-bit Mersenne素数域(当前已用于Plonky3中),则可使用Monolith哈希函数。Monolith为当前最快原生哈希的ZK-friendly哈希函数。其性能甚至接近了传统哈希函数(如SHA3)的原生哈希速度。

3.2 ZKP系统不支持lookup argument

对于某些 原生性能与ZK prover性能同等重要 的应用场景,若所使用的ZKP系统不支持lookup argument,也有很多其它设计选择:

  • 1)Poseidon,很长时间以来都被认为是具有最快原生性能的ZK-friendly哈希函数,其最近有改进版——Poseidon2,在保持相同ZK性能的情况下,不同设置下,其原生性能比Poseidon提升约40%。

4. 不信任所有这些新哈希函数

设计既安全又高效的新哈希函数并不容易。经验表明,尽管设计者尽了最大努力来确保哈希函数的安全,但密码分析师还是想出了新的、更有效的方法来破坏新的对称原语的安全性。因此,理想情况下,新的哈希函数应该经过几年的战斗测试,以便研究人员更好地了解给定设计的安全性。然后,在多年未能破解哈希函数之后,人们终于可以开始信任该设计。从这个意义上说,2019年(4年前)发布的Poseidon或Rescue Prime,或者更老的MiMC,可能是最好的选择。由于它们的年龄,这些也是采用最广泛的哈希函数。因此,与其他ZK友好的哈希函数相比,攻击者更有动机破坏Poseidon、Rescue和MiMC的安全性。此外,它们是一个赏金计划的一部分,目的是进一步了解它们的安全。

最终,获得设计安全性信任的最佳方式是经历多年的标准化之旅。到目前为止,ZK友好的哈希还没有被NIST等机构标准化。此外,在zkproof.org上开发的社区标准中还没有ZK友好的哈希。然而,这种情况可能会改变。随着对零知识、同态加密和多方计算用例的对称密码和哈希函数的需求不断增加,NIST正在考虑启动这些设计的标准化过程(见NIST First Call for Multi-Party Threshold Schemes),并非常有兴趣听取行业的用例报告。

最后,您可以使用NIST标准化的哈希函数,如SHA-256,这是一个非常保守的选择。几乎所有流行的证明系统代码实现都为SHA-256提供了定制电路,虽然它们的效率仍然远低于为ZK用例优化的哈希函数设计,但若想尽可能保守或有外部约束,这可能是一个有效的权衡点。

5. 不要,未证明安全的哈希函数

若压根不信任任何新的密码学哈希函数,可使用基于,常见于数字签名的经典hardness assumption(如discrete logarithm problem),的哈希函数,目前在一些ZK框架(如Halo2)中已实现,如:

  • Pedersen哈希函数
  • 基于Pedersen的lookup-friendly 接班人:Sinsemilla哈希函数

尽管这些哈希函数,相比于之前的密码学哈希函数,可能:

  • 原生哈希更慢,证明性能也更慢
  • (对fixed size inputs)仅提供抗碰撞性,no full pre-image resistance
  • 不具备抗量子安全性,其安全性会reduce为discrete logarithm hardness assumption.
  • 仅可作为使用large ≈ 256 \approx 256 256 bit素数域证明系统的备选项,因在该大素数域中,才可认为discrete-log是hard的。

6. 决策树

有2棵决策树,帮助做哈希函数选择:

  • 1)根据用户场景来选择:
    在这里插入图片描述
  • 2)根据信任假设和哈希函数的新颖性来选择:
    在这里插入图片描述

7. 结论

为ZK应用场景选择合适的哈希函数很难决策,但可从如下维度来判断:

  • 1)是否仅关注prover性能?若是,则选择Griffin。
  • 2)是否既关注prover性能也关注原生哈希性能?
    • 若是,且支持lookup argument,且大素数域:Reinforced Concrete
    • 若是,且支持lookup argument,且小素数域:Monolith
    • 若是,且不支持lookup argument:Poseidon2
  • 3)是否主要关心已经建立的设计,并为安全性提供合理的论证?若是,则选择Poseidon 或 Rescue-Prime,具体取决于性能评价是否关注原生哈希。若关注电路之外的原生哈希性能,则选Poseidon,否则选Rescue-Prime。

参考资料

[1] TACEO博客 2023年10月10日 How to choose your ZK-friendly hash function?

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

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

相关文章

Instrumentation 是什么?和 ActivityThread 是什么关系?

Instrumentation 可以理解为应用进程管家,ActivityThread 要执行创建或暂停某个 Activity 的操作时,都需要通过 Instrumentation 来进行具体的操作,即回调 Activity 的生命周期。 每一个应用程序只有一个 Instrumentation 对象,每…

ubuntu挂载硬盘方法

1.关闭服务器加上新硬盘 2.启动服务器,以root用户登录 3.查看硬盘信息 fdisk -l4.格式化分区 找到需要分区的目录,并记录分区的uuid,用于后面修改/etc/fstab永久挂载配置文件 mkfs.ext4 /dev/nvme0n1 mkfs.ext4 /dev/nvme1n1 Filesystem UUID: a1c…

修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时,是不是有可能突然忘记了自己的数据库密码? 在此文中,我们来详细解决一下如何去修改自己的数据库密码,并使用Navicat来连接测试 1.停止mysql服务 打开终端,键入命令,将mysql服务先停止掉,…

【正点原子STM32连载】 第六十章 串口IAP实验(Julia分形)实验 摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子APM32F407最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html## 第六十…

手把手用GPT开发小程序全流程!就是这么easy~

大家好,我是五竹。 前段时间用GPT开发了一款小程序:GPT真牛批!三天开发一个小程序,三天积累了2000的用户,上周末抽空又接入了流量主,感兴趣的同学可以围观一下。 今天就来带大家走一遍用GPT开发一款小程序的全过程&a…

怎么禁止员工私自修改ip地址

在许多组织中,网络管理员负责配置和管理网络,包括为员工分配静态IP地址。然而,有些员工可能会试图修改这些分配的IP地址,这可能会导致一系列问题,包括网络性能下降、安全风险增加等。 因此,禁止员工私自修…

羊奶加西柚,羊大师教你减少自由基

羊奶加西柚,减少自由基的好处真的是多得数不胜数。无论是从营养角度,还是从健康角度考虑。羊奶富含蛋白质、维生素和矿物质,西柚富含维生素C和抗氧化剂。结合起来,它们可以提供许多健康益处,并为我们的身体抵御自由基的…

轻松搬运!手推小车助力制造企业高效装卸

手推车是一种非常方便高效的搬运工具。它可以帮助我们轻松搬运重物,节省时间和精力。不论是在仓库、工厂、商场还是家庭,手推车都扮演着重要的角色。 在现代物流与生产领域,高效的装卸作业是确保生产流程畅通的重要环节。手推小车作为一种便…

[HCIE] IPSec-VPN (IKE自动模式)

概念: IKE:因特网密钥交换 实验目标:pc1与pc2互通 步骤1:R1与R3配置默认路由 R1: ip route-static 0.0.0.0 0.0.0.0 12.1.1.2 R2: ip route-static 0.0.0.0 0.0.0.0 23.1.1.2 步骤2:配ACL…

如何让大模型更好地完成知识图谱推理?

​ 论文标题: Making Large Language Models Perform Better in Knowledge Graph Completion 论文链接: https://arxiv.org/abs/2310.06671 代码链接:GitHub - zjukg/KoPA: [Paper][Preprint 2023] Making Large Language Models Perform Be…

Intel Software Guard Extensions简介(一)

文章目录 前言一、简介二、enclave相互作用与保护三、enclave生命周期四、数据结构和enclave操作五、enclave page cache六、enclave instructions and intel sgx参考资料 前言 最近开始研究Intel SGX硬件特性,记录下研究过程。 目前安全性主要关注对存储中的静止…

羊大师教你,什么搭配羊奶能够带来全方位的营养?

羊奶作为一种营养价值极高的乳制品,其丰富的营养成分对人体健康有着诸多益处。然而,不同的食物搭配会对羊奶的营养吸收产生不同的影响。为了让大家更好地利用羊奶的营养价值,下面小编羊大师将为大家介绍一些与羊奶搭配的食物,帮助…

代码随想录算法训练营第五十七天|647. 回文子串、516. 最长回文子序列

第九章 动态规划part17 647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是…

【回眸】Tessy单元测试软件使用指南(一)安装篇

安装 在官网上下载安装包,安装完成后打开进入这个界面 注册申请license:在作为服务端的电脑上安装Tessy。安装完成后,启动Tessy会自动生成license服务器的注册码。(注册码用于申请试用或永久的license文件)这个对于我…

拦截器详解

一、概述 什么是拦截器? 是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制方法的执行。 到底是干啥用的? 拦截请求用的,在指定的方法调用前后,执行在拦截器中编写的程序 …

git的使用:本地git下载、sshkey的添加、github仓库创建及文件上传

一、github创建账号 即github注册账号,登录github官网,根据提示注册即可 github官网 二、git客户端下载安装 已有很多git下载安装的博文了,在此就不赘述 三、sshkey的生成与添加 1、sshkey的生成以及查看 // sshkey的生成命令&#xff…

PE文件分析

用PEView及Python程序分析压缩包中的lab01.exe和lab01.dll两个PE文件,关键步骤给出截图: 分析两个文件的文件头中的各部分; 2.找出时间戳,计算出两个文件的生成时间; 注:时间戳为从1970年1月1日0时0分0秒到…

奥特曼不是第一次被开除!离职YC系“被创始人要求离开”

明敏 西风 发自 凹非寺 量子位 | 公众号 QbitAI 钮祜禄奥特曼,竟然不是第一次被“扫地出门”??! 没想到,OpenAI闹剧刚稍微消停了一点,“前传”马上来了。 《华盛顿邮报》从知情人士处获悉,奥…

Anthropic推出Claude 2.1聊天机器人;使用AI工具写作:挑战与策略

🦉 AI新闻 🚀 Anthropic推出Claude 2.1聊天机器人,支持20万个Token输入和提高准确度 摘要:Anthropic推出了Claude 2.1聊天机器人及对应的AI模型,支持输入多达20万个Token,并在准确度上有所改善。Claude已…

【华为OD题库-038】支持优先级的对列-java

题目 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个 整数。 输入描述 一组待存入队列的数据(包含内容和优先级)。 输出描述 队列…