(三)安全性

安全性

信息安全性

从信息论角度来看,信息安全性并不取决于破译密码的难度,而取决于密码到底能否被破译,这个破译是不计代价与成本的。即使拥有无限的计算时间和无限内存,密码还是不能被攻破,这时我们才说该密码具有信息安全性,也叫无条件安全性。这意味着,即使成功破解密码需要花费数万亿年,该密码在信息上也是不安全的。

一次一密机制具有信息安全性。因为其每一个明文对应一个密钥,即使尝试所有可能的密钥,也会得到同样数量的明文,无法分辨哪个是正确的密钥,也就无法分辨哪个是正确的明文。

计算安全性

对于一个给定的密码算法,如果在合理的时间内,使用合理的资源(如内存、硬件、预算、能量等),都不能被攻破,那么就将该算法视为计算安全的。计算安全性是量化密码或任何加密算法安全性的一种方法。

计算安全性可以表达为两个变量的表达式,这两个变量是:

t,攻击者可以执行的操作数量的上限。

ε,攻击成功的概率的上限。

对一个密码方案来说,如果攻击者最多能执行t个操作(不管这些操作具体是什么),并且攻击成功的概率还不高于ε,那么该密码方案就是(t,ε)-安全的,其中ε是概率,介于0和1之间。计算安全性给出了破解密码算法的难度的一个下限。

如果密码是(t,ε)-安全的,那么没有攻击者能够在执行少于t次操作的情况下,获得概率为ε的成功率。但这并不等于说攻击者恰好执行 t 次操作就一定会成功,无法知道到底需要多少次操作才能成功,这个操作次数可能比 t 大得多。我们说 t 是攻击算法所需的计算量的下限。

对于1到2^n之间的任意t,一个n比特密钥的密码至多是(t,t/2^n)-安全的,因为无论密码设计得多么强大,暴力攻击总会成功。因此,实际中关键在于抵抗暴力攻击的时间需要足够长。

用比特度量安全性

 n比特安全  指攻破某些特定的安全性概念需要大约2^n次操作。

一个n比特的密钥最多能提供n比特的安全性。

当安全强度可能小于密钥长度,原因有两个:

1. 一种攻击使用了比预期更少的操作成功破解了密码。例如,通过尝试并非所有的2^n个密钥,而是它的一个子集这一方法来恢复密钥。

2. 与大多数公钥算法一样,密码的安全强度与密钥长度是不同的。例如,具有2048比特密钥的RSA算法提供的安全强度低于100比特。

全攻击成本 

并行性

现在考虑两个攻击,每个攻击都需要2^56次操作。

第一个攻击需要执行2^56次顺序相关的操作,计算函数为x(i+1)=fi(xi),当前值依赖前面的值;第二个攻击执行2^56次独立的操作,计算函数为xi=fi(x),这些操作相互独立意味着可以并行执行,假设有2^16=65536个处理器,则每个处理器只需要处理2^40次操作,这样,由于第一个攻击不能并行,所以第二个攻击比第一个快65536倍。

当有n个核可用时,攻击速度快n倍的算法被称为并行算法,其执行时间与计算核心的数量是线性关系。

内存

对于一次攻击,需要考虑执行多少次内存的查找,内存的访问速度,数据大小,访问模式(连续或者随机)、数据结构。

预计算

预计算操作是那些只需要执行一次就可以在后面的攻击时被重复使用的操作,有时被称为攻击的离线阶段。

以时间内存折中攻击为例,在实施此攻击时,攻击者首先执行大量的计算,生成一些大型查找表,然后将这些表存储起来,以便在实际攻击中重用。

例如,对2G移动加密的一次时间内存折中攻击中花费了两个月的时间来构建2MB的表,然后在实际的2G移动加密攻击中,这些表被重用,最终秘密会话密钥可以在几秒内被恢复。

目标数量

目标数量越多,攻击面就越大,从而攻击者可以了解到更多关于他们想要的密钥的信息。

现在考虑使用暴力搜索:如果目标是一个n比特密钥,则需要2^n次尝试才能保证一定能找到正确的密钥。但是如果攻击目标是多个n比特密钥,比如共有M个n比特密钥,并且对单个明文P,攻击者获得M个不同的密文,这M个不同的密文是通过对明文P用M个n比特密钥加密得到的,即密文C=E(K,P),其中K遍历攻击者想要获得的每一个密钥。为了破解这M个密钥中的每一个,攻击者仍然需要2^n次尝试。但是,如果攻击者不是对M个密钥中的每个都感兴趣,只对M个密钥中的至少一个感兴趣,那么平均需要2^n/M次尝试就能成功。例如,攻击目标是2^16=65536个128比特密钥,要破解其中的一个将需要平均2^(128-16)=2^112次计算。也就是说,攻击的成本随着目标数量的增加而降低。

评估安全强度

安全强度的选择通常是在128比特安全性和256比特安全性之间进行的,因为大多数标准加密算法和实现对于实现这两个安全强度都是可行的。确实也会有低于128比特的密码方案,比如是64比特的或80比特的,但这些方案通常都不够安全,不足以满足实际需要。

128比特的安全性意味着攻破该加密系统需要执行大约2^128次操作。现在以天河二号运行速度为例,大约每秒2^54次浮点运算,每年大约是2^24秒,假设我们能搞到2^20台天河二号进行并行计算,还需要2^30年才能算得,这大约是10亿年。

