参考文献:
- Merkle, R. ”Protocols for Public Key Cryptosystems.” Proc. 1980 Symp. on Security and Privacy, IEEE Computer Society (April 1980), 122-133.
- 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.
- 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×Y→X 是准交换的(quasi-commutative),如果对于任意的
x
∈
X
x \in X
x∈X,以及任意的
y
1
,
y
2
∈
Y
y_1,y_2 \in Y
y1,y2∈Y,有
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 来生成。花费大代价生成后,它可以被任意重用。
-
时间戳(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 对应文档的时间戳时,只需同时提供这个二元组即可。
-
-
隶属证明(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))
(x−i)∣(ϕ(x)−ϕ(i))
也就是说,存在多项式
ψ
(
x
)
\psi(x)
ψ(x),满足
ψ
i
(
x
)
=
ϕ
(
x
)
−
ϕ
(
i
)
x
−
i
\psi_i(x) = \frac{\phi(x)-\phi(i)}{x-i}
ψi(x)=x−iϕ(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+ϕ2⟺Cϕ=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 B⊂Zp,其中 ∣ 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)=∏i∈B(x−i)ϕ(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(g∏i∈B(α−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 kj∈S 或者 k j ∉ S k_j \not \in S kj∈S
由于很多应用中,集合 S S S 的大小不影响安全性,因此可以减弱为可以泄露 ∣ S ∣ |S| ∣S∣ 的信息,叫做 nearly ZKS。
假设 ∣ S ∣ ≤ t |S| \le t ∣S∣≤t,令多项式 ϕ ( k j ) = 0 , ∀ x j ∈ S \phi(k_j)=0, \forall x_j \in S ϕ(kj)=0,∀xj∈S,而 ϕ ( k j ) ≠ 0 , ∀ x j ∉ S \phi(k_j)\not =0, \forall x_j \not\in S ϕ(kj)=0,∀xj∈S
基于 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 签名了。文章来源:https://www.toymoban.com/news/detail-440161.html
构造如下:文章来源地址https://www.toymoban.com/news/detail-440161.html
- 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))
- Trent 对承诺值 C C C 签名 σ \sigma σ
- Alice 将 m j m_j mj 打开,发送 ( C , σ , j , m j , w j ) (C,\sigma,j,m_j,w_j) (C,σ,j,mj,wj) 给 Bob
- Bob 验证 m j m_j mj 确实在承诺值 C C C 里,并且 σ \sigma σ 确实是 Trent 对 C C C 的合法签名
到了这里,关于多项式承诺:KZG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!