PChapter 3:rivate-Key Encryption
# 3.Private-Key Encryption
在前一章中,我们看到了完全保密的一些基本限制。在本章中,我们通过引入较弱(但充分)的计算保密概念来开始我们对现代密码学的研究。然后,我们将展示如何使用这个定义来绕过之前显示的不可能的结果,以实现完全保密,特别是如何使用一个短密钥(比如128位长)来加密许多长消息(比如总共千兆字节)。
在此过程中,我们将研究伪随机性的基本概念,它捕捉到了一些东西可以“看起来”完全随机的概念,即使它不是。这个强大的概念是许多现代密码学的基础,并具有超出该领域的应用和含义。
# 3.1 计算安全
第二章中我们介绍了完美保密的概念。虽然完美保密是值得追求的目标,但它也是不必要的强要求。完美保密要求加密消息绝对不泄露任何信息,即使是对于具有无限计算能力的窃听者。然而,在实际情况下,如果加密方案向拥有有限计算能力的窃听者泄露一些微小概率的信息,仍然可以被认为是安全的。例如,一个方案向投入最快的超级计算机(或计算机集群)200年计算能力的窃听者泄露概率不超过
我们强调,尽管我们放弃了获得完美机密性的想法,但这并不意味着我们放弃了到目前为止一直采用的严格数学方法。定义和证明仍然是必不可少的;唯一的区别在于,我们现在考虑了一个更弱但仍然有意义的安全概念。正如前面讨论的那样,计算安全定义相对于信息理论安全概念包含了两个放松条件:
- 安全性仅对有效的、运行一些可行时间的攻击者有保障。这意味着在足够的时间(或足够的计算资源)内,攻击者可能能够违反安全性。然而,如果我们可以使破解方案所需的资源大于任何实际攻击者可用的资源,那么在所有实际用途上,方案都是不可破解的。
- 攻击者有可能以极小的概率成功(即安全性可能会失败)。如果我们可以使这个概率足够小,那么我们就不必担心它了。
(正如我们将看到的,这两个放宽条件都是必要的,以克服上一章所展示的完美机密性的限制。)为了得到一个有意义的理论,我们需要精确地定义上述放松条件的含义。==有两种一般的方法可以做到这一点:具体方法和渐近方法==。下面将对它们进行描述。
# 3.1.1 具体方法
计算安全的具体方法通过明确限定某个特定时间或者计算资源下,(随机化)攻击者的最大成功概率,来量化加密方案的安全性。因此,具体的安全性定义采用如下形式:
(当然,上述内容只是一个一般的模板,为了使其有意义,我们需要明确“破解”该方案的确切含义。)例如,我们可能有一个方案,保证在最多使用最快的超级计算机200年的时间内,没有攻击者能够以高于
更加深入地了解现代密码系统中典型的大量时间和小概率的值,对于理解具体方法的应用也非常重要。
例3.1
现代私钥加密方案通常被认为在以下意义上提供几乎最优的安全性:当密钥长度为n时,密钥空间的大小为
为了简单起见,假设c=1,那么长度为n=64的密钥对于使用标准台式计算机的攻击者提供了足够的安全性。事实上,在一个每秒执行
然而,没有理由假设攻击者仅限于使用台式计算机,强大的攻击者能够进行数倍于此的计算速度。今天,最小推荐的密钥长度是n=128。
如果攻击者在一年内成功恢复加密消息的概率最多为
具体方法在实践中非常重要,因为具体的保证才是加密方案的用户最终关心的。然而,精确的具体保证很难提供。此外,在解释具体安全性声明时必须小心。例如,一个声称在5年内没有攻击者能够以高于ε的概率破解某个给定方案的声明引出了一些问题:这是基于什么样的计算能力(例如台式电脑,超级计算机,数百台计算机的网络)得出的结论?这是否考虑了预期的未来计算能力的提高(根据摩尔定律,每18个月大约增加一倍)?这个估计是否假定使用“现成的”算法,或者专门为攻击优化的专用硬件?此外,这样的保证对于运行2年的攻击者的成功概率(除了它不能超过ε之外)说得很少,对于运行10年的攻击者的成功概率则根本没有提到。
# 3.1.2 渐进方法
如上所述,使用具体安全性方法存在一些技术和理论上的困难。在实践中必须处理这些问题,但在抽象地描述方案时(就像本书所做的那样),使用渐近方法更为方便。这种方法根植于复杂性理论,引入一个整数值的安全参数(表示为n),该参数对加密方案以及所有涉及的各方(即诚实的各方和攻击者)进行参数化。当诚实方使用方案(例如生成密钥)时,他们选择一些安全参数的值;为了本讨论的目的,可以将安全参数视为与密钥长度相对应。我们还将攻击者的运行时间以及其成功概率视为安全参数的函数,而不是固定的具体值。然后:
我们将“有效攻击者”与在n次多项式时间内运行的随机(即概率性)算法等同起来。这意味着存在某个多项式p,使得当安全参数为n时,攻击者的运行时间不超过p(n)。我们还要求——为了实现现实世界的效率——诚实方在多项式时间内运行,尽管我们强调攻击者可能比诚实方更强大(并且运行时间更长)。
我们将“成功概率很小”的概念等同于成功概率小于任何n的倒数的多项式。这样的概率被称为可忽略的。(见定义3.4)
让ppt表示“概率多项式时间”。因此,渐近安全性的定义具有以下一般形式:如果任何ppt攻击者在最多可忽略的概率内破解方案,则该方案是安全的。
这种安全性概念是渐近的,因为它取决于方案在足够大的n值下的行为。以下示例说明了这一点。
Example 3.2
我们假设有一个渐近安全的加密方案,并且假设攻击者可以在
我们知道,渐近安全性是一个关于安全参数
在这个例子中,攻击者的运行时间是
例如,当
正如前面的例子所示,我们可以将安全参数视为一种机制,使诚实方能够将方案的安全性“调整”到所需的水平。(增加安全参数也会增加运行方案所需的时间以及密钥长度,因此诚实方将希望尽可能地将安全参数设置得小,同时又能够抵御他们所关心的攻击类型。)将安全参数视为密钥长度,这对应于穷举搜索攻击所需的时间随着密钥长度的增加而呈指数增长的事实。通过增加安全参数来“增加安全性”的能力具有重要的实际影响,因为它使得诚实方能够抵御计算能力的增加。下面的例子给出了这种影响在实践中可能会如何发挥的一些感性认识。
Example 3.3
让我们看看更快的计算机可用性可能对实际安全性产生的影响。假设我们有一个密码方案,其中诚实方运行
假设所有方使用2 GHz的计算机,诚实方设置
假设出现了8 GHz的计算机,且所有方都进行了升级。诚实方可以将
即使使用渐近方法,也要记住在最终部署密码系统时需要提供具体的安全保证。(毕竟,必须选择某个
渐近方法详细介绍
我们现在更正式地讨论“多项式时间算法”和“可忽略成功概率”的概念。
- 多项式时间算法
一个将自然数映射到非负实数的函数
一个算法
- 可忽略成功概率
一个将自然数映射到非负实数的函数
如果一个对手
可忽略成功概率的概念之所以重要,是因为它使我们能够量化地描述对手的成功概率,并定义安全性。我们可以说,如果没有运行时间在多项式内且成功概率不可忽略的对手能够破解密码方案,则密码方案是安全的。或者,我们可以说,如果任何多项式时间对手的成功概率是可忽略的,则该方案是安全的。
定义 3.4 一个将自然数映射到非负实数的函数
上述定义也可以等价地表述为:对于每个多项式
Example 3.5
函数
- 解方程
,得到 。满足这个不等式的最小整数值 是 。 - 解方程
,得到 。满足这个不等式的最小整数值 是 。 - 解方程
,得到 。满足这个不等式的最小整数值 是 。
通过上面的计算,你可能会认为
PROPOSITION 3.6
设
- 函数
是可忽略函数。 - 对于任何多项式
,函数 是可忽略函数。
上述命题的第二部分意味着,如果某个事件在某个实验中只以可忽略概率发生,那么即使该实验被多项式地重复多次,该事件发生的概率仍然是可忽略的。(这依赖于并集界,参见命题 A.7。)
例如,投掷
上述命题的第二部分的一个推论是,如果一个函数
对渐进安全的总结
对渐进安全的总结。任何安全定义由两部分组成:对该方案的“攻破”的定义,和对敌手能力的详细说明。敌手的能力和很多问题(比如,在加密情况下,假设是唯密文攻击,还是选择明文攻击)相关。但是,考虑到敌手的计算能力,从现在开始,将敌手建模成有效的和概率多项式时间的(意味着只有“可行的”攻击策略被考虑)。定义往往被公式化,以至于以可忽略的概率发生攻破不被认为是重要的。因此,任何安全定义的一般框架如下:
如果每个概率多项式时间的敌手A执行某个特定类型的攻击,在这次攻击(成功也被很好地定义过)中,A成功的概率是可忽略的,那么这个方案是安全的。
这样的定义是渐进的,因为对于小的n值,敌手成功的概率很高是有可能的。为了说明更多细节,在上面的陈述中,将使用到上面陈述的对“可忽略”的完全定义:
如果每个概率多项式时间的敌 手A执行某个特 定类型的攻击,对于每个多项式
注意, 对n ≤ N时,没有保证。
# 3.2 定义计算安全的加密
鉴于前一节的背景,我们准备提出一个针对私钥加密的计算安全性定义。首先,我们重新定义私钥加密的语法;这将与第二章介绍的语法基本相同,只是我们现在明确考虑安全参数n。我们还进行了其他两个更改:我们允许解密算法输出错误(例如,如果它接收到无效的密文),并将消息空间设为所有(有限长度)二进制字符串的集合{0,1}∗
定义3.7: 私钥加密方案由三个概率多项式时间算法
- 密钥生成算法
以 (即以一进制写成的安全参数)作为输入,并输出密钥 ;我们将其写为 (强调 是一个随机化算法)。我们可以假设没有失去一般性, 输出的任何密钥 都满足 。 - 加密算法
以密钥 和明文消息 作为输入,并输出密文 。由于 可能是随机化的,因此我们将其写为 。 - 解密算法
以密钥 和密文 作为输入,并输出消息 或错误。我们用符号 表示通用错误。
对于每个
如果
几乎总是,
上述定义考虑了无状态方案,其中每次
# 3.2.1 安全的基本定义(EAV安全)
我们首先介绍私钥加密的最基本的计算安全概念:对单个密文攻击的安全性,其中攻击者仅观察单个密文,或等价地,当给定密钥用于加密单个消息时的安全性。我们稍后将考虑更强的安全定义。
EAV安全是指私钥加密方案在单个密文攻击下的计算安全性。在这种攻击场景中,攻击者只能观察单个密文,而不能对多个密文进行比较或选择。EAV安全是私钥加密方案最基本的安全定义之一,它确保攻击者无法从密文中获取任何关于明文的部分信息。
为了定义EAV安全,我们需要考虑两个方面:威胁模型和安全目标。
在威胁模型方面,我们假设存在一个窃听攻击者,它能够观察单个密文,并在多项式时间内运行。这个威胁模型是非常基本的,但它足以涵盖大多数实际情况下的攻击。
在安全目标方面,我们希望私钥加密方案能够保护明文的机密性,即攻击者无法从密文中获取任何关于明文的部分信息。由于攻击者只能观察单个密文,因此我们无法通过比较多个密文来定义安全性。相反,我们需要定义一个等价的安全目标,即不可区分性。
不可区分性是指对于所有多项式时间的攻击者和所有消息,私钥加密方案在给定加密密钥下,攻击者无法在多项式时间内以比随机猜测更好的概率区分加密是由哪个明文生成的。这个安全目标是EAV安全的最基本形式,它确保攻击者无法从单个密文中获取明文的任何信息。
需要注意的是,虽然EAV安全是私钥加密方案的最基本安全定义之一,但它并不足以涵盖所有实际应用场景。在实际应用中,攻击者可能具有更多的能力,例如能够选择明文或观察多个密文。在这些更强的攻击场景下,我们需要使用更强的安全定义来确保私钥加密方案的安全性。
定义的动机。如我们已经讨论过的那样,任何安全定义都由两个不同的组成部分组成:威胁模型(即对攻击者的权力假设)和安全目标(通常通过描述构成方案“破解”的方式来指定)。我们开始我们的定义性处理,考虑最简单的威胁模型,即存在一个窃听攻击者,它观察单个消息的加密。这恰好是我们在上一章中考虑的威胁模型。唯一的区别在于,正如前一节所解释的,我们现在只对受限于多项式时间运行的计算受限攻击者感兴趣。
虽然我们已经对攻击者的能力作了两个假设(即它窃听一个密文,并且它在多项式时间内运行),但我们对攻击者在试图解密它观察到的密文时的策略没有任何假设。这对于获得有意义的安全概念至关重要:定义确保保护免受任何计算受限的窃听者的攻击,无论它使用的算法如何。
正确地定义加密的安全目标并不是轻松的事情,但我们已经在第1.4.1节和上一章中详细讨论了这个问题。因此,我们只是回顾一下定义的背后思想是,攻击者应该无法从密文中获取任何关于明文的部分信息。语义安全的定义(参见第3.2.2节)正是将这个概念明确化的,并且是首个提出计算安全加密定义的定义。语义安全是复杂且难以处理的。幸运的是,有一个等价的定义称为不可区分性,它要简单得多。
不可区分性的定义是基于完美保密的另一种定义,即定义2.6给出的定义。(这进一步证明了不可区分性定义是一个好定义。)回想一下,定义2.6考虑了一个实验
在这里,我们几乎保持
- 现在只考虑在多项式时间内运行的攻击者,而定义2.6考虑了甚至具有无限运行时间的攻击者。
- 我们现在承认攻击者可能以比
微不足道地更好的概率确定加密的消息。
正如在前一节中广泛讨论的那样,上述放宽构成了计算安全的核心要素。
另一个显著的不同之处是,我们现在通过安全参数n来参数化实验。攻击者A的运行时间和成功概率都被视为n的函数。对于安全参数
第二个差异是,我们现在明确要求攻击者输出长度相等的两个消息
窃听者存在情况下的不可区分性。 我们现在给出正式的定义,从上面概述的实验开始。该实验定义了一个私钥加密方案
攻击者不可区分性实验
- 攻击者
获得输入 ,并输出一对消息 , ,其中 。 - 通过运行
生成密钥 ,并选择一个均匀的比特 。计算密文 ,并将其提供给 。我们将 称为挑战密文。 输出比特 。 - 实验的输出被定义为:如果
,则为1,否则为 0。如果 ,则称 成功。
攻击者只能窃听的事实是暗含在攻击者仅获得(单个)密文并且没有任何与发送方或接收方的进一步交互中。 (正如我们将在后面看到的那样,允许额外的交互会使攻击者显著更强。)
不可区分性的定义指出,如果没有 PPT 攻击者
定义 3.8
私钥加密方案
上述概率是在攻击者
显然,定义 3.8 比定义 2.6 更弱,后者等价于完美保密性。因此,任何完美保密的加密方案也具有 EAV 安全性。我们的目标是展示存在满足定义 3.8 的加密方案,可以规避完美保密性的限制,尤其是密钥长度小于消息长度的限制。(注意,如果方案可以处理任意长度的消息,则必须这样做。)也就是说,我们将展示满足定义 3.8 但无法满足定义 2.6 的方案。
等价表述:定义 3.8 要求没有 PPT 攻击者能够确定哪个消息是使用更好的概率加密的两个消息之一。同等表述是,每个 PPT 攻击者在观察到
定义 3.9
私钥加密方案
事实上,定义 3.9 等价于定义 3.8,这里不再赘述。
关于披露明文长度
安全加密的默认概念并不要求加密方案隐藏明文长度,事实上,所有常用的加密方案都会揭示明文长度(或其近似值)。
这主要原因是,要支持任意长度的消息,同时隐藏有关明文长度的所有信息是不可能的。这是因为加密过程通常涉及将明文填充到固定块大小,这意味着明文长度通过密文长度隐含地被揭示。此外,加密过程可能会向密文中添加元数据,揭示有关明文长度或其他属性的信息。
在许多情况下,明文长度已经是公开的或不敏感的,因此揭示它不会构成安全风险。然而,在某些情况下,泄漏明文长度可能会有问题。例如,如果明文包含个人或财务数据等敏感信息,则揭示明文长度可能会为攻击者提供有价值的信息,从而使攻击变得更加有效。同样,在某些加密协议中,例如用于安全消息传递或数据传输的协议中,揭示明文长度可能会危及通信的机密性或完整性。
因此,了解明文长度的披露问题并采取措施减轻它是非常重要的。这可能包括在加密之前将所有消息填充到预定长度,或使用提供一定程度的明文长度隐藏的加密方案,例如基于格式保留加密或随机填充的加密方案。
# 3.2.2 *语义安全
在密码学中,语义安全性(Semantic Security)是指加密算法应该能够保证在密文泄露的情况下,仍能够保护明文的机密性。具体来说,如果一个加密算法是语义安全的,那么攻击者即使知道加密后的密文,仍然不能够推断出原始的明文或有用的信息。
语义安全性是对加密算法安全性的一种强要求,它反映了加密算法的难以破解程度。如果一个加密算法不是语义安全的,那么攻击者可能通过分析密文来获得有用的信息,从而破译加密算法。
通常,一个加密算法被认为是语义安全的,当且仅当它满足选择明文攻击(chosen-plaintext attack,CPA)的安全性。在选择明文攻击中,攻击者可以选择任意的明文对,将它们加密并获取相应的密文。通过对这些密文和明文对进行分析,攻击者可以尝试推断出加密算法的密钥。
为了满足语义安全性,加密算法通常采用随机化的方式来使每个明文对应的密文都是随机的,并且在明文和密文之间没有任何可预测的关系。这样可以使得攻击者无法通过密文推断出明文或密钥。常见的语义安全的加密算法包括对称加密算法中的AES、DES、以及公钥加密算法中的RSA、ECC等。
定义
考虑一个加密方案
是密钥生成算法 是加密算法 是解密算法
对于任意的概率多项式时间(probabilistic polynomial-time)算法
其中,
是安全参数 是一个忽略不计的函数,表示随着安全参数 的增长,这个值会趋向于 0 表示根据安全参数 生成的公钥-私钥对 和 是任意两个相同长度的明文 表示概率
上述定义表明,对于语义安全的加密方案,攻击者在多项式时间内无法有效地区分两个密文对应的明文。
例子
一个典型的语义安全的加密方案是概率性非对称加密方案,例如ElGamal加密。ElGamal 加密具有以下性质,使其满足语义安全性:
- 加密是概率性的,即对于相同的明文和公钥,加密过程会产生不同的密文。
- 密文空间比明文空间大,即密文的数量大于明文的数量。
这些性质保证了攻击者无法通过简单地观察密文来推测明文,从而实现语义安全。
总结
语义安全是密码学中的一种重要安全性定义。在语义安全的加密方案中,攻击者不能从密文中获取关于明文的任何有意义的信息。这种安全性使得加密方案在现实应用中具有更高的安全性。
# 3.3构建一个EAV-安全加密方案
在定义了加密方案的安全性之后,读者可能期望我们立即转向安全加密方案的构建。然而,在此之前,我们需要介绍伪随机生成器(Pseudorandom Generators,PRGs)的概念,它是私钥加密的重要构建块。这将进一步引出关于伪随机性的讨论,它在密码学中发挥着基础性的作用,特别是在私钥加密中。
# 3.3.1伪随机生成器
伪随机生成器(Pseudorandom Generators,PRGs)是密码学中的一种重要工具,它们允许我们使用看起来随机的比特串来代替真正的随机比特串,从而简化了密码学协议的设计和实现。
PRGs接受一个随机的种子作为输入,并产生一个看起来随机的比特串作为输出。PRGs的输出并不是真正的随机比特串,而是伪随机的。伪随机性指的是输出看起来随机,但实际上是由一个确定性算法生成的,而不是真正的随机比特串。
一个好的PRG应该满足以下几个条件:
均匀性(Uniformity):PRG的输出应该看起来是随机的,即输出的比特串应该足够均匀地分布在所有可能的比特串中。
可预测性(Predictability):PRG的输出应该只能在已知种子的情况下被预测,而对于没有种子的情况下,它应该是不可预测的。
不可区分性(Indistinguishability):PRG的输出应该与真正的随机比特串难以区分,即攻击者不能够在多项式时间内区分PRG的输出与真正随机比特串的输出。
PRGs通常被用于生成加密密钥,例如将一个随机的种子作为输入,并使用PRG生成一个更长的随机比特串作为密钥。这样做的好处是,由于PRG的输出看起来随机,攻击者很难通过分析密文来推断出密钥的值。
PRGs在密码学中发挥着重要的作用,因为它们允许我们使用看起来随机的比特串来代替真正的随机比特串,从而简化了密码学协议的设计和实现。在私钥加密中,PRG是实现语义安全的重要工具,而在公钥加密和消息认证码中,伪随机函数(Pseudorandom Function,PRF)则是实现安全协议的重要工具。
# 3.3.2规约证明
规约证明(Proofs by Reduction)是密码学中一种常用的证明技术,用于证明一个安全性问题与另一个已知的安全性问题等价。规约证明是密码学中证明安全性的重要工具之一。
如果我们希望证明某个构造(例如加密方案)在计算上是安全的,除非该方案在信息论上是安全的,否则我们必须依赖未经证明的假设。我们的策略是假设某个数学问题很难,或者某个低级密码学原语是安全的,然后证明基于该问题/原语的给定构造在我们的初始假设正确的情况下是安全的。在1.4.2节中,我们已经详细解释了这种方法的优点,因此我们不在此重复这些论点。
通常情况下,证明某个密码构造
固定某个攻击
的有效(即概率多项式时间)攻击者 。用 表示攻击者的成功概率。 构造一种有效的算法
,该算法尝试使用攻击者 作为子例程来解决问题 。这里的重要一点是, 对 的工作方式一无所知; 只知道 期望攻击 。因此,给定问题 的某个输入实例 ,我们的算法 将为 模拟一个 实例,以便: (a) 就
而言,它正在与 交互。也就是说,在 作为 的子例程运行时, 的视图应该与其与 本身交互时的视图完全相同(或至少接近)。 (b) 当
成功“破解”由 模拟的 实例时,这应该允许 解决它所给出的实例 ,至少具有倒数多项式概率 。也就是说,我们试图将解决 的问题归约为破解 的问题。 综合以上所述,我们有
具有概率 解决 。现在,如果 不是可以忽略不计的,那么 也不是可以忽略不计的。此外,如果 是有效的,则我们得到一个有效算法 以非可忽略概率解决 ,这与我们的初始假设相矛盾。 鉴于我们关于
的假设,我们得出结论:没有有效的攻击者 能够以非可忽略的概率破解 。换句话说, 是计算上安全的。
作为上述思路的说明,本文节选了一个例子,展示了如何使用伪随机生成器
总体而言,本文阐述了在密码学中证明计算安全性的规约技术的重要性,并提供了规约证明方法的高级概述。
3.3.3
假设我们有一个可伪随机生成器
具体来说,假设我们有一个明文集合
加密:给定一个密钥
解密:给定一个密钥
这个方案的正确性可以通过简单的代数运算得到:
因此,解密算法可以正确地恢复出明文。
我们现在考虑该方案的安全性。假设存在一个攻击者
具体来说,我们构造一个区分器
最后,
因此,我们得到了一个区分器
总结一下,我们可以使用伪随机生成器
# 3.3.3从伪随机生成器实现EAV安全性
一个伪随机生成器提供了一种构建安全的固定长度加密方案的自然方法,其密钥比消息短。回想一次性密码本(见2.2节),加密是通过将随机密码本与消息进行异或运算来完成的。关键的洞察是,我们可以使用伪随机密码本。然而,发送方和接收方可以共享一个均匀种子,该种子在需要时用于生成密码本(参见图3.2);这个种子将比密码本短,因此比消息短。至于安全性,直觉是伪随机字符串“看起来随机”,任何多项式时间敌手都无法区分使用一次性密码本加密的消息和使用“伪一次性”密码本加密方案加密的消息。
加密方案。令G是一个扩展因子为
这个证明是使用反证法来证明的。我们首先假设
接下来,我们将使用这个假设构建一个区分器
- 选择一个随机的二进制字符串
,长度为 ,作为 的密钥。 - 根据密钥
使用 生成一个随机的二进制串 ,长度为 。 - 选择两个随机的消息
和 ,长度相同,并给 一个比特 。 - 如果
,则定义 ,否则定义 。 - 计算
,其中 是一个固定长度的MAC或数字签名算法。 - 将密文
和认证标签 提供给攻击者,让攻击者进行区分。
攻击者的目标是确定
现在我们分两种情况来讨论:
如果攻击者使用
生成的密码本来计算 和 ,则 或 。由于 是随机选择的,因此 本身应该是随机的。如果 是一个伪随机生成器,则 应该看起来像是真正的随机数。因此,攻击者无法区分 是由真正的随机数还是由 生成的伪随机数得到的。此外,认证标签 是使用密钥 和密文 计算的,因此攻击者无法在不知道 的情况下计算出正确的认证标签 。因此,攻击者无法在多项式时间内对 区分 和 ,即攻击者无法成功地区分 和真正的随机生成器。 如果攻击者使用
生成的密码本来计算 和 ,则 。由于 是随机选择的,并且 和 是随机选择的,因此 也应该看起来像是真正的随机数。因此,攻击者无法区分 是由真正的随机数还是由 生成的伪随机数得到的。认证标签 是使用密钥 和密文 计算的,但攻击者不知道 。因此,攻击者无法计算出正确的认证标签 。因此,攻击者也无法在多项式时间内对 区分 和 ,即攻击者无法成功地区分 和真正的随机生成器。
因此,我们可以得出结论:如果
这个证明的关键点在于,我们使用反证法来证明
# 3.4更强的安全概念
到目前为止,我们一直在考虑一个相对较弱的安全定义,即对手只被动地窃听诚实当事人之间发送的单个密文。这里我们考虑更强的安全概念。
# 3.4.1针对多次加密的安全性
定义3.8处理了通信双方传输单个密文并被窃听者观察的情况。然而,如果通信双方可以安全地互相发送多个密文——所有这些密文都使用相同的密钥生成——即使窃听者可能观察到所有这些密文,这将非常方便。对于这样的应用程序我们需要一种加密方案,用于加密多个消息的安全性。
我们首先为此设置引入适当的安全性定义。与定义3.8的情况类似,我们首先为任何加密方案
多消息窃听实验
对手
被赋予输入 ,并输出两个等长的消息列表 和 ,其中对于所有 , 。 通过运行
生成密钥 ,并选择一个均匀比特 。对于所有 ,计算密文 ,并将列表 交给 。 对手
输出一个比特 。 如果
,则实验的输出定义为 ,否则为 。
与之前的安全性定义相同,但现在它指的是上述实验。
定义3.18 如果私钥加密方案
在窃听者存在的情况下拥有不可区分的多个加密的任何方案显然也满足定义3.8,因为实验
命题3.19 存在一种私钥加密方案,在窃听者存在的情况下具有不可区分的加密,但在窃听者存在的情况下不存在不可区分的多个加密。
证明:我们不需要观察就能找到满足该命题的加密方案的例子。一次一密(one-time pad)是完全保密的,因此在窃听者存在的情况下也具有不可区分的加密。我们将证明它在定义3.18的意义下不是安全的。(我们已经在第2章中讨论过这种攻击;这里我们只是根据定义3.18分析攻击。)
概率性加密的必要性。上面的内容可能表明,使用任何加密方案都无法实现定义3.18。只要加密方案是(无状态的且)确定性的,因此使用相同的密钥多次加密相同的消息总是产生相同的结果,这就是真实情况。这一点重要到足以陈述为一个定理。
定理3.20 如果
这不应被解释为定义3.18太强了。事实上,向窃听者泄露两个加密消息相同的事实可能会造成重大安全漏洞。(例如,考虑加密一系列是/否回答的场景!)
为了构建一个安全的用于加密多个消息的方案,我们必须设计一个随机化的加密方案,这样当同一消息被加密多次时,可以产生不同的密文。这可能看起来是不可能的,因为解密必须始终能够恢复消息。然而,我们很快将看到如何实现它。
虽然实现多个消息的加密的安全性很重要,但我们并不会广泛地考虑定义3.18本身,而是专注于我们在下一节中介绍的更强的定义。
# 3.4.2 选择明文攻击和CPA安全
选择明文攻击捕获了攻击者在加密过程中(部分)控制诚实方加密内容的能力。想象一个场景,其中两个诚实方共享一个密钥
==安全性的定义要求:即使敌手具备访问加密预言机能力,敌手也不能区分两个任意消息的加密==。这里先提出定义,然后将讨论该定义模拟真实世界的什么攻击。
现实世界中的选择明文攻击。选择明文攻击是一个现实可行的问题吗?首先,注意到选择明文攻击也包括已知明文攻击——攻击者知道加密的某些消息,即使它不能选择它们——作为一种特殊情况。此外,有几个现实世界的场景中,攻击者可能会对哪些消息被加密具有重大影响。一个简单的例子是攻击者在终端上输入,然后使用与远程服务器共享的密钥(对攻击者未知)加密攻击者输入的所有内容。在这里,攻击者完全控制了被加密的内容,当使用相同的密钥加密其他用户输入的数据时,加密方案仍应该不泄漏任何信息。
有趣的是,选择明文攻击也曾被成功地用于突破军事加密方案。例如,在第二次世界大战期间,英国在某些位置放置了地雷,知道德国人——当发现那些地雷时——会加密这些位置并将它们送回总部。Bletchley Park的密码分析员使用这些加密消息来破解德国的加密方案。还有一个例子是著名的中途岛战役。1942年5月,美国海军密码分析员拦截到一条来自日本的加密消息,他们能够部分解码。结果表明,日本计划袭击“AF”,其中“AF”是美国无法解码的密文片段。由于其他原因,美国认为中途岛是目标。不幸的是,他们试图说服华盛顿的规划者这是事实的尝试是徒劳无益的。海军密码分析员制定了以下计划:他们指示在中途岛的美军发送一条假消息,声称他们的淡水供应不足。日本人截获了这条消息,并立即向他们的上级发送了一条加密消息,称“AF缺水”。海军密码分析员现在有了证据,证实“AF”对应于中途岛,美国派出了三艘航空母舰前往该位置。结果是中途岛得救了,而日本遭受了重大损失。这场战斗是美国和日本在太平洋之间的战争的转折点。
在这里,海军密码分析员进行了选择明文攻击,因为他们能够影响日本人(虽然是迂回的方式)加密“中途岛”这个词。如果日本的加密方案对选择明文攻击是安全的,美国密码分析员的这种策略就不会奏效(历史可能会有很大不同)!
CPA-Security。在正式定义中,我们通过给攻击者 A 访问一个加密 oracle 来对选择明文攻击进行建模,将其视为加密 A 选择的消息的“黑盒”,使用未知于 A 的密钥 k 加密。也就是说,我们想象 A 有一个“oracle”
考虑以下对于任何加密方案
选择明文攻击下的 CPA 不可区分性实验
- 运行
生成密钥 。 - 攻击者 A 获得输入
和访问 的 oracle,并输出一对相同长度的消息 。 - 选择均匀的比特
,计算密文 ,并将其提供给 A,c称为挑战密文。 - 攻击者 A 继续对
有 oracle 访问权限,并输出一个比特 。 - 实验的输出被定义为当
时为 1,否则为 0。在前一种情况下,我们称 A 成功。
定义 3.21:私钥加密方案
其中概率取决于 A 使用的随机性,以及实验中使用的随机性。
现在,CPA-安全性是加密方案应满足的最低安全性要求,尽管现在越来越常见的是要求更强的安全性概念,我们将在第 5 章中讨论。
# 3.4.3 用于多次加密的 CPA 安全性
可以使用明文列表将 Definition 3.21 扩展到多次加密的情况,类似于 Definition 3.8 的方式。然而,这里我们使用一种略微不同的方法,具有攻击者可以自适应地选择要加密的密文对的优势。具体而言,我们现在给攻击者访问“左侧或右侧”oracle LR_k,b,对于相等长度的消息$ m_0$ 和
考虑任何加密方案
多次加密下的 LR-oracle 实验
- 运行
生成密钥 。 - 选择均匀的比特
。 - 攻击者 A 获得输入
和访问 的 oracle,如上所述。 - 攻击者 A 输出比特
。 - 实验的输出被定义为当
时为 1,否则为 0。在前一种情况下,我们称 A 成功。
定义 3.22:私钥加密方案
需要注意的是,给定访问
实际上,多次加密的 CPA 安全性与单次加密的 CPA 安全性等价(与窃听型攻击者的情况相反,参见命题 3.19)。我们在不加证明的情况下陈述以下定理;类似的公钥设置结果在第 12.2.2 节中给出证明。
定理 3.23:任何具有 CPA 安全性的私钥加密方案也具有多次加密下的 CPA 安全性。
因此,只需证明一个方案具有 CPA 安全性(针对单次加密),我们就可以得出它也具有多次加密的 CPA 安全性。
固定长度与任意长度的消息。使用 CPA 安全性的多条消息的概念(或等效地,CPA 安全性),可以不失一般性地处理固定长度加密方案的优点。特别是,对于任何具有 CPA 安全的固定长度加密方案
具体来说,假设我们要加密长度为
解密时,我们可以简单地解密每个块并将它们连接起来以重建原始消息。由于
需要注意的是,在实际应用中,通常使用的是支持任意长度消息的加密方案,而不是仅支持固定长度消息的加密方案。这是因为大多数实际应用程序需要加密的消息都不是固定长度的。
# 3.6 操作模式和实践中的加密
在3.3.3节和3.5.2节中描述的加密方案(即构造3.17和3.28)具有许多缺点,使它们不适合实际应用。首先,构造3.17仅具有EAV安全性。此外,这两个构造仅针对固定长度消息的加密。虽然可以使用3.28构造通过在3.4.3节末尾讨论的方法加密任意长度的消息,但这将导致密文长度是明文长度的固定倍数,这相当低效。在本节中,我们将展示如何克服这些缺点。
在处理实际考虑因素时,我们还开始讨论安全加密方案的基础构建模块,即伪随机生成器和伪随机置换如何使用流密码和分块密码在现实世界中实现。我们的目标在于介绍适当的术语和语法;我们将深入讨论流密码和分块密码的设计以及这些原语的一些流行候选项,留待第7章讨论。
看大佬总结吧(opens new window)