密码学笔记(6)——复杂度及其相关内容
密码学的笔记是从RSA密码体制开始的,上面的5篇差不多把RSA的基本内容介绍的差不多了。这个学期开始我选了一门叫做《应用密码学及其算法分析与复杂性》,一共上10周,到4月底课程结束,到那时候我的毕业论文也做的差不多了,因此这部分的内容是和课程同步的。
应用密码学的基础来源于算法,因此首先需要回顾一下算法的几大特性。
Thm1 (算法的特性)
(1) 输入:一个算法有零个或多个外部量作为算法的输入。
(2) 输出:一个算法有一个或多个输出,但至少要有一个输出。
(3) 有穷性:算法中的每条指令的执行次数有限,执行每条指令的时间也有限,即不能是数学意义上的有限。
(4) 确定性:算法中的每一条指令必须有确切的含义,不存在二义性,并且在任何条件下,对于相同的输入只能得到相同的输出。
(5) 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
接下来自然就要引入算法的复杂度概念啦~
Def2 (算法的复杂性与复杂度)算法的复杂性是算法运行所需要的计算机资源的量,其中时间资源的量称为时间复杂性,空间资源的量称为空间复杂性。定量的说,给定正整数k,它表示一个确定问题输入数据量的大小或输入长度,统称为问题的计算规模。
算法的时间复杂度是指:从输入数据到计算出结果所需的时间,它是k的函数。
算法的空间复杂度是指:为完成算法最多需要的计算机存储量,它是k的函数。
P.S.:对于空间复杂度,通常可以理解为内存单元以及磁盘单元。
为了表示算法的时间复杂度以及空间复杂度,我们需要引入一些数学记号,注意这里和高等数学中的无穷小记号非常相似。
Thm3 (算法的渐近分析)引入渐近意义下的记号:$O、\Omega、\theta、o$,设$f(N)$和$g(N)$为定义在正数集上的函数以及正函数。
(1) $O$的定义:如果存在正的常数$C$和自然数$N_{0}$,使得当$N \geq N_{0}$时有$|f(N)| \leq Cg(N)$,则称函数$f(N)$当N充分大时上有界,且$g(N)$是它的一个上界,记作$f(N)=O(g(N))$,即$f(N)$的阶不高于$g(N)$的阶。
(2) $\Omega$的定义:如果存在正的常数$C$和自然数$N_{0}$,使得当$N \geq N_{0}$时有$|f(N)| \geq Cg(N)$,则称函数$f(N)$当N充分大时下有界,且$g(N)$是它的一个下界,记作$f(N)=\omega (g(N))$,即$f(N)$的阶不低于$g(N)$的阶。
(3) $o$的定义:对于$\forall \ \epsilon > 0$,都存在正整数$N_{0}$,使得当$N \geq N_{0}$时有$\frac {|f(N)|}{g(N)} \leq C \epsilon$,则称函数$f(N)$当N充分大时的阶比$g(N)$低,记为$f(N)=o(g(N))$。
(4) $\theta$的定义:$g(N)$的条件可以降低为未必是正函数,$f(N)$不变,称$f(N) = \theta (g(N))$当且仅当$|f(N)| = O(|g(N)|)$且$|f(N)| = \Omega (|g(N)|)$,此时称$f(N)$与$g(N)$同阶,也可以写为$f(N)=O*(g(N))$
一些关于$O$的性质:
(1)$O(f)+O(g)=O(max(f,g))$
(2)$O(f)O(g)=O(f+g)$
在密码学中对于算法的时间复杂度分为三个部分,分别是有效算法、非有效算法、超多项式算法,依次给出它们的定义。
Def4 (算法的有效性)设一个算法的时间复杂度为$f(k)$,设一个正整数$s$
(1) 若f(k)=\theta (k^{s}),即时间复杂度与多项式同阶,称算法为多项式时间算法或有效算法。
(2) 若对任意一个多项式$p(k)$,对于$f(k) \leq \theta (p(k))$均不成立,称算法为非有效算法。通常的例子是$O*(a^{k})、O*(k!)、O*(k^{k})$,其中$a > 1$。
(3) 密码学中存在的一类特殊时间复杂度的算法,介于多项式时间和指数时间之间的算法,时间复杂度为$O*(L_{k}(a,b))=e^{bk^{a}(lnk)^{1-a}}$经常体现在一些带有谕示器的算法中。
P.S:算法复杂度的不等式表示$$O*(1)<O*(k)<O*(k^{2})<……<O*(k^{s})<O*(k^{s}log(k))<O*(k^{s+1})$$
$$O*(a^{k})<O*(k!)<O*(k^{k})$$
有了上述关于算法的概念,我们可以给出密码学的定义及其应用了。
Def5 (密码学的定义与应用)密码学是研究信息的变形、隐蔽和合法复现,以防止第三方窃取信息的一门科学。
服务于应用密码学的密码术是建立于算法复杂度的基础之上的,它能否实现的根本原因是有效算法与非有效算法的不对称性,使用密码术的一方可以在多项式时间内完成变形、隐蔽和合法复现等工作,但敌手的非法复现只能在超多项式时间甚至指数时间内完成。
密码学中的算法与普通算法有明显的不同是对于随机工具的使用,之前寒假阅读到Elgamal密码体制以及后面的签名方案、身份识别方案、密钥分配方案、密钥协商方案无一不需要真正随机数的生成。比如为了验证公钥,Bob需要选择一个随机数,计算离散对数,连同自己的证书发给Alice,Alice也同时做同样的操作,发送给Bob,进而Bob计算一些式子后发送响应y,Alice需要验证响应y是否满足离散对数,从而确定是否接受Bob。
现在将算法分别为m步,每一步给定一个状态$s_{i}$,以及对应的时间$t_{i}$,记为$(s_{i},t_{i})$,将其与m位的0-1随机比特串$r_{i}$相关联。那么算法的分支总数就是$2^{m}$个,敌手在穷举的时候就是指数级时间,将这个比特串作为密码的密钥,加密和解密的算法就是概率多项式时间算法。
最后介绍一下之前已经讲过的单向函数与陷门单向函数的定义。
Def6 (单向函数)变换$F:x \longrightarrow y$或函数$y=F(x)$称为单向变换函数是指已知$x$求$y$很容易,反过来已知$y$求$x$是计算不可行的。
注意这里的计算不可行是指现有计算资源无法在有效时间内计算出结果,而不是说无法计算出结果。比如RSA的大数分解以及离散对数问题。
Def7 (陷门单向函数)陷门单向函数是指对于单向函数$F:x \longrightarrow y$,嵌入一个陷门参数$\lambda$,当知道$\lambda$的值时,已知$y$求$x$是一个多项式时间算法问题,而不知道$\lambda$的值时,已知$y$求$x$是一个计算不可行问题。
比如在RSA的大数分解问题中,如果已知大数$n$的欧拉函数值$\phi (n)$,那么计算它的分解是一个多项式时间的问题。
以上是第1周第1节课的内容,周五上完第2节课后会更新内容~