在上一篇博客中,介绍了Boneh-Franklin的基于身份的加密方案,准确地说,是介绍了Boneh-Franklin论文[1]中最基础的方案——BasicIdent。在这篇博客中,主要论述BasicIdent可以抵抗选择明文攻击(chosen plaintext attacks, CPA),但不可以抵抗选择密文攻击(chosen ciphertext attacks)。
前置知识
归约
存在两个问题 P 1 P1 P1和 P 2 P2 P2,算法 M 1 M1 M1可以解决问题 P 1 P1 P1。如果能构造出另一个算法 M 2 M2 M2用来解决问题 P 2 P2 P2,其中 M 1 M1 M1是 M 2 M2 M2的子程序。这时 P 1 P1 P1归约到了 P 2 P2 P2。[2]
例如对方案1进行安全性证明:
- 将方案1归约到方案2
- 假设:存在攻击者 A \mathcal{A} A可以攻破方案1
- 因此存在攻击者 B \mathcal{B} B可以攻破方案2
- 方案2是已证明安全的方案,或者是困难问题,或者是一密码本源
- 存在矛盾,假设不成立,方案1是安全的。
注意:reduction的中文翻译应该是“归约”而不是“规约”。
Bilinear Diffie-Hellman (BDH)问题
e e e是一个双线性映射: G 1 × G 1 ⟶ G 2 G_1 \times G_1 \longrightarrow G_2 G1×G1⟶G2。 P P P是 G 1 G_1 G1的生成元, e ( P , P ) e(P,P) e(P,P)是 G 2 G_2 G2的生成元, G 1 G_1 G1和 G 2 G_2 G2的阶都为 p p p。给定一个元组 < P , a P , b P , c P > <P,aP,bP,cP> <P,aP,bP,cP>,其中 a , b , c a,b,c a,b,c是从 Z p ∗ Z_p^* Zp∗中随机选取的元素。计算 e ( P , P ) a b c e(P,P)^{abc} e(P,P)abc就是BDH问题。
攻击者 A \mathcal{A} A解决BDH问题的优势定义如下:
A d v B D H ( A ) = P r [ A ( P , a P , b P , c P ) ⇒ e ( P , P ) a b c ] Adv^{BDH}(\mathcal{A}) = Pr[\mathcal{A}(P,aP,bP,cP) \Rightarrow e(P,P)^{abc}] AdvBDH(A)=Pr[A(P,aP,bP,cP)⇒e(P,P)abc]
如果 A \mathcal{A} A在 t t t时间内, A d v B D H ( A ) < ϵ Adv^{BDH}(\mathcal{A}) < \epsilon AdvBDH(A)<ϵ,则称BDH问题是 ( ϵ , t ) (\epsilon,t) (ϵ,t)-困难。
CPA安全性证明
安全证明的整体思路就是,先将BasicIdent归约到一个非基于身份的加密方案BasicPub,再将BasicPub归约到BDH问题。
BasicPub方案
- 产生密钥:
- 哈希函数 H 2 : G 2 → { 0 , 1 } n H_2:G_2 \rightarrow \{0,1\}^n H2:G2→{ 0,1}n;
- P P P是 G 1 G_1 G1的一个生成元;
- 随机选取 s ← R Z p ∗ s \xleftarrow{R} Z_p^* sRZp∗,并计算 P p u b = s P P_{pub}=sP Ppub=sP;
- 随机选择 Q i d ← R G 1 ∗ Q_{id} \xleftarrow{R} G^*_1 QidRG1∗;
- 私钥 d i d = s Q i d d_{id}=sQ_{id} did=sQid,公钥 p k = < P , P p u b , Q i d , H 2 > pk=<P,P_{pub},Q_{id},H_2> pk=<P,Ppub,Qid,H2>。
- 加密:
- 明文 M ∈ { 0 , 1 } n M \in \{0,1\}^n M∈{ 0,1}n;
- 随机选取 r ← R Z p ∗ r \xleftarrow{R} Z^*_p rRZp∗;
- U = r P , V = M ⊕ H 2 ( e ( Q i d , P p u b ) r ) U=rP, \quad V=M \oplus H_2(e(Q_{id},P_{pub})^r) U=rP,V=M⊕H2(e(Qid,Ppub)r),密文 C = < U , V > C=<U,V> C=<U,V>
- 解密:
- V ⊕ H 2 ( e ( d i d , U ) ) = M V \oplus H_2(e(d_{id},U))=M V⊕H2(e(did,U))=M
可以看出BasicPub方案与BasicIdent方案的不同之处在于,公钥 Q i d Q_{id} Qid的选取方式不同。在BasicPub方案中, Q i d Q_{id} Qid是从 G 1 ∗ G_1^* G1∗中随机选取的元素,因此没有了与 i d id id之间的联系。
非形式化的证明
首先很容易看出BasicIdent方案是概率性的加密方案,这是公钥加密方案满足CPA安全性的必要条件[3]
A 1 \mathcal{A}_1 A1是BasicIdent方案中IND-ID-CPA的攻击者; A 2 \mathcal{A}_2 A2是BasicPub方案中IND-CPA的攻击者; B \mathcal{B} B是用来解决给定BDH问题的算法。
规约过程总共分两步:第一步,定义Game1, A 1 \mathcal{A}_1 A1被用来构造 A 2 \mathcal{A}_2 A2;第二步,定义Game2, A 2 \mathcal{A}_2 A2被用来构造 B \mathcal{B} B。如果 A 1 \mathcal{A}_1 A1对于攻破BasicIdent有不可忽略的优势,那么 B \mathcal{B} B对于解决BDH问题有不可忽略的优势。然而BDH问题是计算困难问题,因此不存在这样的 B \mathcal{B} B以及 A 1 \mathcal{A}_1 A1和 A 2 \mathcal{A}_2 A2。
在Game2中, B \mathcal{B} B是受挑战者, A 2 \mathcal{A}_2 A2攻击者。 B \mathcal{B} B运行BasicPub的密钥生成算法,将 p k = < P , P p u b , Q i d , H 2 > pk=<P,P_{pub},Q_{id},H_2> pk=<P,Ppub,Qid,H2>给 A 2 \mathcal{A}_2