什么是真正安全的密码系统?
(1)无条件安全
这种评估方法考虑了攻击者拥有无限计算资源的假设,但他仍然无法破解密码系统。
(2)计算安全
这种方法意味着用目前最好的方法破解它所需的计算量远远超过了攻击者的计算资源水平,因此可以定义这种密码系统是安全的。
(3)可证明的安全性
该方法将密码系统的安全性归结为一个深入研究的数学问题(如大整数的因式分解、离散对数的计算等。),而且这个数学问题已经被证明是很难解决的。这种评估方法的问题在于,它只是说明了这种密码方法的安全性与一个难题有关,并没有完全证明问题本身的安全性,并给出了它们的等价证明。
2、实际安全性
对于实际的密码系统,因为至少有一种解密方法,即暴力破解,所以没有一种能满足无条件安全,只能提供计算安全。为了实现实际的安全性,加密系统必须满足以下标准:
(1)解密这个密码系统的实际计算量(包括计算时间或成本)是如此巨大,几乎不可能实现。
(2)解密密码系统所需的计算时间超过了加密信息的有用生命周期。比如战争中发起战斗攻击的作战命令,只需要在战斗开始前保密即可;重要的新闻往往只需要保密几个小时就可以公开报道。
(3)破译密码系统的成本超过加密信息本身的价值。
如果一个密码系统能够满足上述标准之一,它可以被认为是满足实际的安全性。
3、可证明安全性3.1可以证明安全体系的三要素。
在可证安全系统中,有三个要素:安全模型、安全定义和困难问题。
安全模型分为安全目标和对手能力。安全目标描述了安全模型应该有多安全,例如,加密算法的不可区分性(IND)和签名算法的存在性(EU)。
个性(IND)也叫语义安全,定义如下。即使敌手获得了密文,也无法获得对应明文的任何信息,甚至是1bit的信息。其形式表示为:已知m0,m1,Cb=Enc(pk,mb),其中m0不是m0就是m1,即Cb是m0就是m1的密文,在加密过程中敌手无法有效判断B是0还是1。
3.2?安全性定义
刻画对手的能力主要有四种类型,即选择明文攻击(CPA)、选择密文攻击(CCA)、纯密文攻击和已知明文攻击。常用的刻画敌手的能力是前两类,CPA是指敌手选择明文,可以得到相应的密文。选择密文攻击(CCA)是指敌手不仅可以选择明文获得密文,还可以选择有限次密文获得相应的明文。CCA比CPA更好的描述对手。
以下是一些常见的安全性定义。
注册会计师安全。为了更好地理解,我们将选择明文攻击(CPA)描述为一个游戏。首先声明这个游戏的目的是在选择明文攻击的前提下,打破系统的不可区分性,所以这个游戏以下简称IND-CPA。其次,需要明确两个角色:挑战者C和对手a,挑战者的任务是裁判,主持比赛,对对手的行为进行反馈。顾名思义,对手是要攻击当前的系统,对于这个游戏,采用选择明文攻击的方法进行攻击。游戏描述如下:
A.初始化:挑战者c创建IND-CPA系统,并将公钥发送给对手a?
B.对手A选择两个长度相同的明文?M0,m1送给挑战者c挑战者c?随机选择B ∈ {0,1},记录mb加密为cb,然后将密文cb发送给对手a。
C.对手a?猜测上一步挑战者C加密的明文是m0还是m1,输出猜测结果,输出结果记为B’。如果b' = b,那么对方进攻成功。
敌手攻击的优势可以定义为以下功能:?
其中w是加密方案密钥的长度。因为随机猜测有1/2的概率赢得IND-CPA游戏。因此
是对手通过努力获得的优势。如果对任何多项式时间的对手A有一个可以忽略的优势σ,它就使
然后说这种加密算法在选择明文攻击下是不可区分的,或者叫IND-CPA安全。
3.3?难题
有了安全模型和安全定义,我们通常用规范的方法来证明困难问题的安全性。密码学中常用的难题有离散对数问题(DLP)、CDH问题(计算微分-hellman)、DDH问题(决策微分-hellman)和BDH问题(双线性微分-hellman)。?
3.4?可证明安全理论
通过上述安全模型、安全定义和困难问题,可以证明该安全系统是可行的。可证明安全性是指用“协议”的方法将攻击密码算法或安全协议的方法标准化为一个困难的攻击问题。首先,确定加密系统的安全目标。比如签名系统的安全目标是签名的不可伪造性,加密系统的安全目标是信息的不可区分性。然后根据安全定义,确定对手的能力,构建安全模型。
规格说明是复杂性理论中的一个概念。一个问题P1对一个问题P2的规范,意味着给定求解P1的算法M1,我们可以构造另一个算法M2,它可以用M1作为子程序求解P2问题。
协议方法应用于密码算法或安全协议的安全性证明。例如,对手对密码算法或安全协议的攻击(P1)可以归结为一些已经被深入研究过的难题(P2)。也就是说,如果对手可以对算法或协议发起有效的攻击,它就可以利用对手来构造一个算法来解决难题。但是难题已经被证明是密不透风的,于是就有了矛盾。根据反证法,对手可以突破算法或协议。假设不成立,证明结束。
一般来说,为了证明方案1的安全性,我们可以将方案1简化为方案2,即如果敌手A可以破解方案1,那么敌手B也可以攻击方案2,这已经被证明是安全的或者是一个难题。
这个证明过程是用一个思考游戏来描述的。首先,挑战者创建方案2,其中B代表方案2中的敌手,A代表方案1中的敌手。为了破解方案2,B用A作为子程序攻击方案1。B要用A,需要训练A,所以B模拟A的挑战者。