计算安全性 (computational security)
达不到完美安全(无信息泄露),安全性基于计算的复杂性。对于一个高效的敌手(计算的时间不很长),其攻击成功的概率很低。具体来说,有以下两种正式定义:
具体方法
如果一个加密方案,对任意至多计算时间为 t t t 的敌手,攻击成功概率不超过 ϵ \epsilon ϵ,则称这个方案是 ( t , ϵ ) − s e c u r e (t,\epsilon)-secure (t,ϵ)−secure。
很显然,这个定义并不是很直接,因为不好描述“任意敌手”。
渐进方法
首先,渐进方法定义了一个安全参数 n n n。通常来说,这个参数可以简单地理解为秘钥的长度。
如果一个方案,对于任意多项式时间的敌手,攻破成功的概率为可忽略量,则称该方案是安全的。
敌手本质是一个算法,多项式时间是指 ∃ k ∈ N \exist k \in N ∃k∈N, 这个算法的复杂度是 O ( n k ) O(n^k) O(nk)。可忽略量是小于任何多项式的倒数,也就是说,对 ∀ k ∈ N \forall k \in N ∀k∈N,攻破成功的概率为 O ( n − k ) O(n^{-k}) O(n−k)。
安全等级
单次加密 EAV-secure
EAV-secure,是指在窃听攻击的情况下安全。
针对加密方案 Π = ( Gen, Enc, Dec ) \Pi = (\text{Gen, Enc, Dec}) Π=(Gen, Enc, Dec) 和敌手 A \mathcal{A} A, 首先定义实验 PrivK A , Π eav ( n ) \text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)
- 给敌手 A \mathcal{A} A 安全参数 n n n,敌手输出两个等长的明文 m 0 m_0 m0, m 1 m_1 m1
- 通过 Gen ( 1 n ) \text{Gen}(1^n) Gen(1n) 生成秘钥 k k k,并随机选择 b ∈ { 0 , 1 } b \in \{0, 1\} b∈{ 0,1},计算密文 c ← Enc ( m b ) c \leftarrow \text{Enc}(m_b) c←Enc(mb),并将 c c c 给 A \mathcal{A} A。
- A \mathcal{A} A 输出 b ′ b' b′。定义 out A ( PrivK A , Π eav ( n , b ) ) = b ′ \text{out}_{\mathcal{A}}(\text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n,b))=b' outA(PrivKA,Πeav(n,b))=b′。
- 如果 b ′ = b b' = b b′=b,则 PrivK A , Π eav ( n ) = 1 \text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n) = 1 PrivKA,Πeav(n)=1,否则 PrivK A , Π eav ( n ) = 0 \text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n) = 0 PrivKA,Πeav(n)=0。
对任意加密方案 Π \Pi Π,EAV-secure 有如下两个定义:
对任意多项式时间敌手 A \mathcal{A} A,
Pr [ PrivK A , Π eav ( n ) = 1 ] ≤ 1 2 + negl ( n ) \Pr[\text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n) = 1] \le \frac 12 + \text{negl}(n) Pr[PrivKA,Πeav(n)=1]≤21+negl(n)
或
∣ Pr [ out A ( PrivK A , Π eav ( n , 0 ) ) = 1 ] − Pr [ out A ( PrivK A , Π eav ( n , 1 ) ) = 1 ] ∣ ≤ negl ( n ) |\Pr[\text{out}_{\mathcal{A}}(\text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n,0))=1]-\Pr[\text{out}_{\mathcal{A}}(\text{PrivK}^{\text{eav}}_{\mathcal{A},\Pi}(n,1))=1]| \le \text{negl}(n) ∣Pr[out