多项式承诺:KZG

这篇具有很好参考价值的文章主要介绍了多项式承诺:KZG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文献:

  1. Merkle, R. ”Protocols for Public Key Cryptosystems.” Proc. 1980 Symp. on Security and Privacy, IEEE Computer Society (April 1980), 122-133.
  2. Benaloh J, Mare M. One-way accumulators: A decentralized alternative to digital signatures[C]//Workshop on the Theory and Application of of Cryptographic Techniques. Springer, Berlin, Heidelberg, 1993: 274-285.
  3. Kate A, Zaverucha G M, Goldberg I. Constant-size commitments to polynomials and their applications[C]//International conference on the theory and application of cryptology and information security. Springer, Berlin, Heidelberg, 2010: 177-194.

One-way accumulators(1993)

定义

我们说函数 f : X × Y → X f:X \times Y \to X f:X×YX准交换的quasi-commutative),如果对于任意的 x ∈ X x \in X xX,以及任意的 y 1 , y 2 ∈ Y y_1,y_2 \in Y y1,y2Y,有
f ( f ( x , y 1 ) , y 2 ) = f ( f ( x , y 2 ) , y 1 ) f(f(x,y_1),y_2) = f(f(x,y_2),y_1) f(f(x,y1),y2)=f(f(x,y2),y1)

单向累加器One-way accumulators)是一种准交换的单向哈希函数(OWHF),即 y 1 , ⋯   , y m y_1,\cdots,y_m y1,,ym 的累积哈希(accumulated hash
z = h ( h ( ⋯ h ( x , y 1 ) , ⋯   ) , y m ) z = h(h(\cdots h(x,y_1),\cdots),y_m) z=h(h(h(x,y1),),ym)

不会因为 y i y_i yi 的顺序改变而改变。

实例化:

  • 安全素数(safe prime): p = 2 p ′ + 1 p=2p'+1 p=2p+1,其中 p ′ p' p 是奇素数
  • 刚性整数(rigid integer): n = p q n=pq n=pq,其中素数 p , q p,q p,q 是安全的,且 ∣ p ∣ = ∣ q ∣ |p|=|q| p=q
  • 基于 RSA 假设的 Hash 函数: e n ( x , y ) = x y ( m o d n ) e_n(x,y) = x^y \pmod n en(x,y)=xy(modn)

应用

使用 e n ( x , y ) = x y ( m o d n ) e_n(x,y) = x^y \pmod n en(x,y)=xy(modn) 作为单向累加器,其中的 n n n 是 CRS,没人知道它的因子 p , q p,q p,q,可以利用 MPC 来生成。花费大代价生成后,它可以被任意重用。

  1. 时间戳(Time Stamping):一群人需要对自己的实时文档打时间戳,并在一段时间后,让其他人相信这个时间戳的有效性。

    • 假设某一轮里,有 y 1 , ⋯   , y m y_1,\cdots,y_m y1,,ym 个(被常规哈希过的)文件需要打时间戳。

    • 首先对当前时间 t t t 做共识,设置初始 x = t 2 ( m o d n ) x=t^2 \pmod n x=t2(modn)

    • 各参与者 P j P_j Pj 公布自己的 y j y_j yj,各自收集后计算 Y = ∏ j y j Y = \prod_j y_j Y=jyj y j ′ = Y / y j y_j' = Y/y_j yj=Y/yj,然后计算 z j = x y j ′ z_j=x^{y_j'} zj=xyj z = x Y z=x^Y z=xY

    • 易知 z = h ( z j , y j ) z=h(z_j,y_j) z=h(zj,yj),因此 P j P_j Pj 保留二元组 ( z j , y j ) (z_j,y_j) (zj,yj) 作为证据。

    • 当向他人证明 y j y_j yj 对应文档的时间戳时,只需同时提供这个二元组即可。

  2. 隶属证明(Membership Testing):一群人组成一个匿名团体,想要向成员或非成员证明自己真的属于这个团体。

    • 首先对团体的初值 x x x(比如团体的描述)做共识。

    • 各参与者 P j P_j Pj 选择自己的 y j y_j yj(比如自己的假名),然后公布。

    • 各自收集后计算 Y = ∏ j y j Y = \prod_j y_j Y=jyj y j ′ = Y / y j y_j' = Y/y_j yj=Y/yj,然后计算 z j = x y j ′ z_j=x^{y_j'} zj=xyj z = x Y z=x^Y z=xY

    • 易知 z = h ( z j , y j ) z=h(z_j,y_j) z=h(zj,yj),因此 P j P_j Pj 保留二元组 ( z j , y j ) (z_j,y_j) (zj,yj) 作为证据。

    • 向成员证明时,向他展示这个二元组,验证 h ( z i , y i ) = h ( z j , y j ) h(z_i,y_i)=h(z_j,y_j) h(zi,yi)=h(zj,yj)(因为 z z z 可被成员所重构,因此不必存储)

    • 向非成员证明时,他从公开资料中获取 z , n z,n z,n,然后向他展示这个二元组,验证 z = h ( z j , y j ) z=h(z_j,y_j) z=h(zj,yj)

    • Merkle Tree(1980)也可以完成隶属证明,但它的复杂度是路径长度 O ( log ⁡ n ) O(\log n) O(logn),而单向累加器仅为 O ( 1 ) O(1) O(1)

