复杂性理论提供了一种分析不同密码技术和算法的计算复杂性(computational complexity) 的方法。它对密码算法和技术进行比较, 然后确定它们的安全性。信息论就告诉我们, 所有的密码算法(除了一次一密乱码本) 都能被破译。 复杂性 理论告诉我们在宇宙包扎前它们能都被破译。
算法的复杂性即运行它所需要的计算能力。 算法的计算复杂性常常用两个变量来 度量: T(时间复杂性(time complexity)) 和S(空间复杂性( space complexity)),或所需的存储空间。
T和S通常表示为n的 函数, n是输入的大小(算法的计算复杂性还有其他许多度量尺度,: 随机位的数目、通信带宽、数据总量等)。
此处和通常意义上的算法复杂性区别不大。 通常用‘大O’ 表示:计算复杂性的量级。
用以上方法度量时间复杂性不依赖于系统。 这样, 就不必知道各种指令的精确时间,或用于表示不同变量的位数, 甚至连处理器的速度也不必知道。 一台计算机或许比另一台快50%, 而第三台或许有两倍的数据宽度, 但对一个算法的复杂性数量级而言是 一样的。
通常算法按其时间和空间复杂性进行分类。 如果一个算法的复杂性不依赖与n, 即为O(1), 那么它是常数的(constant)。 如果它的时间复杂性是 O(n), 那么它是线性的(linear) 。 有些算法开可分为 二次方的(quadratic) 、三次方的(cubic)等。 所有 这些算法都是多项式的(ploynomial), 复杂性可表示为O(n^m), 其中m是常数。
具有多项式时间复杂性的算法族称为 多项式时间 (ploynomial-time)算法.
若算法的复杂性为 O(t^f(n)) 的指数算法的子集 ,称为超多项式(superpdynomial)算法,其中c是一个常数, f(n) 是大于而小于线性的函数。一般来说 密码的攻击算法是超多项式时间复杂性的,但是还不能证明永远不会发现非多项式时间攻击算法。 或许某一天,计算复杂性的发展使得可能涉及这样的密码: 能以数学的确定性 排除 多项式时间攻击算法的存在(从而具有指数级的时间复杂性)。
当n增大时, 算法的时间复杂性能够显示算法是否实际可行方面的巨大差距。 下表给出了当 n等于 10^6时, 不同算法族运行时间。表中忽略了常数, 给出了忽略常数的原因。
| 族 |复杂性 |操作次数| 时间|
|常数的 |O(1) | 1 | 1微妙|
|线性的 |O(n) |10^6 |1秒|
|二次方的|O(n^2) | 10^12 |11.6天|
|三次方的|O(n^3) | 10^18 |32000天|
|指数的 |O(2^n) | 10^301030 |宇宙年龄的10^301006倍|
假定计算机的时间单位是 微秒, 那么这台计算机能够在1微秒内完成一个常数阶 的算法, 在1秒内完成一个线性阶的算法, 。。。。
现在来看密码系统的穷举攻击问题, 这种攻击的时间复杂性与可能的密钥总数成比例, 它是密钥长度的指数函数。 如果n是密钥长度, 那么穷举算法的复杂性就是 O(2^n).
穷举 DES 56位密钥的复杂性是 2^56, 而对于112位密钥, 其复杂性是 2……112. 前一种可能被破译,后一种是绝对不可能被破译的。
复杂性理论同时也对问题的内在复杂性进行分类, 这并不同于解决问题的算法复杂性。 这个理论可看到 称为图灵机(Turing machine)的理论计算机基础上解决最难的问题实例所需的最小时间和空间。
能够用多项式时间算法解决的问题称为 易处理(tractable),因为它们能够用适当的输入大小, 在适当的时间开销内解决(“适当的”的精确定义取决于实际情况)。不能在多项式时间内解决的问题 为 难处理(intractable)问题。
问题分成一些复杂性类型, 它取决于解法的复杂性。
在底层, P类包括所有能用多项式 时间解决的 问题,
NP类包括所有在非确定型图灵机上可用多项式时间解决的问题。
非确定型图灵机是标准图灵机的变形, 它能进行猜测。
此机器通过“幸运猜测”或 平行尝试 猜测所有可能问题的解, 然后在多项式时间内检查他的猜测。
NP问题与密码学的关系如下:
许多对称算法和所有公开密钥算法能够用非确定型的多项式时间(算法)进行攻击。 如果一直密文C, 密码分析者 简单地猜测一个明文X和一个密钥K,然后在输入 X 和 K 的基础上, 以多项式时间运行加密算法, 然后检查结果是否 等于C。 这在理论上很重要, 因为它给出了对于这类时间运行的加密算法,密码分析复杂性的上限。
NP类 包括P类, 因为任何在确定型图灵机上用多项式时间算法可解决的问题, 在非确定型图灵机上用多项式时间(算法)也是可以解决的,因为猜测阶段可以简单地省略。
如果所有NP问题在确定型图灵机上用多项式 时间(算法)是可解决的, 那么P = NP。
这里涉及到一个概念, 可****满足性问题。 (可满足性问题是指 给出一个命题的布尔公式, 有队变量赋值, 使公式为真的方法)。
Steven Cook 证明了可满足性问题 是NP完全(NP-complete)问题。
可满足性问题在多项式时间(算法)是可解决的, 那么 P = NP。相反,如果NP中 的任何问题能够被证明没有一个确定的多项式时间算法, 被证明就讲给出满足性问题也没有一个确定的多项式时间算法。 因此, 可满足性问题在NP 中使最难的 问题。
其他还有 PSPACE 和 PSPACE-完全(PSPACE-complete)问题以及更更困难的 EXPTEME问题和 EXPTEME完全问题。
2.3 NP完全问题
Michael Gareg 和 David Johnson编辑了一份300多个NP完全问题(NP-complete)的目录, 此列出其中一些: