完美保密
一個在明文空間M上的加密方案(Gen,Enc,Dec),如果對於每個明文 m ∈ M,對每個密文c ∈ C,其中Pr[C=c]>0,有:
Pr[ M = m | C = c ] = Pr[ M = m ]
則稱這種加密方案是完美保密,換句話說,即在“已知了密文的情況下,得到明文的概率”和“在不知道密文的情況下,得到明文的概率”是相等的。
引理:一個在明文空間M上的加密方案是完美保密的,當且僅當,對於每個明文m,m‘ ∈ M,以及每個密文 c ∈ C有:
Pr[ EncK (m) = c ] = Pr[ EncK (m′) = c ]
即加密不同的明文得到相同的密文的概率是一樣的。
引理的證明:
充分性:
如果Pr[M=m] = 0,那么Pr[M=m | C=c] = 0 = Pr[M=m]
如果Pr[M=0] > 0,則:
必要性:
∵Pr[M=m | C=c] = Pr[C=c | M=m] * Pr[M=m] / Pr[C = c]
且Pr[M=m | C=c] = Pr[M=m]
∴Pr[C=c | M=m] * Pr[M=m] / Pr[C=c] = Pr[M=m]
Pr[C=c | M=m] / Pr[C=c] = 1
Pr[C=c | M=m] = Pr[C=c]
Pr[C=c and M=m] / Pr[M=m] = Pr[C=c]
∴事件“M=m”與事件“C=c”是兩個相互獨立的事件
則任意m, m‘ ∈ M,有
Pr[C=c | M=m] = Pr[C=c | M=m']
Pr[Enck(m)=c] = Pr[Enck(m')=c]
完美不可區分
關於完美不可區分性的定義是基於一個涉及對手A的實驗,並形式化了A無法區分一種明文加密和另一種明文加密;因此我們稱之為對抗性的不可分辨性。
竊聽實驗(PrivKeavA, Π):
- 敵手A輸出一對明文m0,m1 ∈ M
- 運行Gen生成一個隨機密鑰k,並選擇一個統一的bit b∈{0,1}。計算密文c←Enck(mb),並返回給A。
- A輸出一個比特b’
- 這個實驗的輸出為 1 ,當 b=b‘ 的時候;否則輸出 0 。記PrivKeavA, Π =1,如果實驗輸出 1,並且在這種情況下,稱A成功猜中了密文對應的明文。
完美不可區分的定義:一個在明文空間M上的加密方案:Π = (Gen, Enc, Dec)是完美不可區分性的,當且僅當對每個敵手A都有:
Pr[PrivKeavA, Π =1] = 1/2
引理:一個加密方案 Π 是完美保密的,當且僅當它是完美不可區分的。
引理的證明:
充分性:基於竊聽實驗可以將完美不可區分性表示為:
Pr[M=m0 | C=c] = Pr[M=m1 | C=c] = 1/2
∵ M = {m0,m1} 即,明文空間中只有m0和m1
∴Pr[M=m] = 1/2
∴Pr[M=m | C=c] = Pr[M=m]
滿足完美保密的定義,所以充分性滿足
必要性
根據完美保密引理可知:如果滿足完美保密,則有
Pr[Enck(m0)] = Pr[Enck(m1)]
Pr[C=c | M=m0] = Pr[C=c | M=m1]
Pr[M=m0 | C=c] Pr[C=c] / Pr[M=m0] = Pr[M=m1 | C=c]Pr[C=c] / Pr[M=m1]
Pr[M=m0 | C=c] / Pr[M=m0] = Pr[M=m1 | C=c] / Pr[M=m1]
∵Pr[M=m0] = Pr[M=m1]
∴Pr[M=m0 | C=c] = Pr[M=m1 | C=c]
而這又恰好是完美保密的另一種表示形式
所以必要性滿足
實例:證明維基尼爾加密不是完美不可區分的,至少對於某些確定的參數
設 Π 為兩個長度為 2 的字符串的明文空間上的維基尼爾加密方案,並且密鑰周期概率均勻地在{1,2}中選擇。
敵手 A 的實驗策略:
輸出兩條明文m0 = aa,m1 = ab
對於返回的密文c = c1c2,敵手的輸出策略為:如果c1 = c2,則輸出 0 (即認為被加密的明文是m0);否則輸出 1
敵手 A 實驗成功的概率:
Pr[PrivKeavA, Π =1] = ( Pr[A outputs 0 | M=m0] + Pr[A outputs 1 | M=m1] ) / 2
所以可以分兩種情況進行討論:
- M=m0時
如果密鑰的周期為1,那么敵手輸出 0 的概率為1
如果密鑰的周期為2,那么只有當密鑰的第一個字母和第二個字母恰好相等的情況下敵手才能輸出 0 ,即在這種情況下敵手輸出 0 的概率為1/26
∴ Pr[A outputs 0 | M=m0] = ( 1/2 + 1/2 * 1/26 ) = 27/52
- M=m1時
Pr[A outputs 1 | M=m1] = 1 - Pr[A outputs 0 | M=m1]
如果被加密的明文為m1,那么只有當密鑰的周期為2,並且密鑰的第二個字母恰好比第一個字母小 1 的時候,敵手才會輸出 0 。
∴Pr[A outputs 0 | M=m1] = 1/2 * 1/26
∴Pr[A outputs 1 | M=m1] = 1 - Pr[A outputs 0 | M=m1] = 51/52
綜上:Pr[PrivKeavA, Π =1] = ( Pr[A outputs 0 | M=m0] + Pr[A outputs 1 | M=m1] ) / 2 = 3/4 > 1/2
所以在此參數下的維基尼爾加密方案並不是完美保密的
One-Time Pad
One-Time Pad加密方案的構造:
選擇一個確定的整數 l > 0,那么加密方案的明文空間,密文空間,以及密鑰都是長度為 l 的01串
- 密鑰生成算法Gen:生成一個長度為 l 的01串
- 加密算法Enc:輸入一個長度為 l 的01串密鑰 k ,以及一個長度為 l 的01串明文 m,輸出密文 c = k ⊕ m
- 解密算法Dec:輸入一個長度為 l 的01串密鑰 k ,以及一個長度為 l 的01串密文 c ,輸出明文 m =k ⊕ c
加密方案的正確性驗證:Deck( Enck(m) ) = k ⊕k ⊕m = m,所以這是一個正確的加密方案
證明One-Time Pad加密方案是完美保密的:
首先計算:Pr[C=c | M=m],對任意的c∈C以及任意的m∈M有:
對任意的c ∈ C
由貝葉斯定理得:
∴此加密方案是完美保密的
完美保密的局限性
- 完美保密的加密方案的密鑰長度至少要和明文的長度一樣大
定理:如果一個在明文空間 M 且密鑰空間K的加密方案Π(Gen, Enc, Dec)是完美保密的,則|K| ≥ |M|
證明:反證法,假設 |K| < |M|
設集合M(c) = {m | m = Deck(c),for some k ∈ K}
∵|K| < |M|
∴存在一些m‘ ∈ M,m’ ∉ M(c)
則Pr[M=m' | C=c] = 0 ≠ Pr[M=m]
所以根據完美保密的定義可知,在此種加密方案並不是完美保密
- 密鑰只能被使用一次
假設有兩個明文使用了相同的密鑰進行加密
如果一個敵手通識獲取了c = m ⊕ k 以及c′ = m′ ⊕ k ,那么可以計算:c ⊕ c′ = (m ⊕ k) ⊕ (m′ ⊕ k) = m ⊕ m′
敵手因而可以獲取兩個明文m和m‘的異或取值,而完美保密要求敵手無法通過密文獲取任何關於明文的信息
香農定理(用於判斷是否是完美保密)
假設對明文空間M上的加密方案Π(Gen, Enc, Dec)有|M| = |K| = |C|,則這種加密方案是完美保密當且僅當:
- 對任意密鑰k ∈ K,k 被選中的概率都相等,都等於 1/|K|
- 對於任意的明文m ∈ M,以及任意的密文c ∈ C,則存在一個唯一的密鑰 k ∈ K使得Enck(m) = c