在过去的几十年里,密码学已经发展成为一门科学。现在的方案以更系统的方式发展和分析,最终目标是给出给定结构安全性的严格证明。为了清楚地表达这样的证明,我们首先需要正式的定义,明确“安全”的含义;这些定义本身是有用和有趣的。事实证明,大多数密码学证明依赖于当前未经证实的关于某些数学问题的算法难度的假设;任何此类假设都必须明确并准确说明。强调定义、假设和证明将现代密码学与经典密码学区分开来;我们将更详细地讨论这三个原则。
现代密码学的主要贡献之一是认识到安全性的正式定义对于正确设计、研究、评估和使用密码学原语至关重要。直截了当地说:
如果你不明白你想要实现什么,你怎么可能知道你何时(或是否)实现了它?
正式定义通过明确描述范围内的威胁以及需要什么样的安全保障来提供这种理解。因此,定义可以帮助指导密码方案的设计。
定义还提供了一种评估和分析构造内容的方法。有了一个定义,人们可以研究一个提出的方案,看看它是否达到了预期的保证;在某些情况下,甚至可以通过证明某个给定结构符合定义来证明该结构是安全的。另一方面,可以使用定义来证明给定方案是不安全的,只要该方案不满足定义。
使用定义可以对方案进行有意义的比较。可以有多种(有效的)方法来定义安全性,“正确”的方案取决于使用方案的上下文。一个满足较弱定义的方案可能比另一个满足较强定义的方案更有效。通过精确的定义,我们可以正确地权衡两种方案。
同样,定义使我们能够安全地使用方案。考虑一下对某些更大的应用程序使用哪个加密方案的问题。解决这个问题的一个好方法是首先了解应用程序需要什么样的安全性概念,然后找到满足这个概念的加密方案。这种方法的一个附带好处是模块化:设计者可以“交换”一种加密方案,并用另一种加密方案替换它(这也满足安全性的必要定义),而不必担心影响整个应用程序的安全性。
提出一个正式的定义迫使人们思考什么是手头问题的关键,什么属性是无关的。经历这个过程往往会揭示问题的微妙之处,而这些在第一眼看来并不明显。接下来我们将以加密为例说明这一点。
例如:安全加密。一个常见的错误是认为不需要正式的定义,或者只是简单的定义,因为“每个人对安全意味着什么都有一个直观的想法”。事实并非如此。
作为一个例子,我们考虑加密的情况。(读者可能想在这里停下来思考他们将如何正式定义加密方案的安全含义。)虽然本文不提及安全加密的正式定义,但我们在这里非正式地描述了这样一个定义应该包含哪些内容。
通常,安全定义有两个组成部分:安全保证(或者,从攻击者的角度来看,什么构成对方案的成功攻击)和威胁模型。安全保证定义了该方案旨在防止攻击者进行的操作,而威胁模型描述了对手的力量,即假定攻击者能够执行的操作。
让我们从第一个开始。安全的加密方案应该保证什么?以下是一些想法:
我们很容易可以理解,如果攻击者可以使用某种方案确定双方共享的密钥,那么该方案就不安全。然而,很容易提出密钥恢复不可能的方案,但该方案显然是不安全的。考虑,例如,Enc (k, m)=m的方案。密文不会泄露有关密钥的任何信息(因此,如果密钥足够长,则无法恢复),但消息以明文形式发送!因此,我们发现无法恢复密钥不足以保证安全性。这是有道理的:加密的目的是保护消息;关键是实现这一目标的手段,但其本身并不重要。
这一定义更好,但仍远远不能令人满意。特别地,如果密文泄露了明文的90%,明文的剩余10%难以计算,那么这个定义将认为该加密方案是安全的。这在最常见的加密应用中显然是不可接受的;例如,当加密工资数据库时,如果90%的员工工资被泄露,我们有理由感到不安!
这看起来是一个很好的定义,但仍然不够。回到加密工资数据库的例子中,如果加密方案泄露了一个雇员的薪水是否超过或少于100000美元,即使它没有显示出该雇员薪水的任何特定数字,我们依然会认为该加密方案是不安全的。类似地,我们不希望加密方案泄露雇员A是否比雇员B赚得多。
另一个问题是如何将对手“恢复明文字符”的含义正式化。如果攻击者纯粹通过运气或外部信息正确猜测某人工资的最低有效数字为0,该怎么办?显然,这不应使加密方案不安全,因此任何可行的定义都必须以某种方式排除此类行为是成功的攻击。
这一非正式定义涵盖了上述所有问题。请特别注意,它并不试图定义关于明文的哪些信息是“有意义的”;它只要求不泄露任何信息。这一点很重要,因为这意味着安全加密方案适用于所有需要保密的潜在应用。
既然我们已经确定了一个安全目标,那么仍然需要指定一个威胁模型。
这将指定假定攻击者拥有的“能力”,但不会对对手的策略施加任何限制。这是一个重要的区别:我们指定了我们对对手能力的假设,但我们不假设对手如何使用这些能力。 历史已经证明,不可能预见攻击中可能使用什么策略,这样做的尝试注定要失败。
在加密环境下,威胁模型有几种可能的选择,按照攻击者能力递增的顺序,标准如下:
唯密文攻击(Ciphertext-only attack): 这是最基本的攻击,指的是敌手仅观察一个密文(或多个密文)并试图确定有关底层明文(或明文)的信息的情况。
已知明文攻击(Known-plaintext attack): 在这里,敌手能够学习使用某个密钥生成的一个或多个明文/密文对。对手的目标是推断出使用同一密钥生成的其他密文的底层明文信息。(和CPA不同,这里敌手没有选择权)
选择明文攻击(Chosen-plaintext attack): 在这种攻击中,敌手可以为其选择的明文获取明文/密文对(如上所述)。
选择密文攻击( Chosen-ciphertext attack): 该攻击类型是对手能够额外获得(关于)其选择的密文解密的信息,例如,攻击者选择的某些密文的解密是否产生有效的英文消息。敌手的目标是了解其他密文(对手无法直接获得其解密)的底层明文信息。
这些威胁模型中没有一个天生比其他模型更好,使用正确的加密方案取决于部署加密方案的环境。
前两种攻击最容易实施。在唯密文攻击中,敌手需要做的唯一事情就是窃听发送加密消息的公共通信信道。在已知明文攻击中,假定敌手也以某种方式获得与已知明文对应的密文。这通常很容易实现,因为并非所有加密消息都是机密的,至少不是无限期的。作为一个简单的例子,双方在开始通信时可能总是加密“hello”消息。作为一个更复杂的例子,加密可以用来在季度收益报告发布之前对其保密;在这种情况下,任何偷听密文的人稍后都将获得相应的明文。
在后两种攻击中,假定对手能够获得其选择的明文/密文的加密和/或解密。这乍一看可能有些奇怪,我们将在以后讨论这些攻击及其实用性。
大多数现代密码结构不能无条件地证明是安全的;这样的证明需要解决计算复杂性理论中的问题,而这些问题在今天看来还远远没有得到回答。这种不幸状况的结果是,安全性的证明通常依赖于假设(assumptions)。现代密码学要求任何此类假设都要明确且在数学上精确。在最基本的层面上,这仅仅是因为安全性的数学证明需要这一点。但也有其他原因:
假设是越弱越好,因为越弱的假设,其阐述中所需要的已知信息就越少,或者简单的理解为“我门只要很弱的条件,假设就可以成立,那么这个假设是很好的;反过来说,我们要很强的条件,假设才可以成立,那么这个假设就不好了,因为条件越多,带来的不安定因素也越多”;
——解释来源
DL(或CDH)假设比DDH假设弱,但DL(或CDH)假设更困难,ElGamal加密方案的语义安全性难以通过DL假设证明,所以引入更强的DDH假设完成证明,加强了假设意味着降低了证明的安全性
有时会出现这样一个问题:与其基于其他一些假设来证明方案是安全的,为什么不简单地假设构造本身是安全的呢?在某些情况下,例如,当一个方案已成功抵御攻击多年时,这可能是一种合理的方法。但这种方法从来都不是首选方法,而且在引入新方案时非常危险。上述原因有助于解释原因。首先,一个经过几年测试的假设要比一个新的、特别的、引入现代密码学的假设更可取。其次,人们普遍倾向于陈述更简单的假设,因为这样的假设更容易研究和(可能)证伪。因此,例如,假设某个数学问题很难解决比假设加密方案满足复杂的安全定义更容易研究和评估。依赖“较低级别”假设(而不仅仅是假设一个构造是安全的)的另一个优点是,这些较低级别假设通常可以用于其他构造。最后,低级假设可以提供模块化。考虑一种加密方案,其安全性依赖于其构建块之一的某些假定属性。如果基础构建块不满足所述假设,则仍然可以使用被认为满足必要要求的不同组件来实例化加密方案。
最弱的假设就是连假设都没有,最强的假设就是假设你的构造是正确的
上述两个原则允许我们实现我们的目标,即提供一个严格的证明,证明在某些特定的假设下,构造满足给定的定义。这样的证明在密码学中尤其重要,因为有攻击者正积极尝试“破坏”某个方案。安全性证明对攻击者不会成功的定义和假设提供了铁一般的保证;这比对问题采取无原则或启发式的方法要好得多。如果没有证据表明拥有特定资源的对手无法打破某些计划,我们只能凭直觉判断情况就是这样。经验表明,在密码学和计算机安全方面的直觉是灾难性的。有无数未经证实的方案被破坏的例子,有时是立即破坏,有时是在开发之后几年破坏。
许多现代密码学现在建立在坚实的数学基础上。但这并不意味着这个领域不再是一门艺术。严格的方法为开发适合当代应用和环境的定义、提出新的数学假设或设计新的原语、构建新方案并证明其安全性留下了创造性的空间。当然,攻击已部署的密码系统也将始终是一门艺术,即使它们被证明是安全的。接下来我们将对这一点展开讨论。
现代密码学所采用的方法已经彻底改变了这一领域,并有助于为在现实世界中部署的加密方案的安全性提供信心。但重要的是不要夸大安全证明的含义。安全性证明始终与所考虑的定义和所使用的假设相关。如果安全保证不符合需要,或者威胁模型没有捕捉到对手的真实能力,那么证明可能无关紧要。同样,如果所依赖的假设被证明是错误的,那么安全证明就毫无意义。
方案的可证明安全性并不一定意味着该方案在现实世界中的安全性。 虽然有些人认为这是可证明安全性的一个缺点,但我们乐观地认为这说明了该方法的优势。要在现实世界中攻击可证明安全的方案,只需将注意力集中在定义(即,探索理想化的定义与部署方案的真实环境之间的差异)或基本假设(即,看看它们是否成立)上即可。反过来,密码学家的工作就是不断完善他们的定义,使之更接近现实世界,并调查他们的假设以检验其有效性。可证明的安全性并没有结束攻击者和防御者之间由来已久的战斗,但它确实提供了一个框架,有助于转移对防御者有利的机会。
注:本文翻译自 INTRODUCTION TO MODERN CRYPTOGRAPHY(Second Edition) Katz.