KZG(2010)

多项式承诺

KZG 将 Z p \mathbb Z_p Zp 上的 O ( t ) O(t) O(t) 个数值 m 1 , ⋯   , m t m_1,\cdots,m_t m1,,mt,打包进一个多项式 ϕ ( x ) ∈ Z p [ x ] \phi(x) \in \mathbb Z_p[x] ϕ(x)Zp[x] 中, deg ⁡ ϕ = t \deg \phi = t degϕ=t,仅需对多项式 ϕ ( x ) \phi(x) ϕ(x) 做大小为 O ( 1 ) O(1) O(1) 的承诺即可。

KZG 基于离散对数问题,以及它的一系列变体,

多项式承诺:KZG

多项式承诺协议polynomial commitment scheme)抽象为算法六元组,

多项式承诺:KZG

我们说一个多项式承诺协议 ( S e t u p , C o m m i t , O p e n , V e r i f y P o l y , C r e a t e W i t n e s s , V e r i f y E v a l ) (Setup, Commit, Open, VerifyPoly, CreateWitness, VerifyEval) (Setup,Commit,Open,VerifyPoly,CreateWitness,VerifyEval)安全的(secure),如果满足以下性质:

多项式承诺:KZG多项式承诺:KZG

KZG 给出了两种构造方案,第一种是计算隐藏的,第二种是无条件隐藏的。

Computationally hiding

对于一个多项式 ϕ ( x ) \phi(x) ϕ(x),为了证明在点 i i i 处的值为 ϕ ( i ) \phi(i) ϕ(i),只需证明
( x − i ) ∣ ( ϕ ( x ) − ϕ ( i ) ) (x-i) \mid (\phi(x)-\phi(i)) (xi)(ϕ(x)ϕ(i))

也就是说,存在多项式 ψ ( x ) \psi(x) ψ(x),满足
ψ i ( x ) = ϕ ( x ) − ϕ ( i ) x − i \psi_i(x) = \frac{\phi(x)-\phi(i)}{x-i} ψi(x)=xiϕ(x)ϕ(i)

基于 DL 假设、t-SDH 假设,构造的承诺方案 P o l y C o m m i t D L PolyCommit_{DL} PolyCommitDL 如下:

多项式承诺:KZG

Unconditionally hiding

为了实现无条件隐藏的性质,添加一个随机多项式 ϕ ^ ( x ) ∈ R Z p [ x ] \hat \phi(x) \in _R \mathbb Z_p[x] ϕ^(x)RZp[x]

利用 P o l y C o m m i t D L PolyCommit_{DL} PolyCommitDL 的同态性质,有

  • 多项式承诺的同态: ϕ = ϕ 1 + ϕ 2    ⟺    C ϕ = C ϕ 1 C ϕ 2 \phi=\phi_1+\phi_2 \iff C_{\phi} = C_{\phi_1} C_{\phi_2} ϕ=ϕ1+ϕ2Cϕ=Cϕ1Cϕ2
  • 函数值证据的同态: ϕ ( i ) = ϕ 1 ( i ) + ϕ 2 ( i )    ⟺    w ϕ ( i ) = w ϕ 1 ( i ) w ϕ 2 ( i ) \phi(i)=\phi_1(i)+\phi_2(i) \iff w_{\phi(i)} = w_{\phi_1(i)} w_{\phi_2(i)} ϕ(i)=ϕ1(i)+ϕ2(i)wϕ(i)=wϕ1(i)wϕ2(i)

基于 t-SDH 假设,构造的承诺方案 P o l y C o m m i t P e d PolyCommit_{Ped} PolyCommitPed 如下:

多项式承诺:KZG

Batch Opening

有时候,需要打开多个位置的函数值,即 B ⊂ Z p B \subset \mathbb Z_p BZp,其中 ∣ B ∣ < t |B| < t B<t

对于 P o l y C o m m i t D L PolyCommit_{DL} PolyCommitDL 方案,计算一批证据
w B = g ψ B ( α ) w_B = g^{\psi_B(\alpha)} wB=gψB(α)

其中
ψ B ( x ) = ϕ ( x ) − r ( x ) ∏ i ∈ B ( x − i ) \psi_B(x) = \frac{\phi(x)-r(x)}{\prod_{i \in B}(x-i)} ψB(x)=iB(xi)ϕ(x)r(x)

这里的 r ( x ) r(x) r(x) 是多项式除法的余数。

  • 批算法 C r e a t e W i t n e s s B a t c h ( P K , ϕ ( x ) , B ) CreateWitnessBatch(PK,\phi(x),B) CreateWitnessBatch(PK,ϕ(x),B) 输出 < B , r ( x ) , w B > <B,r(x),w_B> <B,r(x),wB>

  • 批算法 V e r i f y E v a l B a t c h ( P K , C , B , r ( x ) , w B ) VerifyEvalBatch(PK,C,B,r(x),w_B) VerifyEvalBatch(PK,C,B,r(x),wB) 验证
    e ( C , g ) = ? e ( g ∏ i ∈ B ( α − i ) , w B ) ⋅ e ( g r ( α ) , g ) e(C,g) \overset{?}{=} e(g^{\prod_{i \in B}(\alpha-i)}, w_B) \cdot e(g^{r(\alpha)}, g) e(C,g)=?e(giB(αi),wB)e(gr(α),g)

对于 P o l y C o m m i t P e d PolyCommit_{Ped} PolyCommitPed 方案,也类似。

应用

高效 VSS

Strong Correctness:除了满足正确性,还不能够承诺次数大于 t t t 的多项式。

如果双线性群 G G G 上有 t-polyDH 假设,那么 P o l y C o m m i t D L PolyCommit_{DL} PolyCommitDL P o l y C o m m i t P e d PolyCommit_{Ped} PolyCommitPed 都是强正确的。

基于 t-SDH 假设、t-polyDH 假设,构造的 VSS 如下:

多项式承诺:KZG

原始的 Feldman 的 VSS 方案,在承诺阶段需要分别对多项式的 t t t 个系数做承诺, O ( t ) O(t) O(t) 的复杂度。新的 eVSS 方案在承诺阶段仅需 O ( 1 ) O(1) O(1) 次广播。

ZKS

zero-knowledge sets(ZKS):首先承诺一个集合 S S S,零知识的证明两种声明, k j ∈ S k_j \in S kjS 或者 k j ∉ S k_j \not \in S kjS

由于很多应用中,集合 S S S 的大小不影响安全性,因此可以减弱为可以泄露 ∣ S ∣ |S| S 的信息,叫做 nearly ZKS