评估安全强度时要考虑的另一件事是技术的发展。摩尔定律认为计算效率大约每两年翻一番。可以认为这意味着每两年会丢失一点安全性:如果今天1000美元的预算允许您用一小时的时间破解40比特密钥,摩尔定律告诉我们,两年后,相同的1000美元预算,您就可以一小时内破解41比特密钥。这意味着,我们在80年里将减少40个安全比特。换句话说,在80年后做2^128次操作的成本可能与今天的2^88次操作的成本相当。考虑到并行性和多个目标,那么80年后我们做2^128次操作的计算时间将减少到2^48纳秒,或者大约三天。但这种推断是非常不准确的,因为摩尔定律正在逐渐失效,集成电路的精度已经快接近极限。不过今天看起来不可行的东西在一个世纪后可能会成为现实。

有时候低于128比特的安全强度也是合理的。当只需要短时间的安全性,例如现在的手机验证码,一般只有6位,失效时间30秒。

不过,为了确保长期的安全性,应该选择256比特的安全性或接近256比特的安全性。即使在最坏的情况下,256比特的安全方案在可预见的未来也不太可能被攻破。

目前也有512比特的方案。

安全性的实现

可证明安全性

可证明安全性是证明破解选用的密码方案至少和解决另外一个已知的困难问题同等困难。这样的安全性证明保证了只要困难问题仍然存在,密码就是安全的。这种证明被称为归约,它来自复杂性理论。如果有解问题X的方法就能得到破解某个密码的方法,我们就说破解该密码算法可以归约到问题X。

与数学问题相关的证明

许多安全性证明(例如,公钥密码的安全性证明)表明,破解密码方案至少与解决一些数学难题一样困难。这里所说的难题是指:已知该问题确实有解,验证一个给定值是否是解是容易的,但对该问题求解是困难的。

以因数分解问题为例,大数分解是密码学中著名的数学问题。具体来说,这个问题是:已知一个数是两个素数(n=pq)的乘积,在给定数n的情况下,要找到素数p和q。例如,如果n=15,则答案为3和5。这对于小数是很容易的,但随着数字变大,它的求解难度会呈指数级增加。例如,如果数字n是3000比特长(约900位的十进制数)或更大,则认为因数分解实际上不可行。

RSA是著名的依赖于因数分解困难问题的密码方案:RSA通过计算C=(P^e) mod n来加密明文P,其中,e和大数n=pq是公钥。通过P=(C^d) mod n来解密,其中d是与e和n有关的私钥。如果可以分解n,那么我们可以通过从公钥中恢复私钥来破解RSA;如果有私钥,那么我们可以分解n。换句话说,恢复RSA私钥和分解大数n是等价的困难问题。这就是我们在可证明安全性方面所寻求的归约。但是,不能保证恢复RSA明文与分解n一样困难,因为明文的信息不会泄露私钥。

与密码问题相关的证明 

将一个密码方案与与另一个密码方案进行比较,并证明只有当破解第一个密码方案时,才能破解第二个密码方案。对称密码的安全性证明通常遵循这种方法。

例如,现在只有一个置换算法,那么可以通过对各种类型的输入调用该置换,来构造对称密码、随机比特发生器和其他密码对象。然后证明如果置换是安全的,那么基于置换构造的新方案也是安全的。换句话说,新构造的算法并不比原来的算法弱。这种证明通常是通过在较小规模上进行攻击来实现,也就是说,对于正常规模的攻击,是通过归约来实现的。

注意事项

安全性证明的存在并不能保证该密码方案是完美的,安全性证明不应被视为安全的绝对保证,有很多问题可能导致“可证明安全性”的密码方案是不安全的。

其中一个问题在于“安全性证明”本身。数学中的证明是绝对真理的证明,而密码学中的证明只是相对真理的证明。例如,一个能证明破解密码和计算离散对数一样困难的证明——离散对数问题即在给定数g和(g^x)mod n的情况下求解数x,如果一个密码被攻破,其他很多密码也会被攻破。

需要注意的是,安全性证明通常是针对一个安全性概念来证明的。例如,证明破解密码的私钥和分解问题一样困难。但是如果能在没有密钥的情况下从密文恢复明文,那么恢复密钥几乎不重要。

另一个重要的考虑因素是,数学难题有时比预期的更容易解决,不能保证密码算法在某些极端情况下不容易破解。

 启发式安全性

可证明安全性是获得密码方案信任的一个很好的工具,但它不适用于所有类型的算法。事实上,大多数对称密码并没有安全性证明。例如,每天我们都依赖AES来安全地使用我们的手机、笔记本电脑和台式电脑进行通信,但是AES并不能被证明是安全的;因为没有证据表明它可以归约到一些众所周知的困难问题。AES既不与数学问题相关,也不与其他密码问题相关,因为它本身就是一个难题。

在可证明安全性不适用的情况下,信任这个密码的唯一理由就是因为许多技术人员试图攻破密码但都失败了,这有时被称为启发式安全性

我们可能永远无法确定一个密码算法是安全的。但是当成百上千的经验丰富的密码分析者每人都花费成百上千小时试图去破解算法并公布他们的研究结果时——这些研究结果通常是针对简化版本的密码算法的攻击(通常是操作更少或轮数更少的版本,这里的“轮”是指密码的一系列简短操作构成的迭代,它将比特混合在一起),我们可以确信这个算法不会被攻破。

在分析一个新的密码算法时,密码分析者首先尝试破解一轮,然后两轮、三轮或尽可能多轮。安全冗余就是总轮数与成功攻击的轮数之间的差异。当经过多年的安全性研究后,如果这个密码算法的安全冗余仍然很高,我们就相信它(非常可能)是安全的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值