基于KZG多项式承诺方案的RLN

news2024/12/29 14:38:20

1. 引言

RLN——Rate-Limiting Nullifier为PSE团队主导的项目,源自:

  • Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting

RLN(Rate-Limiting Nullifier)是一种zk小工具/协议,可为匿名环境启用垃圾邮件预防机制。旨在:

  • 在每个epoch使用KZG多项式承诺
  • 为每个message使用KZG opening
  • 为单个message生成proof的时间应小于1ms,几乎改进约1000倍
  • 使用RLN作为垃圾邮件保护层(spam protection layer),从而具有网络层面的隐私,可用于Tor网络和以太坊validator网路

从技术层面上来说,transmitter选中某多项式 f ( X ) f(X) f(X),其中 f ( 0 ) f(0) f(0)为其想要保护的私钥,当发送某message时,实际发送的是该多项式上的某个点。
f ( X ) f(X) f(X) n n n阶多相似,则所发送的message数量上限为 n n n,transmitter若发送多于 n n n个不同的message,则其私钥将会泄露。

实际使用zkSNARK来:

  • 使用membership proof,来确保transmitter对某proof of stake进行了承诺
  • 使用message proof,来证明其包含了多项式上的某个点。
    当前的问题在于,为单个message来生成proof需约1s,在很多场景下并不实用——如Tor网路、Validator网络、手机环境等。需要利用KZG多项式承诺和KZG opening方案,将单个message证明时间由1s提高到1ms。

具体场景为:

  • 某指定epoch e e e和message数量上限(message limit) n n n,用户创建某degree为 n n n的多项式,满足 f ( 0 ) f(0) f(0)为该用户的私钥 p k pk pk
  • 可信设置(trusted setup):
    • 对于message数量上限为 n n n的场景,需要shared common reference: g , g α , g α 2 , ⋯   , g α n g,g^{\alpha}, g^{\alpha^2},\cdots,g^{\alpha^n} g,gα,gα2,,gαn
      • 对于非匿名版本:需为每个message limit执行可信设置。
      • 对于匿名版本:可使用现有的reference。

承诺是指:

  • 用户为某epoch选中某 n n n-degree多项式,最多可发送 n n n个message,其中 f ( 0 ) f(0) f(0)为用户私钥 p k pk pk
  • 使用reference string用户计算KZG多项式承诺 C = g f ( α ) C=g^{f(\alpha)} C=gf(α)
  • 在特定epcoh,用户分享该多项式承诺 C C C
  • 为发送某message,用户分享 ( f ( m ) , g ψ m ( α ) ) (f(m), g^{\psi_m(\alpha)}) (f(m),gψm(α)),其中 m m m为message的哈希值, g ψ m ( α ) g^{\psi_m(\alpha)} gψm(α)为相应的opening proof,其中 ψ m ( x ) = f ( x ) − f ( m ) x − m \psi_m(x)=\frac{f(x)-f(m)}{x-m} ψm(x)=xmf(x)f(m)

对某message的evaluation为:

  • 计算message的哈希值: m m m
  • RLN message为: m , f ( m ) , g ψ m ( α ) m,f(m),g^{\psi_m(\alpha)} m,f(m),gψm(α)
  • Verifier具有该epoch的多项式承诺值 g f ( α ) g^{f(\alpha)} gf(α)
  • Verifier对message进行evaluate:
    e ( g f ( α ) , g ) = ? e ( g ψ m ( α ) , g α ⋅ g − m ) ⋅ e ( g , g ) f ( m ) e(g^{f(\alpha)},g)\overset{\text{?}}{=}e(g^{\psi_m(\alpha)},g^{\alpha}\cdot g^{-m})\cdot e(g,g)^{f(m)} e(gf(α),g)=?e(gψm(α),gαgm)e(g,g)f(m)

为此,设计了3个版本:

  • Version A:具体的原型设计见:
    https://github.com/Rate-Limiting-Nullifier/kzg-rln/blob/main/versionA/src/main.rs(Rust)
  • Version B
  • Version C

