现代密码学的一些原则(入门密码学必读)

admin 2022年6月29日11:45:58CTF专场评论8 views5076字阅读16分55秒阅读模式

点击蓝字关注我们

密码学是一门科学

在过去的几十年里,密码学已经发展成为一门科学。现在的方案以更系统的方式发展和分析,最终目标是给出给定结构安全性的严格证明。为了清楚地表达这样的证明,我们首先需要正式的定义,明确“安全”的含义;这些定义本身是有用和有趣的。事实证明,大多数密码学证明依赖于当前未经证实的关于某些数学问题的算法难度的假设;任何此类假设都必须明确并准确说明。强调定义、假设和证明将现代密码学与经典密码学区分开来;我们将更详细地讨论这三个原则。

原则一、形式化的定义

现代密码学的主要贡献之一是认识到安全性的正式定义对于正确设计、研究、评估和使用密码学原语至关重要。直截了当地说:如果你不明白你想要实现什么,你怎么可能知道你何时(或是否)实现了它?

正式定义通过明确描述范围内的威胁以及需要什么样的安全保障来提供这种理解。因此,定义可以帮助指导密码方案的设计。

定义还提供了一种评估和分析构造内容的方法。有了一个定义,人们可以研究一个提出的方案,看看它是否达到了预期的保证;在某些情况下,甚至可以通过证明某个给定结构符合定义来证明该结构是安全的。另一方面,可以使用定义来证明给定方案是不安全的,只要该方案不满足定义。

使用定义可以对方案进行有意义的比较。可以有多种(有效的)方法来定义安全性,“正确”的方案取决于使用方案的上下文。一个满足较弱定义的方案可能比另一个满足较强定义的方案更有效。通过精确的定义,我们可以正确地权衡两种方案。

同样,定义使我们能够安全地使用方案。考虑一下对某些更大的应用程序使用哪个加密方案的问题。解决这个问题的一个好方法是首先了解应用程序需要什么样的安全性概念,然后找到满足这个概念的加密方案。这种方法的一个附带好处是模块化:设计者可以“交换”一种加密方案,并用另一种加密方案替换它(这也满足安全性的必要定义),而不必担心影响整个应用程序的安全性。

提出一个正式的定义迫使人们思考什么是手头问题的关键,什么属性是无关的。经历这个过程往往会揭示问题的微妙之处,而这些在第一眼看来并不明显。接下来我们将以加密为例说明这一点。

例如:安全加密。一个常见的错误是认为不需要正式的定义,或者只是简单的定义,因为“每个人对安全意味着什么都有一个直观的想法”。事实并非如此。

作为一个例子,我们考虑加密的情况。(读者可能想在这里停下来思考他们将如何正式定义加密方案的安全含义。)虽然本文不提及安全加密的正式定义,但我们在这里非正式地描述了这样一个定义应该包含哪些内容。

现代密码学的一些原则(入门密码学必读)

通常,安全定义有两个组成部分:安全保证(或者,从攻击者的角度来看,什么构成对方案的成功攻击)和威胁模型。安全保证定义了该方案旨在防止攻击者进行的操作,而威胁模型描述了对手的力量,即假定攻击者能够执行的操作。

安全保证

让我们从第一个开始。安全的加密方案应该保证什么?以下是一些想法:


-攻击者不可能恢复密钥

我们很容易可以理解,如果攻击者可以使用某种方案确定双方共享的密钥,那么该方案就不安全。然而,很容易提出密钥恢复不可能的方案,但该方案显然是不安全的。考虑,例如,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)。现代密码学要求任何此类假设都要明确且在数学上精确。在最基本的层面上,这仅仅是因为安全性的数学证明需要这一点。但也有其他原因:


1.假设的验证:就其本质而言,假设是未经证明但被推测为真实的陈述。为了加强我们对某些假设的信念,有必要对这些假设进行研究。假设越是在测试和验证中不被推翻,我们就越有信心该假设是正确的。此外,对一个假设的研究可以证明它的有效性,证明它是由其他一些也被广泛相信的假设所推断的。如果所依据的假设没有得到精确的说明,则无法对其进行研究和(潜在)推翻。因此,增加我们对假设的信心的一个先决条件是对假设的确切内容有一个准确的陈述。

2.方案比较:在密码学中,我们经常看到两种方案,它们都可以被证明满足某些定义,每种方案都基于不同的假设。假设所有其他条件都相同,应首选哪种方案?如果第一个方案所基于的假设弱于第二个方案所基于的假设(即,第二个假设意味着第一个假设),那么第一个方案更可取,因为当第一个假设为真时,第二个假设可能为假。如果两个方案使用的假设不具有可比性,那么一般规则是选择基于更深入研究的假设且置信度更高的方案。

