密码学笔记(6)——复杂度及其相关内容
密码学的笔记是从RSA密码体制开始的,上面的5篇差不多把RSA的基本内容介绍的差不多了。这个学期开始我选了一门叫做《应用密码学及其算法分析与复杂性》,一共上10周,到4月底课程结束,到那时候我的毕业论文也做的差不多了,因此这部分的内容是和课程同步的。
应用密码学的基础来源于算法,因此首先需要回顾一下算法的几大特性。
Thm1 (算法的特性)
(1) 输入:一个算法有零个或多个外部量作为算法的输入。
(2) 输出:一个算法有一个或多个输出,但至少要有一个输出。
(3) 有穷性:算法中的每条指令的执行次数有限,执行每条指令的时间也有限,即不能是数学意义上的有限。
(4) 确定性:算法中的每一条指令必须有确切的含义,不存在二义性,并且在任何条件下,对于相同的输入只能得到相同的输出。
(5) 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
接下来自然就要引入算法的复杂度概念啦~
Def2 (算法的复杂性与复杂度)算法的复杂性是算法运行所需要的计算机资源的量,其中时间资源的量称为时间复杂性,空间资源的量称为空间复杂性。定量的说,给定正整数k,它表示一个确定问题输入数据量的大小或输入长度,统称为问题的计算规模。
算法的时间复杂度是指:从输入数据到计算出结果所需的时间,它是k的函数。
算法的空间复杂度是指:为完成算法最多需要的计算机存储量,它是k的函数。
P.S.:对于空间复杂度,通常可以理解为内存单元以及磁盘单元。
为了表示算法的时间复杂度以及空间复杂度,我们需要引入一些数学记号,注意这里和高等数学中的无穷小记号非常相似。
Thm3 (算法的渐近分析)引入渐近意义下的记号:O、Ω、θ、o,设f(N)和g(N)为定义在正数集上的函数以及正函数。
(1) O的定义:如果存在正的常数C和自然数N0,使得当N≥N0时有|f(N)|≤Cg(N),则称函数f(N)当N充分大时上有界,且g(N)是它的一个上界,记作f(N)=O(g(N)),即f(N)的阶不高于g(N)的阶。
(2) Ω的定义:如果存在正的常数C和自然数N0,使得当N≥N0时有|f(N)|≥Cg(N),则称函数f(N)当N充分大时下有界,且g(N)是它的一个下界,记作f(N)=ω(g(N)),即f(N)的阶不低于g(N)的阶。
(3) o的定义:对于∀ ϵ>0,都存在正整数N0,使得当N≥N0时有|f(N)|g(N)≤Cϵ,则称函数f(N)当N充分大时的阶比g(N)低,记为f(N)=o(g(N))。
(4) θ的定义:g(N)的条件可以降低为未必是正函数,f(N)不变,称f(N)=θ(g(N))当且仅当|f(N)|=O(|g(N)|)且|f(N)|=Ω(|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)≤θ(p(k))均不成立,称算法为非有效算法。通常的例子是O∗(ak)、O∗(k!)、O∗(kk),其中a>1。
(3) 密码学中存在的一类特殊时间复杂度的算法,介于多项式时间和指数时间之间的算法,时间复杂度为O∗(Lk(a,b))=ebka(lnk)1−a经常体现在一些带有谕示器的算法中。
P.S:算法复杂度的不等式表示O∗(1)<O∗(k)<O∗(k2)<……<O∗(ks)<O∗(kslog(k))<O∗(ks+1)
O∗(ak)<O∗(k!)<O∗(kk)
有了上述关于算法的概念,我们可以给出密码学的定义及其应用了。
Def5 (密码学的定义与应用)密码学是研究信息的变形、隐蔽和合法复现,以防止第三方窃取信息的一门科学。
服务于应用密码学的密码术是建立于算法复杂度的基础之上的,它能否实现的根本原因是有效算法与非有效算法的不对称性,使用密码术的一方可以在多项式时间内完成变形、隐蔽和合法复现等工作,但敌手的非法复现只能在超多项式时间甚至指数时间内完成。
密码学中的算法与普通算法有明显的不同是对于随机工具的使用,之前寒假阅读到Elgamal密码体制以及后面的签名方案、身份识别方案、密钥分配方案、密钥协商方案无一不需要真正随机数的生成。比如为了验证公钥,Bob需要选择一个随机数,计算离散对数,连同自己的证书发给Alice,Alice也同时做同样的操作,发送给Bob,进而Bob计算一些式子后发送响应y,Alice需要验证响应y是否满足离散对数,从而确定是否接受Bob。
现在将算法分别为m步,每一步给定一个状态si,以及对应的时间ti,记为(si,ti),将其与m位的0-1随机比特串ri相关联。那么算法的分支总数就是2m个,敌手在穷举的时候就是指数级时间,将这个比特串作为密码的密钥,加密和解密的算法就是概率多项式时间算法。
最后介绍一下之前已经讲过的单向函数与陷门单向函数的定义。
Def6 (单向函数)变换F:x⟶y或函数y=F(x)称为单向变换函数是指已知x求y很容易,反过来已知y求x是计算不可行的。
注意这里的计算不可行是指现有计算资源无法在有效时间内计算出结果,而不是说无法计算出结果。比如RSA的大数分解以及离散对数问题。
Def7 (陷门单向函数)陷门单向函数是指对于单向函数F:x⟶y,嵌入一个陷门参数λ,当知道λ的值时,已知y求x是一个多项式时间算法问题,而不知道λ的值时,已知y求x是一个计算不可行问题。
比如在RSA的大数分解问题中,如果已知大数n的欧拉函数值ϕ(n),那么计算它的分解是一个多项式时间的问题。
以上是第1周第1节课的内容,周五上完第2节课后会更新内容~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步