Perfectly Secret Encryption
本章大部分证明已略去,需要的读者请自行翻阅原书,或者可在评论区进行讨论。
随机数生成
现代随机数生成算法共以下两步:
- 得到一个高熵的数据池
- 处理高熵数据用以生成比特流
高熵数据池的构成需要不可预知的数据来源,如外部输入和物理现象,前者可以是网络事件的延迟、后者可以是热放射周期。
处理高熵数据以生成随机比特流的正式方式在以后讨论,此处仅简单介绍一种方法:假设数据池中有一不随机比特序列,其中 1 的出现概率为 p,0 出现的概率为 1 - p;此时我们选择当序列中出现 “01” 时输出 0、出现 “10” 时输出 1 (其余情况不输出),便可保证输出的比特序列是均匀的。
注意,密码学中随机数生成器是有明确要求的,必须使用“为密码使用设计”的随机数生成器而不是通用随机数生成器,比如C语言中 stdlib.h 里的函数 rand( ) 并不满足密码学使用。
2.1 定义
- M \mathcal{M} M:明文空间
- K \mathcal{K} K:密钥空间。Gen 可能生成的所有密钥集合
- C \mathcal{C} C:密文空间。Enc 可能生成的所有密文集合
- Gen:密钥生成算法。根据某些分布生成密钥 k 的概率性算法
- Enc:加密算法。输入 k ∈ K k \in \mathcal{K} k∈K和 m ∈ M m \in \mathcal{M} m∈M生成密文 c 的概率性算法,写作 c ← E n c k ( m ) c \leftarrow Enc_k(m) c←Enck(m) (当为确定性算法时写作 c : = E n c k ( m ) c:= Enc_k(m) c:=Enck(m))
- Dec:解密算法。输入 k ∈ K k \in \mathcal{K} k∈K和 c ∈ C c \in \mathcal{C} c∈C生成明文 m ∈ M m \in \mathcal{M} m∈M 的算法。满足 perfect correctness 的 Dec 可称为确定性解密算法,同时可记作 m ← E n c k ( c ) m \leftarrow Enc_k(c) m←Enck(c)
- perfect correctness:对于所有 k ∈ K k \in \mathcal{K} k∈K和 m ∈ M m \in \mathcal{M} m∈M 以及任何 Enc 生成的 c,可保证 D e c k ( c ) = m Dec_k(c) = m Deck(c)=m的概率为 1.
- K K K: 表示 Gen 生成密钥取值的随机变量
- M M M:表示被加密明文的随机变量,需要独立于 K K K
- C C C:表示 Enc 输出密文的随机变量
- P r [ K = k ] \mathrm{Pr}[K = k] Pr[K=k]:Gen 生成的密钥为 k 的概率
- P r [ M = m ] \mathrm{Pr}[M = m] Pr[M=m]:明文取值于 m ∈ M m \in \mathcal{M} m∈M 的概率
- P r [ C = c ] \mathrm{Pr}[C=c] Pr[C=c]:密文等于固定值 c 的概率
(1) Perfect Secrecy
假定敌手知道
M
M
M 的概率分布,即敌手知道不同信息被发送的概率,同时敌手知道使用的加密方案,唯一不知道的是通信双方共享的密钥。敌手可窃听到通信双方的交流内容,即该攻击方式为仅密文攻击。
对于可实现完全保密(perfect secret)的密码方案,攻击者窃听到的密文需要对其识别明文没有任何帮助,即以被观察到的密文为条件,明文
m
∈
M
m \in \mathcal{M}
m∈M被发送的后验概率应该和 m 被发送的先验概率没有区别,即密文不会揭露明文的任何信息。
定义一(不可溯源) ----> DEFINITION 2.3
对于明文空间
M
\mathcal{M}
M 的密码方案 (Gen, Enc, Dec),当对于
M
M
M 中所有的概率分布,每个明文
m
∈
M
m \in \mathcal{M}
m∈M 和每个满足
P
r
[
C
=
c
]
>
0
\mathrm{Pr}[C=c] > 0
Pr[C=c]>0的密文
c
∈
C
c \in \mathcal{C}
c∈C,有:
P
r
[
M
=
m
∣
C
=
c
]
=
P
r
[
M
=
m
]
\mathrm{Pr}[M = m | C = c] = \mathrm{Pr}[M = m]
Pr[M=m∣C=c]=Pr[M=m]
则可以说该密码方案是完全保密的,其中
c
∈
C
c \in \mathcal{C}
c∈C是为了保证条件概率基于零概率时间。
定义二(不可区分)
此定义基于密文分布不依赖于明文,即对于任意两个明文
m
,
m
′
∈
M
m, m' \in \mathcal{M}
m,m′∈M, m 被加密时的密文分布要和 m’ 被加密的密文分布相同,公式表示如下:
P
r
[
E
n
c
K
(
m
)
=
c
]
=
P
r
[
E
n
c
K
(
m
′
)
=
c
]
\mathrm{Pr}[Enc_K(m) = c] = \mathrm{Pr}[Enc_K(m') = c]
Pr[EncK(m)=c]=Pr[EncK(m′)=c]
其中概率是基于
K
K
K 的选择和 Enc 的随机性,同时以上概率都只基于加密方案,并不依赖于
M
\mathcal{M}
M的底层分布。以上情景表示密文中不包含明文相关的任意信息,即攻击者无法区分 m 和 m’ 的加密形式。
定理一 ----> LEMMA 2.5
带有明文空间 M \mathcal{M} M 的加密方案 (Gen, Enc, Dec) 是完全保密的,当且仅当 M \mathcal{M} M 中的每个 m, m’ 和 C \mathcal{C} C 中的每个 c 都满足定义二中的公式。
(2) 完美不可区分性
该部分为完全保密的另一等效概念。下面介绍敌对不可区分实验 P r i v K A , Π e v a \mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}} PrivKA,Πeva,其中 A \mathcal{A} A 表示敌对方, Π \Pi Π = (Gen, Enc, Dec) 表示明文空间为 M \mathcal{M} M 的密码方案:
- 敌手 A \mathcal{A} A 生成明文对 m 0 , m 1 ∈ M m_0,m_1 \in \mathcal{M} m0,m1∈M
- 使用Gen 生成密钥 k, 同时选定比特位 b ∈ { 0 , 1 } b \in \{0, 1\} b∈{0,1}。计算 c ← E n c k ( m b ) c \leftarrow Enc_k(m_b) c←Enck(mb) 并将其发送至 A \mathcal{A} A,其中 c 为挑战密文
- A \mathcal{A} A 生成比特 b’
- 实验的输出被定义为:1,当 b’ = b; 反之为 0.当实验输出为1 时我们称 P r i v K A , Π e v a = 1 \mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}} = 1 PrivKA,Πeva=1 并称 A \mathcal{A} A 成功
定义一(不可溯源) ----> DEFINITION 2.6
我们称明文空间
M
\mathcal{M}
M 的密码方案
Π
\Pi
Π = (Gen, Enc, Dec) 为完美不可区分的当且仅当对于每一个敌手
A
\mathcal{A}
A 都有
P
r
[
P
r
i
v
K
A
,
Π
e
v
a
=
1
]
=
1
2
\mathrm{Pr}[\mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}} = 1] = \frac{1}{2}
Pr[PrivKA,Πeva=1]=21
定理一 ----> LEMMA 2.7
加密方案 Π \Pi Π 是完全保密的当且仅当其是完美不可区分的。
2.2 一次一密
我们定义 a ⊕ b a \oplus b a⊕b 表示两等长二进制串 a 和 b 的逐比特异或。在一次一密方案中,密钥是和明文等长的独立字串,密文只需明文和密钥逐比特异或便可得到。正式定义如下:
给定整数 l > 0 \mathscr{l} > 0 l>0,明文空间 M \mathcal{M} M,密钥空间 K \mathcal{K} K 和密文空间 C \mathcal{C} C 都等价于 { 0 , 1 } l \{0, 1\}^l {0,1}l (长度 l l l 的二进制串)
- Gen: 密钥生成算法根据均匀分布从密钥空间 K = { 0 , 1 } l \mathcal{K} = \{0, 1\}^l K={0,1}l选择一密钥
- Enc: 给定密钥 k ∈ { 0 , 1 } l k \in \{0, 1\}^l k∈{0,1}l 和明文 m ∈ { 0 , 1 } l m \in \{0, 1\}^l m∈{0,1}l ,加密算法的输出为密文 c : = k ⊕ m c := k \oplus m c:=k⊕m
- Dec: 给定密钥 k ∈ { 0 , 1 } l k \in \{0, 1\}^l k∈{0,1}l 和密文 c ∈ { 0 , 1 } l c \in \{0, 1\}^l c∈{0,1}l ,解密算法的输出为明文 m : = k ⊕ c m := k \oplus c m:=k⊕c
从正确性来看,对于每个密钥 k 和每段明文 m 都有 D e c k ( E n c k ( m ) ) = k ⊕ k ⊕ m = m Dec_k(Enc_k(m)) = k \oplus k \oplus m = m Deck(Enck(m))=k⊕k⊕m=m,即一次一密是有效的密码方案。
缺点
- 密钥长度需要和明文一致
- 密钥只能使用一次
2.3 完全保密的限制
总的来说,完全保密要求密码方案的密钥空间至少和明文空间一样大。(另一限制是密钥只能使用一次)
2.4 香农的定理
该定理首先密码方案 (Gen, Enc, Dec) 要求 ∣ M ∣ = ∣ K ∣ = ∣ C ∣ |\mathcal{M}| = |\mathcal{K}| = |\mathcal{C}| ∣M∣=∣K∣=∣C∣,即三个空间大小一致,在此基础上当且仅当满足以下两点才可称该方案是完全保密的:
- 每个密钥 k ∈ K k \in \mathcal{K} k∈K 都是以 1 / ∣ K ∣ 1 / |\mathcal{K}| 1/∣K∣ 的概率被 Gen 选中的
- 对于每个明文 m ∈ M m \in \mathcal{M} m∈M 和每个密文 c ∈ C c \in \mathcal{C} c∈C,存在唯一的密钥 k ∈ K k \in \mathcal{K} k∈K 使得 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m) 的结果为 c