参考文献:
- [BFM88] Blum M, Feldman P, Micali S. Non-interactive zero-knowledge and its applications[M]//Providing Sound Foundations for Cryptography: On the Work of Shafi Goldwasser and Silvio Micali. 2019: 329-349.
- [FS90] Feige U, Shamir A. Witness hiding and witness indistinguishability[C]//Proc. 22nd Annual ACM Symposium on the Theory of Computing, Baltimore. 1990: 416-426.
- [NY90] Naor M, Yung M. Public-key cryptosystems provably secure against chosen ciphertext attacks[C]//Proceedings of the twenty-second annual ACM symposium on Theory of computing. 1990: 427-437.
- [BR95] Bellare M, Rogaway P. Optimal asymmetric encryption[C]//Advances in Cryptology—EUROCRYPT’94: Workshop on the Theory and Application of Cryptographic Techniques Perugia, Italy, May 9–12, 1994 Proceedings 13. Springer Berlin Heidelberg, 1995: 92-111.
- [BRS02] Black J, Rogaway P, Shrimpton T. Encryption-scheme security in the presence of key-dependent messages[C]//Selected Areas in Cryptography: 9th Annual International Workshop, SAC 2002 St. John’s, Newfoundland, Canada, August 15–16, 2002 Revised Papers 9. Springer Berlin Heidelberg, 2003: 62-75.
- [BP04] Bellare M, Palacio A. Towards plaintext-aware public-key encryption without random oracles[C]//International Conference on the Theory and Application of Cryptology and Information Security. Berlin, Heidelberg: Springer Berlin Heidelberg, 2004: 48-62.
- [Gen09] Gentry C. A fully homomorphic encryption scheme[M]. Stanford university, 2009.
- [LMSV12] Loftus J, May A, Smart N P, et al. On CCA-secure somewhat homomorphic encryption[C]//Selected Areas in Cryptography: 18th International Workshop, SAC 2011, Toronto, ON, Canada, August 11-12, 2011, Revised Selected Papers 18. Springer Berlin Heidelberg, 2012: 55-72.
文章目录
- Naor-Yung Paradigm
- Key-Dependent Messages
- CCA-secure SWHE
- 安全性的关系
Naor-Yung Paradigm
最早在 [BFM88] 中,文章提出了 NIZKP 的概念,并证明任意的 ZKP 协议中的交互,可以被取代为一个共享的短随机带。本文基于二次剩余假设,构造了一个三着色语言的非交互零知识证明协议。[BFM88] 最后简略地提出,可以用 NIZKPoK 证明 “我知道此密文的解密”,从而使得解密神谕无用,把 IND-CCA 归约到 IND-CPA 上,第一次给出了 IND-CCA 安全的密码协议。
[NY90] 则是第一次给出了如何将 IND-CPA PKE 转化为 IND-CCA PKE 的具体构造方案,并给出了安全性证明。并不是证明 “我知道密文的解密”,而是类似于 [FS90] 的 WH/WI,将消息独立地加密两次,然后证明两个密文的一致性(不再需要 PoK)。由于解密时只需要两个密文其中之一,因此只要持有其中之一的私钥就可以解密成功(从而模拟解密神谕)。所以可以将针对 IND-CPA PKE 的 CPA 攻击,模拟成针对 IND-CCA PKE 的 CCA 攻击,这就完成了安全归约。
[NY90] 使用了 [BFM88] 的 CRS 模型下的 NIZKP,简记为 ( P , V , U ) (P,V,U) (P,V,U),其中 U U U 是 CRS 的均匀分布。令 R ← U R \leftarrow U R←U 是公共随机串, p p p 是个 proof,那么 ( R , p ) (R,p) (R,p) 是 NIZK 的副本,而 ZK 模拟器需要给出不可区分的分布。
但是 [NY90] 有一些额外要求:
-
简单并行 NIZKP,可以降低 soundness erorr,并且保持 ZK 性质(交互式 ZKP 不一定保持 ZK,仅仅保持 WI)
-
Strong soundness:即使 CRS 随机带 R R R 已知,然后才选择实例 y ∉ L y \not\in L y∈L,依然以压倒性概率使得 P ∗ P^* P∗ 给出的 proof 不被接受,
P r R ← U n [ V ( R , y , p ; r V ) = R e j e c t : ∀ y ∉ L , ∀ p ← P ∗ ( R , y ; r P ) ] = 1 − n e g l ( n ) \underset{R \leftarrow U_n}{Pr}\left[ V(R,y,p;r_V)=Reject: \forall y \not\in L, \forall p\leftarrow P^*(R,y;r_P) \right] = 1-negl(n) R←UnPr[V(R,y,p;rV)=Reject:∀y∈L,∀p←P∗(R,y;rP)]=1−negl(n)作为对比,soundness 仅仅要求
∀ y ∉ L , P r R ← U n [ V ( R , y , p ; r V ) = R e j e c t : ∀ p ← P ∗ ( R , y ; r P ) ] = 1 − n e g l ( n ) \forall y \not\in L, \underset{R \leftarrow U_n}{Pr}\left[ V(R,y,p;r_V)=Reject: \forall p\leftarrow P^*(R,y;r_P) \right] = 1-negl(n) ∀y∈L,R←UnPr[V(R,y,p;rV)=Reject:∀p←P∗(R,y;rP)]=1−negl(n)可以使用量词转换技术(quantifier swapping technique ),并行 2 n 2n 2n 个副本,使得 soundness error 降低到至多 2 − 2 n 2^{-2n} 2−2n,由于 ∣ y ∣ = n |y|=n ∣y∣=n,因此 strong soundness error 就至多为 2 − n 2^{-n} 2−n
-
Valid distributions:在 strong soundness 中要求 CRS 的分布服从均匀分布,但是 Sim 模拟的分布 S R ( x ) , x ∈ L S_R(x),x \in L SR(x),x∈L 不一定是均匀的。我们说分布簇 { Q R ( x ) : x ∈ L } \{Q_R(x):x \in L\} {QR(x):x∈L} 是有效的,如果不存在 PPT 算法:它先选择 x ∈ L x \in L x∈L,然后输入 R ← Q R ( x ) R \leftarrow Q_R(x) R←QR(x),以显著优势找到一对 invalid word ( y , p ) (y,p) (y,p),使得 y ∉ L , p ∈ A c c e p t ( R , y ) y \not\in L,p \in Accept(R,y) y∈L,p∈Accept(R,y)。[NY90] 要求模拟器输出的分布簇 { S R ( x ) : x ∈ L } \{S_R(x):x \in L\} {SR(x):x∈L} 是有效的,并证明了任意的 NIZKP 都可以转化为 S R S_R SR 有效的另一个 NIZKP。
-
Recognizability:要求存在一个有效算法,可以识别出 invalid word
现在,使用上述的 NIZKP,可以将 IND-CPA PKE
Π
=
(
G
e
n
,
E
n
c
,
D
e
c
)
\Pi=(Gen,Enc,Dec)
Π=(Gen,Enc,Dec) 转化为 IND-CCA PKE
Π
′
=
(
G
e
n
′
,
E
n
c
′
,
D
e
c
′
)
\Pi'=(Gen',Enc',Dec')
Π′=(Gen′,Enc′,Dec′)。我们定义 NP 语言 consistent double encryptions:
L
N
Y
Π
:
=
{
(
p
k
1
,
p
k
2
,
c
1
,
c
2
)
:
∃
m
,
r
1
,
r
2
,
s
.
t
.
c
1
=
E
(
p
k
1
,
m
;
r
1
)
,
c
2
=
E
(
p
k
2
,
m
;
r
2
)
}
L_{NY}^\Pi := \{(pk_1,pk_2,c_1,c_2): \exists m,r_1,r_2,\,\, s.t.\,\, c_1=E(pk_1,m;r_1), c_2=E(pk_2,m;r_2)\}
LNYΠ:={(pk1,pk2,c1,c2):∃m,r1,r2,s.t.c1=E(pk1,m;r1),c2=E(pk2,m;r2)}
令 ( P , V , U ) (P,V,U) (P,V,U) 是关于语言 L N Y Π L_{NY}^\Pi LNYΠ 的 NIZKP。那么 Naor-Yung Paradigm 就是:
- ( s k , p k , R ) ← G e n ′ ( n ) (sk,pk,R) \leftarrow Gen'(n) (sk,pk,R)←Gen′(n):独立运行两次 G e n Gen Gen 获得独立随机公私钥对 ( s k 1 , p k 1 ) , ( s k 2 , p k 2 ) (sk_1,pk_1),(sk_2,pk_2) (sk1,pk1),(sk2,pk2),随机采样 R ← U R \leftarrow U R←U
- ( c 1 , c 2 , p ) ← E n c ′ ( p k , m ) (c_1,c_2,p) \leftarrow Enc'(pk,m) (c1,c2,p)←Enc′(pk,m):采样随机带 r 1 , r 2 r_1,r_2 r1,r2,分别加密 c i = E ( p k i , m ; r i ) , i = 1 , 2 c_i=E(pk_i,m;r_i),i=1,2 ci=E(pki,m;ri),i=1,2,并给出一致性证明 p = P ( R , ( p k 1 , p k 2 , c 1 , c 2 ) , ( m , r 1 , r 2 ) ) p=P(R,(pk_1,pk_2,c_1,c_2),(m,r_1,r_2)) p=P(R,(pk1,pk2,c1,c2),(m,r1,r2))
- m ← D e c ( s k , c ) m \leftarrow Dec(sk,c) m←Dec(sk,c):验证一致性 t ← V ( R , ( p k 1 , p k 2 , c 1 , c 2 ) , p ) t \leftarrow V(R,(pk_1,pk_2,c_1,c_2),p) t←V(R,(pk1,pk2,c1,c2),p),并用 s k i , i = 1 , 2 sk_i,i=1,2 ski,i=1,2(其中之一)解密对应的密文 c i c_i ci 得到消息 m m m
在 [NY90] 中证明了上述方案是 IND-CCA 的(当时人们还没区分 CCA1/CCA2,但它应该是 IND-CCA2 的),否则便打破了 CPA 或者 ZK。大体思路是:给定 CPA 目标 ( p k 1 , c t 1 = E ( p k 1 , b 1 , r 1 ) ) (pk_1, ct_1=E(pk_1, b_1, r_1)) (pk1,ct1=E(pk1,b1,r1)),随机生成 ( s k 2 , p k 2 ) (sk_2, pk_2) (sk2,pk2),计算 c t 2 = E ( p k 2 , b 2 = 0 , r 2 ) ct_2=E(pk_2, b_2=0, r_2) ct2=E(pk2,b2=0,r2),运行 NIZK Sim 模拟出 ( c t 1 , c t 2 ) (ct_1,ct_2) (ct1,ct2) 的一致性证明 ( R , p ) (R,p) (R,p),这就制造出了一个 CCA 目标 ( ( p k 1 , p k 2 ) , R , c t ∗ = ( c t 1 , c t 2 , p ) ) ((pk_1,pk_2), R, ct^* = (ct_1,ct_2,p)) ((pk1,pk2),R,ct∗=(ct1,ct2,p));每当 CCA 敌手询问解密神谕,只要它不是 invalid word(根据 Valid distributions 以及 Recognizability,压倒性优势不会出现),我们就可以用 s k 2 sk_2 sk2 正确解密;当 CCA 敌手以显著优势猜测 c t ∗ ct^* ct∗ 时,根据 b 1 = 0 = b 2 b_1=0=b_2 b1=0=b2 还是 b 1 = 1 ≠ b 2 b_1=1\neq b_2 b1=1=b2 导致不同的概率分布,从而以显著优势区分出 CPA 目标。另外 CRS 模型下的 NIZK of NPC,替换为 ROM 模型下语言 L N Y Π L_{NY}^\Pi LNYΠ 专用的 FS Heuristic 似乎也没问题。
Key-Dependent Messages
[BRS02] 提出了 KDM 安全的概念,它严格地比 IND-CPA更强(KDM 则必然 IND-CPA,反之不然)。并且,本文证明了(对称/非对称)KDM 安全在 ROM 下轻易可达。
想要构造安全的 FHE 方案总是绕不过 KDM 安全,我们可以利用 KDM 安全的可自举 SWHE,通过重加密来获得 FHE。不过 standard model 下可以构造出 KDM 安全的 PKE 么?毕竟 Hash 函数的乘法深度太大了。
符号表 S S S,令 S ∗ S^* S∗ 代表有限长字符串, S ∞ S^\infty S∞ 代表无限长字符串。令 K = ( K 1 , K 2 , ⋯ ) K=(K_1,K_2,\cdots) K=(K1,K2,⋯) 是一串秘钥,函数 g g g 作用在 K K K 上计算函数值。敌手 A A A 试图与函数 g g g 共谋,使得 g g g 的输出值对应的密文泄露秘钥的部分信息。令 H H H 是随机神谕,ROM 下对称加密的 KDM 安全性:
注意默认的基本要求是 ∣ g H ( K ) ∣ = ∣ g H ′ ( K ′ ) ∣ , ∀ H ≠ H ′ , ∀ K ≠ K ′ |g^H(K)| = |g^{H'}(K')|, \forall H \neq H',\forall K \neq K' ∣gH(K)∣=∣gH′(K′)∣,∀H=H′,∀K=K′,保证密文长度不会泄露秘钥信息。如果简单地把 H H H 去掉,那么就是 standard model 下的安全性定义了。
[BRS02] 给出了 ROM 下 KDM 安全的对称加密方案。令 Π = ( K G , E , D ) \Pi=(KG,E,D) Π=(KG,E,D) 是标准模型下 IND-CPA 安全的对称加密,那么构造 Π ′ = ( K G ′ , E ′ , D ′ ) \Pi'=(KG',E',D') Π′=(KG′,E′,D′)
- 秘钥生成算法 K G ′ ( λ ) KG'(\lambda) KG′(λ):简单调用算法 K G ( λ ) KG(\lambda) KG(λ) 获得对称秘钥 k ∈ { 0 , 1 } λ k \in \{0,1\}^\lambda k∈{0,1}λ
- 加密算法 E ′ ( k , m ) E'(k,m) E′(k,m):随机采样 r ∈ { 0 , 1 } λ r \in \{0,1\}^\lambda r∈{0,1}λ,计算 k ′ = H ( k ∥ r ) k'=H(k\|r) k′=H(k∥r),输出密文 r ∥ E ( k ′ , m ) r\|E(k',m) r∥E(k′,m)
- 解密算法 D ′ ( k , c ) D'(k,c) D′(k,c):计算 k ′ = H ( k ∥ r ) k'=H(k\|r) k′=H(k∥r),输出消息 D ( k ′ , c ) D(k',c) D(k′,c)
特别地,可以简单设置 E ( k , m ; r ) = k ⊕ m E(k,m;r) = k \oplus m E(k,m;r)=k⊕m 是个 one-time pad。对于这个 Π \Pi Π 转化得到的 Π ′ \Pi' Π′,假设 KDM 敌手 A A A 询问了 q q q 次(加密神谕、直接 RO、间接 RO),那么优势仅为 A d v Π ′ K D M ( A ) ≤ q 2 / 2 λ − 2 Adv_{\Pi'}^{KDM}(A) \le q^2/2^{\lambda-2} AdvΠ′KDM(A)≤q2/2λ−2。
类似的,可以给出公钥方案的 standard/RO model 下的 KDM 安全性:
我们构造 ROM 下 KDM 安全的公钥方案。令 ( f , f − 1 ) (f,f^{-1}) (f,f−1) 是 trapdoor PRP,
- 加密算法 E ( f , m ) E(f,m) E(f,m):随机采样 r r r,输出密文 f ( r ) ∥ H ( r ) ⊕ m f(r)\|H(r) \oplus m f(r)∥H(r)⊕m(咦?跟 FO Transform 好像啊!)
- 解密算法 D ( f − 1 , c ) D(f^{-1},c) D(f−1,c):求逆 r = f − 1 ( f ( r ) ) r=f^{-1}(f(r)) r=f−1(f(r)),解密出消息 m m m
如果 { f } \{f\} {f} 是安全的 trapdoor PRP,那么上述方案是 IND-KDM 安全的。或者给定某 IND-CPA 安全的 PKE,也可以类似的转化为 IND-KDM 安全。
不过怎么保持SWHE的同态性质?[Gen09] 中,仅在加密私钥时使用 KDM 加密:
E
(
s
k
)
:
=
S
W
H
E
.
E
(
r
)
∥
S
Y
M
.
E
(
H
(
r
)
,
s
k
)
E(sk) := SWHE.E(r) \| SYM.E(H(r), sk)
E(sk):=SWHE.E(r)∥SYM.E(H(r),sk)
把它放在 pk 中。而加密消息时,依然是 E ( m ) : = S W H E . E ( m ) E(m):=SWHE.E(m) E(m):=SWHE.E(m)。同态电路中,首先计算 H ( r ) H(r) H(r) 解密出 s k sk sk,然后再自举刷新 E ( m ) E(m) E(m)。这个方案是 ROM 下 KDM 安全的。进一步的,只要这个 SWHE 能够支持同态计算 S Y M . D ( H ( r ) , s k ) SYM.D(H(r), sk) SYM.D(H(r),sk),那么就可以将上述协议归约为 pk 中仅存放 E ( s k ) : = S W H E . E ( s k ) E(sk) := SWHE.E(sk) E(sk):=SWHE.E(sk) 的自然 FHE,从而(不包含 Hash 函数的)FHE 是 ROM 下语义安全的(而非标准模型)。
CCA-secure SWHE
[BR95] 提出了 Plaintext Awareness 的概念:生成密文的唯一方式就是从明文加密获得。根据定义的一些细微区别,[BP04] 把 PA 分为了 PA-0, PA-1, PA-2,并且有 PA-X + CPA = CCA-X, X=1,2,安全性的关系如图:
因为 PA 是一个强大的概念,为了证明它也就需要强大的假设:knowledge assumption。例如:某算法可以输出一个十分靠近格点的非格点向量,那么它必须 “知道”( ⟺ \iff ⟺可以写出)对应的最近格点。为了证明某 CPA 安全的方案也是 CCA1 安全的,我们需要 PA-1 的概念,它定义如下:
很明显,由于同态方案的延展性(malleable),IND-CCA2 是不可达的。但是一些单同态方案(ElGamal 变体)确实达到了 IND-CCA1 安全,而 [LMSV12] 第一次给出了 IND-CCA1 安全的 SWHE(标准模型 + 知识假设)。不过本文构造的 SWHE 是基于 ideal lattice 的 Gentry 方案的变体,结构较为复杂,看不太懂。后续是否有人给出基于 (R/M)LWE 的 CCA1 安全的 SWHE 呢?
他们进一步证明了这个 SWHE 方案不是 CVA 安全的(ciphertext verifification, 敌手两个阶段都可以访问一个判断密文是否有效的神谕)。这说明 IND-CCA1 或者 PA-1 不能导致 CVA,但是解密神谕直接导出密文有效性神谕,于是 CVA 应当是介于 CCA1 和 CCA2 之间的安全强度。所以,SWHE 是否可以达到 CVA 安全呢?
[LMSV12] 最后考虑了 CCA2 安全对于 FHE 场景的必要性(例如,异步的多方安全计算,新鲜密文 E ( m ) E(m) E(m) 可被其他人复制为 E ( 0 ) + E ( m ) E(0)+E(m) E(0)+E(m),再假设计算的是 majority 函数),提出了 CCA-embeddable homomorphic encryption,也就是使用 Naor-Yung Paradigm 把一个 IND-CPA 安全的 FHE,转化为 IND-CCA2 安全的 PKE(整体上不再是 FHE,但是它包含的两个密文 ( c 1 , c 2 ) (c_1,c_2) (c1,c2) 还可以做同态计算)。
安全性的关系
总结下一些安全性定义之间的强度关系:
- C P A ≤ K D M CPA \le KDM CPA≤KDM
- C C A 1 ≤ C P A + P A 1 ≰ C C A 2 CCA1 \le CPA+PA1 \not\le CCA2 CCA1≤CPA+PA1≤CCA2
- C P A ≤ C V A ≤ C C A 2 C V A ≰ C C A 1 CPA \le CVA \le CCA2\\ CVA \not\le CCA1\\ CPA≤CVA≤CCA2CVA≤CCA1