这3个版本的性能对比为:【可在epoch之初缓存 e ( g f ( α ) , g ) e(g^{f(\alpha)},g) e(gf(α),g)以供之后的message verification过程中使用,因此,每个message verification仅需2次pairing运算。】
在这里插入图片描述

2. Version A:非匿名的最简单方案

关键点为:

  • 用户的公钥为: g f ( 0 ) g^{f(0)} gf(0)
  • 用户提供多项式承诺值、用户公钥以及opening proof: g f ( α ) , g ψ 0 ( α ) , g f ( 0 ) g^{f(\alpha)},g^{\psi_0(\alpha)},g^{f(0)} gf(α),gψ0(α),gf(0)
  • Verifier:通过验证KZG commitment的opening,检查用户公钥 g f ( 0 ) g^{f(0)} gf(0)在所承诺的多项式上。
    e ( g ψ 0 ( α ) , g α ) ⋅ e ( g , g f ( 0 ) ) = ? e ( g , g f ( α ) ) e(g^{\psi_0(\alpha)},g^{\alpha})\cdot e(g,g^{f(0)})\overset{\text{?}}{=}e(g,g^{f(\alpha)}) e(gψ0(α),gα)e(g,gf(0))=?e(g,gf(α))

3. Version B:借助ZKP实现的匿名方案

ZKP针对的场景为:

  • public信息有: g f ( α ) , n g^{f(\alpha)},n gf(α),n
  • private信息有: f ( x ) , p k f(x),pk f(x),pk
  • 约束有:
    • f ( 0 ) = p k f(0)=pk f(0)=pk
    • membership proof of g f ( 0 ) g^{f(0)} gf(0)
    • f ( x ) = ∑ i = 0 k c i x i f(x)=\sum_{i=0}^{k}c_ix^i f(x)=i=0kcixi,当 i > n i>n i>n时有 c i = 0 c_i=0 ci=0

用户提供proof π \pi π和多项式承诺值 g f ( α ) g^{f(\alpha)} gf(α)
Verifier检查proof:
verify ( π , g f ( α ) , root , n ) → t r u e \text{verify}(\pi, g^{f(\alpha)},\text{root},n)\to true verify(π,gf(α),root,n)true

4. Version C:为多个epoch承诺 使用multiple多项式承诺 的匿名方案

multiple多项式承诺方案为:

  • 用户为 m m m个epoch创建 m m m个degree为 n n n的多项式,然后对这些多项式同时承诺。
  • 对于某epoch,对应的 n n n-degree多项式为 f e ( x ) f_e(x) fe(x),将其表示为 f e ( x ) = ∑ i = 0 n c i ( e ) ⋅ x i f_e(x)=\sum_{i=0}^{n}c_i(e)\cdot x^i fe(x)=i=0nci(e)xi,从而有:
    f 1 ( x ) = c 0 ( 1 ) + c 1 ( 1 ) x + c 2 ( 1 ) x 2 + ⋯ + c n ( 1 ) x n f_1(x)=c_0(1)+c_1(1)x+c_2(1)x^2+\cdots+c_n(1)x^n f1(x)=c0(1)+c1(1)x+c2(1)x2++cn(1)xn
    f 2 ( x ) = c 0 ( 2 ) + c 1 ( 2 ) x + c 2 ( 2 ) x 2 + ⋯ + c n ( 2 ) x n f_2(x)=c_0(2)+c_1(2)x+c_2(2)x^2+\cdots+c_n(2)x^n f2(x)=c0(2)+c1(2)x+c2(2)x2++cn(2)xn
    f 3 ( x ) = c 0 ( 3 ) + c 1 ( 3 ) x + c 2 ( 3 ) x 2 + ⋯ + c n ( 3 ) x n f_3(x)=c_0(3)+c_1(3)x+c_2(3)x^2+\cdots+c_n(3)x^n f3(x)=c0(3)+c1(3)x+c2(3)x2++cn(3)xn
    ⋮ \vdots
    f m ( x ) = c 0 ( m ) + c 1 ( m ) x + c 2 ( m ) x 2 + ⋯ + c n ( m ) x n f_m(x)=c_0(m)+c_1(m)x+c_2(m)x^2+\cdots+c_n(m)x^n fm(x)=c0(m)+c1(m)x+c2(m)x2++cn(m)xn
  • 用户为每个 c i ( e ) c_i(e) ci(e)创建多项式承诺

对应ZKP针对的场景为:

  • public信息有: g c i ( α ) , n , m g^{c_i(\alpha)},n,m gci(α),n,m
  • private信息有: c i ( e ) , p k c_i(e),pk ci(e),pk
  • 约束有:
    • 对于每个 e ≤ m e\leq m em,有 c 0 ( e ) = p k c_0(e)=pk c0(e)=pk
    • f e ( x ) = ∑ i = 0 k c i ( e ) x i f_e(x)=\sum_{i=0}^{k}c_i(e)x^i fe(x)=i=0kci(e)xi,当 i > n i>n i>n,有 c i ( e ) = 0 c_i(e)=0 ci(e)=0
    • membership proof of g f e ( 0 ) g^{f_e(0)} gfe(0)
    • 多项式承诺值 g c i ( α ) g^{c_i(\alpha)} gci(α)是正确的

验证过程为:

  • 对于注册阶段:
    • Verifier检查proot:
      verify ( π , g c 0 ( α ) , ⋯   , g c n ( α ) , root , n , m ) → t r u e \text{verify}(\pi, g^{c_0(\alpha)},\cdots,g^{c_n(\alpha)},\text{root},n,m)\to true verify(π,gc0(α),,gcn(α),root,n,m)true
  • 对于每个epoch e e e
    • 用户提交:
      • { ( g c 0 ( e ) , g ϕ 0 , e ( α ) ) , ( g c 1 ( e ) , g ϕ 1 , e ( α ) ) , ⋯   , ( g c n ( e ) , g ϕ n , e ( α ) ) } \{(g^{c_0(e)},g^{\phi_{0,e}(\alpha)}),(g^{c_1(e)},g^{\phi_{1,e}(\alpha)}),\cdots,(g^{c_n(e)},g^{\phi_{n,e}(\alpha)})\} {(gc0(e),gϕ0,e(α)),(gc1(e),gϕ1,e(α)),,(gcn(e),gϕn,e(α))},其中 ϕ ( i , e ) ( x ) = c i ( x ) − c i ( e ) x − e \phi_{(i,e)}(x)=\frac{c_i(x)-c_i(e)}{x-e} ϕ(i,e)(x)=xeci(x)ci(e)

      • 为检查 g f e ( α ) = ∏ i = 0 n g c i ( e ) α i g^{f_e(\alpha)}=\prod_{i=0}^{n}g^{c_i(e)\alpha^i} gfe(α)=i=0ngci(e)αi,Verifier检查:
        e ( g , g f e ( α ) ) = e ( g , ∏ i = 0 n g c i ( e ) α i ) = ? ∏ i = 0 n e ( g c i ( e ) , g α i ) e(g,g^{f_e(\alpha)})=e(g,\prod_{i=0}^{n}g^{c_i(e)\alpha^i})\overset{\text{?}}{=}\prod_{i=0}^{n}e(g^{c_i(e)},g^{\alpha^i}) e(g,gfe(α))=e(g,i=0ngci(e)αi)=?i=0ne(gci(e),gαi)

        • 对于 i = 0 , ⋯   , n i=0,\cdots,n i=0,,n,借助同态属性,Verifier检查用户在多项式承诺值中隐藏的系数:
          e ( g c i ( α ) , g ) = ? e ( g ϕ i , e ( α ) , g α ⋅ g − e ) ⋅ e ( g , g c i ( e ) ) e(g^{c_i(\alpha)},g)\overset{\text{?}}{=}e(g^{\phi_{i,e}(\alpha)},g^{\alpha}\cdot g^{-e})\cdot e(g,g^{c_i(e)}) e(gci(α),g)=?e(gϕi,e(α),gαge)e(g,gci(e))
          其中 ϕ i , e ( x ) = c i ( x ) − c i ( e ) x − e \phi_{i,e}(x)=\frac{c_i(x)-c_i(e)}{x-e} ϕi,e(x)=xeci(x)ci(e)
      • 然后:

        • 计算message的哈希值: m m m
        • RLN message有: m , f ( m ) , g ψ m ( α ) m,f(m),g^{\psi_m(\alpha)} m,f(m),gψm(α)
        • Verifier evaluate the message:
          e ( g f ( α ) , g ) = ? e ( g ψ m ( α ) , g α ⋅ g − m ) ⋅ e ( g , g ) f ( m ) e(g^{f(\alpha)},g)\overset{\text{?}}{=}e(g^{\psi_m(\alpha)},g^{\alpha}\cdot g^{-m})\cdot e(g,g)^{f(m)} e(gf(α),g)=?e(gψm(α),gαgm)e(g,g)f(m)