假设 ∣ S ∣ ≤ t |S| \le t St,令多项式 ϕ ( k j ) = 0 , ∀ x j ∈ S \phi(k_j)=0, \forall x_j \in S ϕ(kj)=0,xjS,而 ϕ ( k j ) ≠ 0 , ∀ x j ∉ S \phi(k_j)\not =0, \forall x_j \not\in S ϕ(kj)=0,xjS

基于 P o l y C o m m i t P e d PolyCommit_{Ped} PolyCommitPed,nearly ZKS 的构造如下:

多项式承诺:KZG
其中的 ZKPP ,用于证明 Prover 真的知道关于 z j z_j zj 的函数值 ϕ ( k j ) \phi(k_j) ϕ(kj) ϕ ^ ( k j ) \hat \phi(k_j) ϕ^(kj) 的知识,且有 ϕ ( k j ) ≠ 0 \phi(k_j) \neq 0 ϕ(kj)=0

ZK-EDB

zero-knowledge elementary databases(ZK-EDB):数据库 EDB 是一个键值对的列表,首先承诺这个数据库,然后回应 key 的查询,并零知识的证明 value 是正确对应的。

由于很多应用中,数据集 D = ( K , V ) D=(K,V) D=(K,V) 的大小不影响安全性,因此可以减弱为可以泄露 ∣ D ∣ |D| D 的信息,叫做 nearly ZK-EDB

基于 P o l y C o m m i t D L PolyCommit_{DL} PolyCommitDL,nearly ZK-EDB 的构造如下:

多项式承诺:KZG

CES

Content Extraction Signatures(CES):Alice 有数组 ( m 1 , ⋯   , m t ) (m_1,\cdots,m_t) (m1,,mt),需要 Trent 签名。Alice 不希望泄露 m j m_j mj 的信息给 Trent,同时希望向 Bob 证明 Trent 对某个消息 m j m_j mj 签名了。

构造如下:文章来源地址https://www.toymoban.com/news/detail-440161.html

  1. Alice 用 ( i , ϕ ( i ) = m i ) (i,\phi(i)=m_i) (i,ϕ(i)=mi) 插值出多项式 ϕ ( x ) \phi(x) ϕ(x),做承诺 C = C o m m i t ( P K , ϕ ( x ) ) C = Commit(PK,\phi(x)) C=Commit(PK,ϕ(x))
  2. Trent 对承诺值 C C C 签名 σ \sigma σ
  3. Alice 将 m j m_j mj 打开,发送 ( C , σ , j , m j , w j ) (C,\sigma,j,m_j,w_j) (C,σ,j,mj,wj) 给 Bob
  4. Bob 验证 m j m_j mj 确实在承诺值 C C C 里,并且 σ \sigma σ 确实是 Trent 对 C C C 的合法签名