DL(或CDH)假设比DDH假设弱,但DL(或CDH)假设更困难,ElGamal加密方案的语义安全性难以通过DL假设证明,所以引入更强的DDH假设完成证明,加强了假设意味着降低了证明的安全性。

3.理解假设的必要性: 加密方案可能基于某些基础构建块。如果以后在构建块中发现了一些弱点,我们如何判断加密方案是否仍然安全?如果作为证明方案安全性的一部分,明确了构建模块的基本假设,那么我们只需检查所需假设是否受到发现的新弱点的影响。

有时会出现这样一个问题:与其基于其他一些假设来证明方案是安全的,为什么不简单地假设构造本身是安全的呢?在某些情况下,例如,当一个方案已成功抵御攻击多年时,这可能是一种合理的方法。但这种方法从来都不是首选方法,而且在引入新方案时非常危险。上述原因有助于解释原因。首先,一个经过几年测试的假设要比一个新的、特别的、引入现代密码学的假设更可取。其次,人们普遍倾向于陈述更简单的假设,因为这样的假设更容易研究和(可能)证伪。因此,例如,假设某个数学问题很难解决比假设加密方案满足复杂的安全定义更容易研究和评估。依赖“较低级别”假设(而不仅仅是假设一个构造是安全的)的另一个优点是,这些较低级别假设通常可以用于其他构造。最后,低级假设可以提供模块化。考虑一种加密方案,其安全性依赖于其构建块之一的某些假定属性。如果基础构建块不满足所述假设,则仍然可以使用被认为满足必要要求的不同组件来实例化加密方案。


最弱的假设就是连假设都没有,最强的假设就是假设你的构造是正确的。

原则三、安全证明

上述两个原则允许我们实现我们的目标,即提供一个严格的证明,证明在某些特定的假设下,构造满足给定的定义。这样的证明在密码学中尤其重要,因为有攻击者正积极尝试“破坏”某个方案。安全性证明对攻击者不会成功的定义和假设提供了铁一般的保证;这比对问题采取无原则或启发式的方法要好得多。如果没有证据表明拥有特定资源的对手无法打破某些计划,我们只能凭直觉判断情况就是这样。经验表明,在密码学和计算机安全方面的直觉是灾难性的。有无数未经证实的方案被破坏的例子,有时是立即破坏,有时是在开发之后几年破坏。

可证明安全与现实世界安全

许多现代密码学现在建立在坚实的数学基础上。但这并不意味着这个领域不再是一门艺术。严格的方法为开发适合当代应用和环境的定义、提出新的数学假设或设计新的原语、构建新方案并证明其安全性留下了创造性的空间。当然,攻击已部署的密码系统也将始终是一门艺术,即使它们被证明是安全的。接下来我们将对这一点展开讨论。

现代密码学所采用的方法已经彻底改变了这一领域,并有助于为在现实世界中部署的加密方案的安全性提供信心。但重要的是不要夸大安全证明的含义。安全性证明始终与所考虑的定义和所使用的假设相关。如果安全保证不符合需要,或者威胁模型没有捕捉到对手的真实能力,那么证明可能无关紧要。同样,如果所依赖的假设被证明是错误的,那么安全证明就毫无意义。

方案的可证明安全性并不一定意味着该方案在现实世界中的安全性。虽然有些人认为这是可证明安全性的一个缺点,但我们乐观地认为这说明了该方法的优势。要在现实世界中攻击可证明安全的方案,只需将注意力集中在定义(即,探索理想化的定义与部署方案的真实环境之间的差异)或基本假设(即,看看它们是否成立)上即可。反过来,密码学家的工作就是不断完善他们的定义,使之更接近现实世界,并调查他们的假设以检验其有效性。可证明的安全性并没有结束攻击者和防御者之间由来已久的战斗,但它确实提供了一个框架,有助于转移对防御者有利的机会。




编辑:陈十九

审核:商密君

征文启事

大家好,为了更好地促进同业间学术交流,商密君现开启征文活动,只要你对商用密码、网络安全、数据加密等有自己的独到见解和想法,都可以积极向商密君投稿,商密君一定将您的声音传递给更多的人。

现代密码学的一些原则(入门密码学必读)

点击购买《2020-2021中国商用密码产业发展报告》现代密码学的一些原则(入门密码学必读)

来源:赛迪密码信息安全 

注:内容均来源于互联网,版权归作者所有,如有侵权,请联系告知,我们将尽快处理。

现代密码学的一些原则(入门密码学必读)

现代密码学的一些原则(入门密码学必读)
现代密码学的一些原则(入门密码学必读)
点分享
现代密码学的一些原则(入门密码学必读)
点点赞
现代密码学的一些原则(入门密码学必读)
点在看

原文始发于微信公众号(商密君):现代密码学的一些原则(入门密码学必读)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月29日11:45:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  现代密码学的一些原则(入门密码学必读) http://cn-sec.com/archives/1137917.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: