初步学习密码系统的安全性

密码系统的最终目标是为了保证数据的安全性,比如机密性、完整性等等。

密码系统安全性的三种评价方式

第一种,无条件安全性,指的是假设攻击者有无限的计算资源,仍然无法破译密码系统。照我看来,这种安全性是“真正的安全”。

第二种,计算安全性。某密码体制拥有计算安全性,指的是攻击者攻破该体制所需要的计算资源远远超出其水平。

第三种,可证明安全性,这种评估方式是将密码系统的安全性归约为某个经过人们深入研究的数学难题,此数学难题被认为是求解困难的。我所知道的数学难题包括:大整数的素数因子分解、离散对数的计算等。当然,这种方式的问题在于,它只说明了这个密码体制的安全性依赖于某个困难问题,并没有完全证明其本身的安全性。

实际应用的密码体制的安全性定义

对于现在实际应用的密码系统来说,都存在暴力法能够破解,因此实际使用的密码体制只能提供计算安全性。一般我们说密码系统满足以下准则之一,就认为达到了实际安全性:

  1. 破译所需要的实际计算量(包括时间或费用成本)非常巨大,以至于实际上无法实现。
  2. 破译所需要的时间超过被加密信息有用的声明周期。这一点实际上与数据本身的特点有关,数据往往是具有时效性的,比如战争中的命令往往只需要在战斗开始之前保密等等。
  3. 破译所需要的费用超过被加密信息本身的价值。这里的“价值”应该不仅仅指的是金钱吧?

可证明安全性

可证明安全体系中有三大要素:安全模型、安全性定义和困难性问题。

安全模型

安全模型分为两个部分:安全目标和敌手能力。

笼统地说,密码系统安全目标就是让攻击者对密码一无所知,无法获取任何关于明文的信息。但是还需要明确地定义。现在我们有两个常用的安全目标:

  1. 不可区分性,即Indistinguishability或IND。一般通过一个游戏说明:攻击者选定两个明文,挑战者挑选其中一个加密并返回密文,攻击者无法分别出其对应的明文。不可区分性也叫语义安全性
  2. 不可展性,即Non-malleability或NM。直观地说就是指攻击者无法构造出与已给密文相关的新密文。给定密文\(C_1 = Enc(M_1)\),攻击者应该不能构造出\(C_2\),使得其对应的明文\(M_2 = Dec(C_2)\)\(M_1\)存在某种非平凡的关系\(R\)

敌手能力可以用几个模型来描述。在下面的不同攻击模型中,攻击者的能力由弱到强:

  1. 唯密文攻击即Ciphertext only attack,攻击者只获得了若干密文,而没有任何明文信息。攻击者只需要监听信道就可以抓取密文实施这种攻击。
  2. 已知明文攻击即Known plaintext attack,攻击者有若干个明-密文对。(与唯密文攻击相比,攻击者可以有明文数据以及明-密文数据的对应关系。)
  3. 选择明文攻击即Chosen-plaintext attack或CPA。假设攻击者占据加密机(encryption oracle,可以理解为一个“明文->密文”的黑盒),从而可以选择任意明文并使用加密机构造出对应密文。
  4. 选择密文攻击即Chosen-ciphertext attack或CCA。这种模型下,假设攻击者既能实施明文攻击,还占据解密机(decryption oracle)从而可以选择任意密文并解密得到对应明文,据此进行密钥破解或明文推测。CCA根据攻击者构造密文阶段的不同,可以分为CCA1(Non-adaptive CCA)和CCA2(Adaptive CCA)。CCA1中,攻击者必须一次性将构造好的密文输入解密机得到对应的明文;而在CCA2中,攻击者允许在得到前一个密文对应的明文的基础上构造后续的密文。显然,CCA的假设最弱,攻击者的能力比CPA更强。

安全性定义

安全性定义与上面所说的敌手的能力相关。比如常见的一个安全性定义是IND-CPA安全。

通常会把安全性定义描述成一个游戏game,其中需要定义不同的角色(如敌手A与挑战者C),游戏通常被描述为若干个流程步骤,最终得到定义,通常最后的定义类似“如果对于任何多项式时间的敌手A,存在一个可忽略的优势\(\sigma\),使得某某条件满足,则称这个算法具有某某安全性(比如IND-CPA安全)”。

困难问题

前面也提到过,可证明安全通常是归约到困难问题上来进行证明。密码学中常用的困难问题有离散对数问题(discrete logarithm problem,简称DLP)、CDH问题(computational Diffie-Hellman)、DDH问题(decisional Diffie-Hellman)、BDH问题(bilinear Diffie-Hellmann)。

通常要证明一个加密算法(或协议)的安全性,首先需要确定它想要实现的安全目标,然后根据安全性定义确定敌手能力,构建安全性模型,再把对加密算法(或协议)的攻击归约到已被证明困难的问题上,最终得证。

posted @ 2024-05-21 01:26  随机生成一个id  阅读(9)  评论(0编辑  收藏  举报