参考文献:
- [SMP88] Santis A, Micali S, Persiano G. Non-Interactive Zero-Knowledge with Preprocessing[C]//Advances in Cryptology—CRYPTO’88.
- [LS90] Lapidot D, Shamir A. Publicly verifiable non-interactive zero-knowledge proofs[C]//Advances in Cryptology-CRYPTO’90: Proceedings 10. Springer Berlin Heidelberg, 1991: 353-365.
文章目录
- ZKP with Pre-processing
- PZK for Hamiltonicity
- NIZK with CRS for any NP
ZKP with Pre-processing
[SMP88] 提出了一个弱化版本的 NIZK 系统,叫做 ZKP with Pre-processing(PZK)。它是一个 IP 系统,可以明确地分成交互阶段和非交互阶段。在交互阶段,Prover 和 Verifier 仅仅交换一些和要证明的 statement 无关的信息(预处理);在非交互阶段,Prover 发送 proof 给到 Verifier,后者不必回复。
PZK 应当具备如下的属性:
PZK for Hamiltonicity
[SMP88] 利用 any one-way encryption scheme 构造 PZK,后续 [LS90] 证明 PZK 只需要基于 OWF 存在性。他们构造了一个类似于 Blum’s ZK-PoK for Hamiltonian cycle 的 PZK,它的基础步骤是:
- 在交互阶段,
- P 和 V 生成 n n n 个点的随机 HC,记为 H H H
- 将 H H H 的邻接矩阵的各个 entry 替换为隐藏它的某随机串,记为矩阵 S ∈ ( Σ ∗ ) n × n S \in (\Sigma^*)^{n \times n} S∈(Σ∗)n×n
- 使得 P 知晓 H H H 和 S S S,而 V 不知道 H H H 但是持有 S S S
- 在非交互阶段,P 向 V 证明某个
n
n
n 点的图
G
G
G 包含 HC
- P 生成一个随机置换 π \pi π,将 H H H 嵌入到 G G G,即 π ( H ) ⊆ G \pi(H) \subseteq G π(H)⊆G
- P 将 π ( H ) \pi(H) π(H) 对应的(隐藏的)邻接矩阵 π ( S ) \pi(S) π(S) 中的那些不是 G G G 的边的邻接值揭示给 V,同时也发送 π \pi π
- V 检查这些被揭示的邻接值(就是检查它们和 π ( S ) \pi(S) π(S) 的绑定关系),如果都是 0 0 0 则接受(意味着 π ( H ) \pi(H) π(H) 包含在 G G G 内部),否则拒绝
这个过程是 ZK 的,容易被模拟。为了获得 PZK with negl. s.e.,可以这么做:
- 在交互阶段,P 生成 l l l 个随机矩阵 S 1 , ⋯ , S l S_1,\cdots,S_l S1,⋯,Sl 发送给 V,然后 V 回应 k k k 个随机比特 c 1 , ⋯ , c l c_1,\cdots,c_l c1,⋯,cl
- 在非交互阶段,假如 c i = 0 c_i=0 ci=0 那么 P 揭示 S i S_i Si 的全部 entry 给 V(检查 H i H_i Hi 是个 HC),假如 c i = 1 c_i=1 ci=1 那么 P 就按照上述的基础步骤执行(检查 π i ( H i ) ⊆ G \pi_i(H_i) \subseteq G πi(Hi)⊆G)
这个 PZK 和 Blum’s ZK-PoK 的区别是:前者只在最后的非交互阶段依赖于 G G G(为了 NIZK 只需较弱的假设),而后者的所有通信轮次都依赖于 G G G(为了 NIZK 需要很强的假设)
NIZK with CRS for any NP
[LS90] 把上述 PZK 的交互阶段,使用 common random string(CRS)来预计算:随机生成矩阵序列,使得高概率存在某个矩阵是 Hamiltonian matrix,将它用于上述的 PZK 执行。
为了从 CRS 中获得随机性(注意 CRS 是公开的固定比特串),P 使用 Goldreich-Levin Hard-core 来生成随机的 HC 邻接矩阵:
- 目标矩阵是 B ∈ { 0 , 1 } n 2 × n 2 B \in \{0,1\}^{n^2 \times n^2} B∈{0,1}n2×n2,使得满足 P r ( B i j = 1 ) = 1 / n 3 , ∀ i , j Pr(B_{ij}=1)=1/n^3, \forall i,j Pr(Bij=1)=1/n3,∀i,j
- [LS90] 将恰好含有 n n n 个 1 1 1 且它们组成了 n n n 阶置换子矩阵的 B B B 称之为 proper,将 n n n 阶置换子矩阵形成了 HC 的 B B B 称之为 good
- 将 CRS划分为 k k k 比特的分块 r i r_i ri,给定某个 OWP f f f(P 可以求逆,V 不可以求逆),定义 x j = f − 1 ( r 2 j + 0 ) , y j = r 2 j + 1 x_{j}=f^{-1}(r_{2j+0}), y_{j}=r_{2j+1} xj=f−1(r2j+0),yj=r2j+1,计算硬核 s j = ⟨ x j , y j ⟩ ( m o d 2 ) s_{j} = \langle x_{j}, y_{j}\rangle \pmod{2} sj=⟨xj,yj⟩(mod2),它们对 V 来说是不可预测的,形成了 hidden random string(HRS)
- 再将 HRS 划分为 m = log ( n 3 ) m=\log(n^3) m=log(n3) 比特的分块 a i a_i ai,设置 b i = 1 ⟺ a i = 2 m − 1 b_i=1 \iff a_i=2^m-1 bi=1⟺ai=2m−1,易知 P r ( b i = 1 ) = 1 / n 3 Pr(b_i=1)=1/n^3 Pr(bi=1)=1/n3,它们被用于构造随机矩阵 B B B
- P 可以求逆
f
f
f 构造出
B
B
B,而 V 需要验证它是否是 good 矩阵(要求 P 公开
b
i
b_i
bi 及其对应的
x
j
x_j
xj,于是 V 可用 CRS 可以检验它们),从而被应用到上述的 PZK for HC 中
- 如果 B B B 包含至少 n + 1 n+1 n+1 个 1 1 1,则揭示其中的 n + 1 n+1 n+1 个位置
- 如果 B B B 包含至多 n − 1 n-1 n−1 个 1 1 1,则揭示全部的位置
- 如果 B B B 存在某行/某列含有至少两个 1 1 1,则揭示这两个位置
- 现在 B B B 是 proper 矩阵,揭示并消除那些全零的行/列,获得 n n n 阶置换阵 N N N
- 如果 N N N 不是汉密尔顿圈,那么揭示全部的位置
- 现在 N N N 是 good 矩阵,它作为某随机 HC 的邻接矩阵,可以被应用到 PZK for HC 中
- 将上述过程重复 n 3 n^3 n3 次,如果每次 V 检验 P 揭示的位置都是正确的,且每次的 PZK for HC 也都是接受,那么 V 就最终接受 P 的声明,否则拒绝
[LS90] 证明了随机矩阵 B B B 恰好是一个汉密尔顿圈的概率是 ≥ d n − 2 \ge dn^{-2} ≥dn−2,其中 d d d 是某常数。如果使用 2 n 7 k m 2n^7km 2n7km 比特的 CRS 生成 n 3 n^3 n3 个这种矩阵,那么以至少 1 − e − n 1-e^{-n} 1−e−n 的概率存在某个矩阵是 good 的。对上述的 PZK for HC 重复 l l l 次以获得 negl. s.e.,则共计需要 O ( n 7 k m l ) O(n^7kml) O(n7kml) 比特的 CRS。
由于 HC 是一个 NPC 问题,因此假设 OWF/OWP 存在,那么就存在 NIZK with CRS for any NP。