2.1.1 加密方案的定义和说明
在古典密码学中我们介绍了一些加密方案,例如凯撒密码等。在正式进入现代密码学之前,我们首先给出加密方案的定义。
Definition:EncryptionScheme\color{blue}{Definition:EncryptionScheme}Definition:EncryptionScheme
An Encryption Scheme is defined by three algorithms:Gen, Enc, and Dec, as well as a specification of a message space M\mathcal{M}M.
我们在这里给出的关于加密方案的定义,已经非常接近第三章中关于私钥加密方案的定义了。加密方案由三个算法组成,同时定义了明文空间。
Gen:即Key Generation,生成密钥k\mathcal{k}k的算法。在绝大多数情况下,我们只是在所有的密钥当中均匀的选出一个。
Enc:即Encryption,进行加密的算法。Enc可以是确定性的算法,也可以是概率算法。例如,在construction3.17当中,我们定义的加密算法就是确定性的算法,给定明文m\mathcal{m}m和密钥k\mathcal{k}k,我们总是能得到相同的密文c\mathcal{c}c。而在construction3.28当中,我们定义的加密算法就是概率性的算法,即使是输入相同的明文m\mathcal{m}m和密钥k\mathcal{k}k,也有可能得到不同的结果c\mathcal{c}c。
这里我们强调Enc是一个概率算法。事实上,在后面的学习中我们会看到,确定性的加密算法只能达到eva-secure,要想达到cpa-secure乃至cca-secure级别的安全,必须使用概率性的加密算法。
- Input: m\mathcal{m}m ∈\in∈ M\mathcal{M}M, k\mathcal{k}k ∈\in∈ K\mathcal{K}K
- output: c\mathcal{c}c ⟵\longleftarrow⟵ Enck(m)Enc_{k}(m)Enck(m)
Dec:即Decryption,进行解密的算法。这里注意两点,首先加密和解密所使用的密钥k\mathcal{k}k是相同的;其次解密算法是确定性的算法,也就是说输入相同的密文c\mathcal{c}c和密钥k\mathcal{k}k,运算得到的结果一定是相同的。加密算法不需要是确定性的算法。但是解密算法必须是确定性的,否则解密的结果将无法使用!
- Input: c\mathcal{c}c ∈\in∈ C\mathcal{C}C, k\mathcal{k}k ∈\in∈ K\mathcal{K}K
- output: m\mathcal{m}m := Enck(m)Enc_{k}(m)Enck(m)
2.1.2 概率相关的问题
上一部分内容我们提到了加密方案所包括的三个算法,即Gen, Enc, and Dec。定义还强调了明文空间M\mathcal{M}M。实际上,应当还包括密文空间C\mathcal{C}C和密钥空间K\mathcal{K}K。三种算法和三个空间是相对应的关系。
密钥空间K\mathcal{K}K是由所有密钥k\mathcal{k}k组成的集合。在运行Gen算法的时候,我们通常随机均匀地从K\mathcal{K}K挑选密钥k\mathcal{k}k。随机代表Gen是概率性的算法,每次所挑选的密钥都应当不同(如果连续运行两次Gen,当然有可能得到相同的密钥k\mathcal{k}k,但从概率的角度来说太不可能了!),而均匀代表密钥的选取一般是等概率的,也就是说,∀\forall∀ k0\mathcal{k_{0}}k0, k1\mathcal{k_{1}}k1 ∈\in∈ K\mathcal{K}K, Pr[K\mathcal{K}K = k0\mathcal{k_{0}}k0] = Pr[K\mathcal{K}K = k1\mathcal{k_{1}}k1]。
明文空间M\mathcal{M}M是由所有明文m\mathcal{m}m组成的集合。但是,不同明文在明文空间当中的分布概率是不相等的。例如,一般而言,你与数学老师讨论数学问题的概率将大于,你和英语老师讨论数学问题的概率。明文的概率分布并不与密码学机制或者密码学原理有关系,而仅仅与现实生活中通信需要有关。
密文空间C\mathcal{C}C是由所有密文c\mathcal{c}c组成的集合。它是密钥空间K\mathcal{K}K和明文空间M\mathcal{M}M相互作用的结果。
下面是课本当中的例题2.1。
Example2.1\color{green}{Example2.1}Example2.1
对于移位密码,我们假定密钥空间K\mathcal{K}K = {0, 1, …, 25},且对于每一个k\mathcal{k}k ∈\in∈ K\mathcal{K}K,
Pr[K\mathcal{K}K = k\mathcal{k}k] = 1/26。
同时我们定义明文空间M\mathcal{M}M = {a, z},Pr[M\mathcal{M}M = a\mathcal{a}a] = 0.7,Pr[M\mathcal{M}M = z\mathcal{z}z] = 0.3。
第一问:密文为B的概率是多少?即Pr[B\mathcal{B}B = B] =?
第二问:已知密文为B,求明文为a的概率?
抛开例题本身不谈,题干就非常值得钻研。密钥的选取总是均匀而随机的,如果偏好使用某些密钥,那么其隐私性就大幅度削弱了。此外,明文的选取往往是和现实通信需求相关,基本上无法做到均匀。这里的明文空间只是一个包含两个字符的案例,但确实是现实的某种缩影。
对于第一问,求密文B\mathcal{B}B = B的概率,要得到密文C,可以是明文M\mathcal{M}M = a再加上密钥K\mathcal{K}K = 1的组合,也可以是明文M\mathcal{M}M = z再加上密钥K\mathcal{K}K = 2,明文和密钥的选取是独立事件,让概率直接相乘即可。
对于第二问,是一个贝叶斯概率计算题,在已经知道密文的基础上倒推出明文的概率分布。
2.1.3 完美安全:概率上的两种定义
到现在为止已经介绍了加密方案,和有关三种空间的概率含义。接下来我们讨论完美安全(Perfect Secrecy)。时刻牢记,完美加密并不是完美的,它只能抵抗唯密文攻击(eva)而不能抵抗选择明文攻击(cpa)或者选择密文攻击(cca),同时它非常的不实用。
我们假设敌手(Adversary)的能力是窃听(evaesdrop),也就是唯密文攻击。敌手可以趴在通信双方的信道上,完整的获取密文c\mathcal{c}c。敌手也知道加密算法Enc和解密算法Dec。当然,敌手不知道密钥k\mathcal{k}k和明文m\mathcal{m}m。不过,敌手想知道m\mathcal{m}m的信息。不一定是全部内容,任何信息都可以。
完美加密的第一种定义就是,密文c\mathcal{c}c没有揭露任何有关明文m\mathcal{m}m的信息。敌手不能从密文c\mathcal{c}c当中学到关于明文m\mathcal{m}m的任何内容。在没有拿到密文c\mathcal{c}c之前,敌手可能对明文m\mathcal{m}m的分布有一定的估计。而拿到密文c\mathcal{c}c之后,敌手没有获得任何额外信息!密文没有揭露明文的任何信息,知道密文与否不改变任何事情\color{red}{密文没有揭露明文的任何信息,知道密文与否不改变任何事情}密文没有揭露明文的任何信息,知道密文与否不改变任何事情
Definition2.3:PerfectlySecret(1)\color{blue}{Definition2.3:Perfectly Secret(1)}Definition2.3:PerfectlySecret(1)
An encryption scheme (Gen; Enc; Dec) with message space M\mathcal{M}M is perfectly secret if for every probability distribution for M\mathcal{M}M, every message m\mathcal{m}m ∈\in∈ M\mathcal{M}M, and every ciphertext c\mathcal{c}c ∈\in∈ C\mathcal{C}C for which Pr[C\mathcal{C}C = c] > 0.
Pr[M\mathcal{M}M = m | C\mathcal{C}C = c] = Pr[M\mathcal{M}M = m]
(The requirement that Pr[C\mathcal{C}C = c] > 0 is a technical one needed to prevent
conditioning on a zero-probability event.)
接下来介绍完美加密的第二种定义。直观上的理解是,明文空间M\mathcal{M}M的分布是与现实世界密切相关的、不均匀的。但是对于不同的明文,加密之后得到同一个密文的概率是相等的(例如明文a和明文b出现的概率是不相同的,但是它们加密得到密文X的概率相同,得到密文Y的概率也是相同的)
不同明文,纵使它们在明文空间当中的分布不均匀,加密之后得到同一种密文的概率相等\color{red}{不同明文,纵使它们在明文空间当中的分布不均匀,加密之后得到同一种密文的概率相等}不同明文,纵使它们在明文空间当中的分布不均匀,加密之后得到同一种密文的概率相等
Definition:PerfectlySecret(2)\color{blue}{Definition:Perfectly Secret(2)}Definition:PerfectlySecret(2)
Pr[EncK(m)Enc_{K}(m)EncK(m)= c\mathcal{c}c] = Pr[EncK(m′)Enc_{K}(m^{'})EncK(m′) = c\mathcal{c}c], ∀\forall∀ m\mathcal{m}m, m′m^{'}m′ ∈\in∈ M\mathcal{M}M, ∀\forall∀ c\mathcal{c}c ∈\in∈ C\mathcal{C}C
这两种定义是完全等价的。
2.1.4 完美安全:敌手不可区分性
最后我们从敌手实验的角度来给出完美安全的第三种定义。这将是我们第一次接触敌手的概念。敌手的能力通常以实验来概括,而安全的定义则通过敌手在实验中胜出的可能性来定义。
The adversarial indistinguishability experiment PrivKA,PievaPrivK_{A,Pi}^{eva}PrivKA,Pieva
- The adversary A outputs a pair of messages m0m_{0}m0; m1m_{1}m1.
- A key kkk is generated using Gen, and a uniform bit bbb ∈\in∈ {0, 1} is chosen. Ciphertext c Enck(mb) is computed and given to A. We refer to
c as the challenge ciphertext.
敌手实验描述了这样一个场景:敌手发送给挑战者两篇明文m0m_{0}m0和m1m_{1}m1,挑战者等概率挑选其中的一篇明文进行加密(也就是选择b的过程,50%的概率b=0,挑选第一篇明文加密;50%的概率b=1,挑选第二篇明文加密),然后挑战者将密文发回给敌手,敌手猜测这到底是m0m_{0}m0加密而来还是m1m_{1}m1加密而来。
那么假如敌手什么都不知道,敌手也不想赢这个实验,敌手只想摆烂。那么敌手根本不看挑战者发送回来的挑战密文,要做的就是看自己的心情去随便去猜测。敌手等概率回答“密文是m0m_{0}m0加密而来”或“密文是m1m_{1}m1加密而来”。在这种情况下,敌手猜对的概率是50%。
而完美加密实验(又叫做完美不可区分实验)中,敌手是想赢的,敌手会仔细分析挑战者发送回来的挑战密文,试图寻找踪迹,到底是那篇明文加密的结果。注意,敌手是知道两篇明文m0m_{0}m0、m1m_{1}m1的内容的,因为就是敌手发给挑战者的。
然而我们说,即使是这样,敌手获胜的概率也仍然是50%。敌手摆烂与否并不重要,敌手是否认真分析挑战密文根本不重要,因为完美加密下,挑战密文不会泄露关于明文的任何信息,敌手无从判断挑战密文更像m0m_{0}m0抑或是m1m_{1}m1。