多项式承诺: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 基于离散对数问题,以及它的一系列变体,

在这里插入图片描述

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

在这里插入图片描述

我们说一个多项式承诺协议 ( 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 给出了两种构造方案,第一种是计算隐藏的,第二种是无条件隐藏的。

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 如下:

在这里插入图片描述

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 如下:

在这里插入图片描述

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 如下:

在这里插入图片描述

原始的 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 的构造如下:

在这里插入图片描述
其中的 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 的构造如下:

在这里插入图片描述

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 签名了。

构造如下:

  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 的合法签名

猜你喜欢

转载自blog.csdn.net/weixin_44885334/article/details/127858216