到了这里,关于多项式承诺:KZG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C 数据结构】 用单链表存储一元多项式,并实现两个多项式相加运算。

    本次代码纯c语言,可以支持输入两个多项式的项式、系数、指数。 实验目的: 1 掌握单链表的基本工作原理; 2 实现链式存储下的两个多项式的相加。 实验步骤 1 定义链式存储的数据结构 2 完成多项式的初始化,即给多项式赋初值 3 完成多项式的输出 4 实现多项式的相加及结

    2024年02月06日
    浏览(46)
  • 牛顿插值法、拉格朗日插值法、三次插值、牛顿插值多项式、拉格朗日插值多项式

    两点式线性插值 调用Matlab库函数 拉格朗日二次插值: 牛顿二次插值 结果分析:通过对比不同插值方法,可以看到在一定范围内(高次会出现龙格现象),插值次数越高,截断误差越小(插值结果越接近于真实函数值);同时,对于相同次数的插值,由于不同的插值方法它们

    2024年02月11日
    浏览(44)
  • 多项式混沌展开法

    多项式混沌采用多项式基组合成随机空间,来描述和传播随机变量的不确定性。本质是利用正交多项式的优异性能,通过随机变量的输入到响应的映射过程建立代理模型。该方法收敛性好,使用方便,能较好的适用于复杂的系统。但是该方法理论难度高,多元情况下正交多项

    2023年04月15日
    浏览(42)
  • Jacobi正交多项式

    注:本文的内容主要根据文末中的参考文档[1,2,3]中的内容进行整理完成。 设 I = [ − 1 , 1 ] I=[-1,1] I = [ − 1 , 1 ] 是实轴上的标准区间,定义在 I I I 上的正函数: ω α , β ( x ) = ( 1 − x ) α ( 1 + x ) β , α − 1 , β − 1 omega_{alpha,beta}(x)=(1-x)^{alpha}(1+x)^{beta}, alpha-1,beta-1 ω α , β

    2024年02月13日
    浏览(43)
  • 多项式拟合

    文章内容部分参考: 建模算法入门笔记-多项式拟合(附源码) - 哔哩哔哩 (bilibili.com) (9条消息) 数学建模——人口预测模型 公有木兮木恋白的博客-CSDN博客 数学建模人口预测模型 多项式拟合是数据拟合的一种,与插值有一定区别(插值要求曲线经过给定的点,拟合不一定经

    2024年02月04日
    浏览(49)
  • 多项式乘法逆

    前置知识:NTT学习笔记(快速数论变换) 情景代入 洛谷P4238 【模板】多项式乘法逆 给定一个多项式 f ( x ) f(x) f ( x ) ,求 g ( x ) g(x) g ( x ) ,满足 f ( x ) × g ( x ) ≡ 1 ( m o d x n ) f(x)times g(x)equiv 1pmod{x^n} f ( x ) × g ( x ) ≡ 1 ( mod x n ) 。系数对 998244353 998244353 998244353 取模。 1 ≤

    2024年02月02日
    浏览(46)
  • Matlab 多项式拟合

    corrcoef函数 corrcoef函数用来计算矩阵相关系数。 (1)、corrcoef(x):若x为一个矩阵,返回的则是一个相关系数矩阵。 (2)、corrcoef(x,y):计算列向量x、y的相关系数,要求x、y具有相等的元素个数。如果x、y是矩阵,那么corrcoef函数会将其转换为列向量,相当于corrcoef([x(:),y(:)])。   p

    2024年02月11日
    浏览(46)
  • Matlab作图多项式拟合

    一、拟合函数 polyfit(s,y,n) polyval(p,x) poly2str(p,\\\' x \\\' ) 二、拟合步骤 1.做原始数据的散点图 2.选择恰当的次数n,用polyfit指令求得多项式 3.计算多项式p在x处的值 4.画出多项式函数的曲线图 三、拟合实例 对x等于1-10,y大于20小于40的随机数进行多项式拟合 x=1:10;y=20+20*rand(1,10);%定义

    2023年04月25日
    浏览(44)
  • 多项式快速幂(加强版)

    建议阅读我的上一篇博客多项式快速幂 求多项式快速幂,但 a 0 ≠ 1 a_0not=1 a 0 ​  = 1 。 由于求 ln ⁡ ln ln 要求 a 0 = 1 a_0=1 a 0 ​ = 1 ,所以我们要想办法对多项式进行变换,使其满足 a 0 = 1 a_0=1 a 0 ​ = 1 。 如果 f ( x ) f(x) f ( x ) 常数项为 0 0 0 ,那么就整体除去 x x x 的若干次

    2024年02月07日
    浏览(36)
  • 伴侣矩阵求解多项式的根

    已知方程 P ( x ) = ∑ i = 0 n a i x n = 0 P(x) = sum_{i=0}^{n}a_ix^n = 0 P ( x ) = ∑ i = 0 n ​ a i ​ x n = 0 ,通过伴侣矩阵求解该方程的根。 此处参考百度知道,就可以大概知道伴侣矩阵的构建。具体如下, 设 f ( t ) = t n + a 1 t n − 1 + … + a n − 1 t + a n . f(t)=t^n+a_1 t^{n-1}+ldots+a_{n-1} t+a_n .

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包