参考资料

[1] 2023年4月 ethresearch和zkresearch联合发布 RLN on KZG polynomial commitment scheme [cross-posted]

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

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

相关文章

Servlet原理

什么是Servlet? Servlet是JavaWeb应用程序中的一种Java类,用于接收和处理来自客户端的请求,并将生成的响应发送回客户端。 Servlet是按照Java Servlet规范开发的,可以通过Servlet容器(如Tomcat)来管理和运行。Servl…

二十二、SQL 数据分析实战(案例1~案例10)

文章目录 案例1:用户信息表 stu_table案例2:员工绩效表 score_table案例3:销售冠军信息表 month_table案例4:月销售额记录表 sale_table案例5:每季度员工绩效得分表 score_info_table案例6:员工信息表 stu_…

【大数据】Hadoop总结

本文对于Hadoop中的HDFS和MapReduce的相关面试重点进行了总结,下篇将介绍调优、数据倾斜等进阶知识。 Hadoop总结 一、概述1. Hadoop特性2. HDFS结构HDFS 架构 二、HDFS分布式文件系统1 概述2. HDFS存储数据架构图NameNodeDataNode 3 HDFS优点4 HDFS缺点&#xff08…

利用 Delte-Sigma ADC简化电路设计

很多时候在电路中选择合适的 ADC可以很大程度上简化前端的电路。这里我们一起来看一个电阻电桥的例子: 这里用到了一只仪表放大器和一只运算放大器,他们实际上主要完成了三个功能: 1. 抑制了 2.5V的共模信号; 2. 将-1…

「业务架构」波特的五力分析教程介绍

波特五力分析模型最早出现在哈佛商学院教授迈克尔E波特1979年发表在《哈佛商业评论》上的文章中。这篇论文的发表在历史上改变了企业、组织甚至国家对战略的理解。自《哈佛商业评论》创刊以来,它被评为十大最具影响力的论文之一。 五力分析可以帮助公司评估行业吸引…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#) Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用Log图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回…

【ChatGLM】本地版ChatGPT ?6G显存即可轻松使用 !ChatGLM-6B 清华开源模型本地部署教程

目录 感谢B站秋葉aaaki大佬 前言 部署资源 部署流程 实机演示 ChatGML微调(人格炼成)(个人感觉蛮有趣的地方) 分享有趣の微调人格 实机演示(潘金莲人格) 感谢B站秋葉aaaki大佬 秋葉aaaki的个人空间…

《可穿戴监测中的数据质量评估》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 从手腕捕获的神经生理信号的可穿戴记录为癫痫监测提供了巨大的潜力。然而,数据质量仍然是影响数据可靠性的最具…

康耐视Visionpro常见问题汇总-视觉人机器视觉粉丝-千问之六十五解答

(2023年5月2日更,下次更新2023年10月1日-10月7日) Question0: 康耐视visionpro9.8/9.9-BeadInspect工具详细使用流程 原因分析或解决办法 康耐视visionpro9.8-BeadInspect工具详细使用流程 (qq.com) Question1: C#与visisionpro联合开发exe文件开机启动设置 原因分析…

Java 基础进阶篇(八)—— 匿名内部类与 Lambda 表达式

文章目录 一、内部类概述二、需要了解的内部类2.1 静态内部类2.2 成员内部类2.3 局部内部类2.4 面试笔试题 三、匿名内部类 ★四、Lambda表达式 ★4.1 Lambda 表达式的概述4.2 Lambda 表达式的省略规则4.3 Lambda 的使用 一、内部类概述 内部类就是定义在一个类里面的类&#…

SPSS如何管理数据之案例实训?

文章目录 0.引言1.数据文件的分解2.数据文件的横向合并3.数据文件的纵向合并4.数据文件的变换5.观测量的加权6.根据已存在的变量建立新变量7.产生计数变量8.对变量自身重新赋值9.赋值生成新的变量10.变量取值的求等级11.缺失数据的处理12.数据的汇总13.由变量组到观测量组的重组…

hd debug - DAPLink的资料

文章目录 DAPLink的资料概述笔记库迁出的技巧END DAPLink的资料 概述 查资料时, 看到有DAPLink的资料, 记录一下. 笔记 DAPLink项目分为软件和硬件2部分, 不在一个库中. 总览 : https://daplink.io/ 这个页面上说了软件和硬件项目的库地址. 软件库地址 : https://github.…

余弦相似度算法进行客户流失分类预测

余弦相似性是一种用于计算两个向量之间相似度的方法,常被用于文本分类和信息检索领域。具体来说,假设有两个向量A和B,它们的余弦相似度可以通过以下公式计算: 其中,dot_product(A, B)表示向量A和B的点积,no…

什么是链接库 | 动态库与静态库

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

SPSS如何进行基本统计分析之案例实训?

文章目录 0.引言1.描述性分析2.频数分析3.探索分析4.列联表分析5.比率分析 0.引言 因科研等多场景需要进行绘图处理,笔者对SPSS进行了学习,本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结,本文对基本统计…

深度学习卷积神经网络学习小结2

简介 经过大约两周左右的学习,对深度学习有了一个初步的了解,最近的任务主要是精读深度学习方向的文献,由于搭建caffe平台失败而且比较耗费时间就没有再尝试,所以并没有做实践方面的工作,本文只介绍了阅读文献学到的知…

JdbcTemplate常用语句代码示例

目录 JdbcTemplate 需求 官方文档 JdbcTemplate-基本介绍 JdbcTemplate 使用实例 需求说明 创建数据库 spring 和表 monster 创建配置文件 src/jdbc.properties 创建配置文件 src/JdbcTemplate_ioc.xml 创建类JdbcTemplateTest测试是否可以正确得到数据源 配置 J…

《程序员面试金典(第6版)面试题 16.10. 生存人数(前缀和思想)

题目描述 给定 N 个人的出生年份和死亡年份,第 i 个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算生存人数最多的年份。 你可以假设所有人都出生于 1900 年至 2000 年(含 1900 和 2000 )之间。如果…

Spring源码解读——高频面试题

Spring IoC的底层实现 1.先通过createBeanFactory创建出一个Bean工厂(DefaultListableBeanFactory) 2.开始循环创建对象,因为容器中的bean默认都是单例的,所以优先通过getBean、doGetBean从容器中查找,如果找不到的…

LeetCode-1003. 检查替换后的词是否有效

题目链接 LeetCode-1003. 检查替换后的词是否有效 题目描述 题解 题解一(Java) 作者:仲景 题挺难懂的,很绕,然后读懂了就很简单了 就是说本来是一个字符串s,abc三个字符可以随便放在s原本字符串的左边或…