百度网盘提取链接:https://pan.baidu.com/s/1ZeoX3Eoq_ITeFZq8FL0-TQ?pwd=5d7g
提取码:5d7g
网站上传图片太麻烦了(o;TωT)o
密码学导论复习笔记
第一章课件
- 移位密码(将字母整体向前向后移动):
凯撒密码就是一种移位密码
- 代换密码(把一个字母代换成另一个字母):
移位密码是代换密码的一种特殊情况
- 科尔霍夫原则(Kerckhoff)
密码系统的安全性并不依赖于加密算法的保密,而是依赖于密钥的安全性
- 典型密码攻击:
唯密文攻击:敌手只拥有几个密文串
已知明文攻击:敌手拥有几个明文串以及与之对应的密文串
选择明文攻击:敌手可以自由选择几个明文串并获得与之对应的密文串
选择密文攻击:敌手可以自由选择几个密文串并获得与之对应的明文串
- 代换密码的解密:
词频分析法
- 仿射密码:
移位密码就是仿射密码中a=1的特殊情况
仿射密码是代换密码的一种特殊情况
那么就会有多个明文对应于同一密文的情况出现。并且a没有逆元了。
- 维吉尼亚密码:
维吉尼亚密码就是移位密码的m阶形式
- 维吉尼亚密码的唯密文攻击:
两个方法:Kasiski测试法、重合指数分析法
- 希尔密码:
- 置换密码: 明文之间互换位置
第二章课件
- 无条件安全:
即使攻击者有无限的资源,也无法攻破密码体制,那这个密码体制就是无条件安全的。
无条件安全又被称为完善保密
- 加密方案:
任何加密方案都包含三步:
- 生成密钥
- 加密
- 解密
- 无条件安全的定义:
即知不知道密文对猜测明文没有帮助,即无法从密文获得明文的任何信息
- 代换密码是无条件安全的吗?
单表代换一定不是无条件安全的
多表代换有可能是无条件安全的
当不知道密钥长度时,多表代换是无条件安全的
知道密钥长度时,多表代换不是无条件安全的
- 无条件安全的等价定义:
若
则
并且
换言之,就是无法从密文获得明文的任何信息
或者说,敌手无法区分一个密文是由两个明文中的哪一个加密而来的
- 香农定理:
香农定理的通俗理解:要实现完善保密(无条件安全),那么密钥的长度一定要大于等于明文的长度
- 计算安全:
攻击者具有有限的资源,很难攻破密码体制,那我们就称这个为计算安全的
有限的计算资源指敌手是概率多项式时间(PPT)的算法
很难攻破密码体制指敌手成功的概率是一个可忽略函数
与完善保密(无条件安全)的区别:
- 攻击者能力有限
- 攻破密码体制很难,但也不是完全没有可能
第三章课件
- 根据科尔霍夫原则(Kerckhoff) ,加密体制安全性依赖于对密钥k的保密性
- 伪随机数发生器的性质:
(1)扩展性:扩展随机数长度使之与明文长度相同。
(2)伪随机性:无法区分一段伪随机数发生器生成的随机数和一段真正的随机数
- 定理:如果是由伪随机数发生器生成的随机数进行加密,那么加密算法就是计算安全的。
如何证明这个定理?用规约的方法。
假设这个加密算法不是计算安全的,然后进行倒推,最后推出来发现伪随机数发生器生成的随机数不满足伪随机性。产生矛盾,所以这个加密算法计算安全。
但是这个加密算法并不能抵抗选择明文攻击
4.任何确定性的加密算法都不是在选择明文攻击下安全的
确定性算法指的是:同一个明文经过多次加密,得到的密文是相同的
所以,要实现选择明文攻击安全,就必须要引入随机数,使得一次一密。
5.流密码加密算法例子:
祖冲之(ZUC)加密算法是一个同步序列加密算法。
- 序列密码就是流密码
- 一次一密算法是完善保密的。
第四章课件
- 流密码:
利用伪随机数发生器,生成一段与明文等长的密钥,与明文异或得到密文
流密码算法的安全性依赖于伪随机数发生器的伪随机性
- 分组密码:
先对明文进行分割,然后利用伪随机数函数对每一段明文进行加密
伪随机数函数:
算法一般使用混乱与扩散技术,以实现伪随机数函数
伪随机数函数类似于伪随机数发生器,但不需要扩展长度
分组密码的安全性依赖于伪随机函数的伪随机性
- 伪随机数函数与真正的随机数函数:
伪随机数函数共有2n种映射
真正的随机数函数有
种映射
定义伪随机数函数:如果一个PPT的算法无法区分伪随机数函数与一个真正的随机数函数,那么这个就是伪随机数函数。
- 分组加密算法的构造:
构造方法有两种,分别是代换-置换网络(SPN)和菲斯特尔网络(Feistel)
雪崩效应:
明文或者密钥的某一比特发生变化,会导致密文的很多比特发生变化
加密算法要引起雪崩效应,才能说明算法构造完成
- 分组加密算法例子:
DES、AES、SM4
其中AES是SPN结构的
DES、SM4是Feistel结构的
- 常见的分组加密算法:
ECB:
但要注意,ECB不是唯密文攻击安全的,也不是选择明文攻击安全的
CBC、CFB、OFB、CTR、
- 本章需掌握方法:
用扩展的欧几里得算法求逆
例子:
第五章课件
- 安全有三方面:
- 保密性:敌手无法从密文中获取明文的任何信息
- 完整性:接收方在收到消息后可以验证消息是否被篡改
- 不可抵赖性:发送方无法抵赖说消息不是自己发送的
保密性的实现是通过加密
完整性的实现是通过消息认证码(MAC)
不可抵赖性的实现是通过身份认证和数字签名,身份认证和数字签名也可以实现完整性。
- 消息认证码算法包括三步:
- 生成密钥
- 对消息生成MAC标签
- 验证标签
- 消息认证码的攻击实验:
先获取一大堆消息和与之对应的MAC标签,然后试试看能不能自己生成一个没出现过的消息和与之对应的MAC标签,若成功生成了,那么攻击成功
- 构造消息认证码的算法
(1)采用分组加密算法
一般采用CBC加密模式
先看CBC加密算法:
再看CBC-MAC算法:
(2)也可以采用hash(哈希)函数生成消息认证码
5. hash(哈希)函数
三个性质
强碰撞更容易找到,因为只要找到一个弱碰撞,即找到另一个M使得他的哈希值与另一个M的哈希值相同的话,我们也就找到了一个强碰撞
所以强碰撞更难抵抗,对消息hash函数的安全性要求更高
三者关系如下:
- 生日攻击
生日攻击本质上是为了找到一对强碰撞
- 如何构造hash函数
- M-D(Merkle-Damgard)结构
- 海绵结构(Sponge)
- 安全hash算法
- SHA-1:采用的是MD结构
- SM3(我国研发的算法):采用的也是MD结构
- 利用杂凑函数构造MAC方案
- 直接用hash函数生成
即
,但这种方案不安全
- NMAC
- HMAC
- MAC算法的另一个伟大用途——抵抗选择密文攻击(CCA)
通俗原理讲解:先找一个能抵抗选择明文攻击(CPA)的加密方案,然后对这个方案进行略微修改,即在原先的密文后面加一个密文的MAC值,这样攻击者就无法创造密文(为什么攻击者无法创造密文了?因为创造密文的MAC值需要用到私钥,攻击者没有私钥),直接把攻击者发送密文的能力废掉,使攻击者的能力降低为选择明文攻击
- 若方案是CCA安全的,且攻击者无法制造密文,则称此方案为认证加密方案。
- 认证加密模式
- OCB
- GCM
第六章课件
- 对称加密与非对称加密:
对称加密指加密密钥与解密密钥相同
非对称加密指加密密钥与解密密钥不同,加密密钥是公钥,是公开的,解密密钥是私钥,是保密的
- 公钥密码体制是一种陷门单向函数
- 重要数学知识
扩展的欧几里得算法(必须要掌握,后面要一直用到)
如何判断一个数是否为生成元?
- RSA
为什么要求e和欧拉函数φ(n)互素?
因为不互素的话,e就没有逆元d了。
RSA的安全性是基于大正整数分解这一数学难题的,因此n=pq一定要足够大
如何提高RSA的效率?
- 平方-乘算法
- 蒙特卡洛算法和拉斯维加斯算法
蒙特卡洛算法:一定能得到解,但解不一定正确
拉斯维加斯算法:不一定能得到解,但得到的解一定正确
偏是的蒙特卡洛算法:
当回答是的时候:解一定正确
当回答否的时候:解不一定正确
特殊的:Miller-Rabin算法对于合数是一种偏是的蒙特卡洛算法
因为当Miller-Rabin回答一个数是合数的时候,那说明它就找到了那个数的一个因子,所以这个数就一定是合数
但是Miller-Rabin对于素数来说是一种偏否的蒙特卡洛算法
因为当Miller-Rabin回答一个数是素数的时候,它可能只是没有找到那个数的因子,因此这个数有可能还是合数
- 二次剩余
若a是二次剩余,则a=y2有解
比如说4就是二次剩余,因为4=(+-2)2
- 欧拉(Euler)准则
- 在公钥密码学中EAV和CPA的强度是一样的,因为公钥是公开的
- 对RSA的攻击
- 中国剩余定理
例子:
- Rabin
n=pq
为什么p和q是私钥,要保密?
因为解密的时候要用到p和q
怎么解密?用中国剩余定理,下面给出一个例子
假设n=21,p=3,q=7
接收方收到密文为16
最终解密出来四个答案:4、10、11、17
所以明文中要有冗余信息,来告诉我们到底是四个中的哪一个
- RSA和Rabin都是基于大整数分解难题的
- 为什么非对称加密算法比对称加密算法慢?
这是因为对称加密主要的运算是位运算,速度非常快,如果使用硬件计算,速度会更快。但是非对称加密计算一般都比较复杂,比如 RSA,它里面涉及到大数乘法、大数模等等运算。
第七章课件
- ElGamal是基于离散对数问题的
椭圆曲线上的ElGamal是基于椭圆曲线上的离散对数问题的
- ElGamal
- Diffie-Hellman问题
- 计算Diffie-Hellman(CDH)
- 判断Diffie-Hellman(DDH)
- ElGamal安全性
- ElGamal的解密
- 群、环、域
- 椭圆曲线
解的情况:
椭圆曲线上点的性质,每一个点都是生成元
- 椭圆曲线上的ElGamal
第八章课件
- 数字签名算法包括三个子算法
- 生成密钥
- 签名
- 验证
- 攻击类型
- 唯密钥攻击
- 已知消息攻击:
攻击者拥有一些消息的签名
- 选择消息攻击:
攻击者可以自由选择一些消息的签名
- 攻击目标
- 选择性伪造:
可以创造出任何消息的签名
- 存在性伪造:
可以伪造出一个消息的签名,但是这个伪造出来的签名可能没什么用
- 能够抵抗选择消息攻击的定义:
攻击者可以自由选择一些消息的签名,但是无法伪造出没有查询过的消息的签名
- 数字签名是为了保证不可抵赖性,所以数字签名算法都是用发送者的私钥进行签名,由接收方用公钥进行验证,这点和加密刚好反了
- RSA签名算法
但是这个方案明显是错误的,因为公钥是大家都知道的,所以很容易伪造签名
因此我们就可以借用hash函数的单向性,对hash(x)进行签名
RSA签名方案是用消息的哈希值去签名,而不再是直接用消息去签名了。
- ElGamal签名方案
- 由于ElGamal签名中有随机数,所以ElGamal签名方案是非确定性的
- 数字签名算法(DSA)
- Schnorr签名算法
- 椭圆曲线数字签名算法(ECDSA)
注:这些签名算法都不用记具体算法步骤哈,考试会给出,只要知道怎么按照步骤算就行了
第九章课件
- 数字证书有什么用?
举个例子,当我向你发送一个公钥的时候,你怎么确定这个公钥到底是我的,还是其他人的
数字证书就是起到了这个作用,它将一个人的公钥与一个人的身份信息绑定在了一起
由一个权威机构用机构的私钥对你的公钥进行签名,形成一个证书。然后其他人想要验证这个公钥到底是不是你的时候,他就可以用那个权威机构的公钥对那个签名进行验证,验证成功,说明这个公钥就是你的
换句话说,数字证书就是起到了身份认证的作用,类似于我们生活中的指纹和身份证
- 数字证书的安全性
- 任何拥有权威机构(CA)公钥的人都可以验证数字证书的有效性
- 除了权威机构(CA)外,任何人都不能够伪造数字证书
- 因此,数字证书的安全性依赖于权威机构(CA)私钥的保密性
- 数字证书的应用
第十章课件
- 协议的定义
- 实体认证协议和消息认证码、数字签名的区别
目标不同:实体认证协议是为了确认实体身份
而消息认证码、数字签名是为了确认消息源
- 协议攻击的判定方式
因此,下图所示就不是一种协议攻击
C只对消息进行了存储和转发,类似于路由器,并不满足以上两条的任意一条
- 对称密钥—基于MAC
此种方案显然不安全,因为中间的敌手可以冒充A或者B
如图所示
若对此方案进行改进
此方案就是安全的
- 如何定义协议的安全性
如果一个敌手可以攻破此协议,那么这个敌手就可以攻破此协议中的算法。
但是因为之前已经证明过算法安全,故敌手不可以攻破此协议,协议安全。
- 双向实体认证协议
一个直觉上的方案
但是此方案是不安全的,如下图所示
对此方案进行改进
- 公钥环境下的挑战-响应方案
此协议是安全的
- 身份认证方案具体例子
Schnorr、Qkamoto、Guillou-Quisquater、GQ
第十一章课件
- 长期密钥
长期密钥指预先计算并安全存储的密钥,长期使用,可以是对称密钥,也可以是私钥。
- 会话密钥
会话密钥指每次会话中使用的密钥,会话结束就会把该密钥丢弃。
- 由于公钥体制相对于对称密钥加密慢很多,所以一般使用对称密钥加密。
- 密钥预分配
内容:TA 以一种安全的方式为网络中的每个用户“提前”分发密钥信息,注意密钥分发时需要一个安全信道。
本质:
4.1Diffie-Hellman KPS方案
本质是离散对数问题,基于CDH难解
4.2 Needham-Schroeder 会话密钥方案
注意:因为有第四第五步,所以此方案是显式密钥确认。
4.3已知会话密钥攻击的概念
敌手可以得到一些会话中的密钥,并借此推断出其他会话中的密钥。
所以如果要抵抗会话密钥攻击,就需要各个会话密钥彼此独立。
4.4Kerberos 密钥分配方案
相对于之前的NS(Needham-Schroeder)加入了密钥的有效期。
该方案也是显式密钥确认。
由于加入了L(密钥的有效期),所以此方案能抵抗会话密钥攻击。
4.5Bellare-Rogaway 方案
该方案是隐式密钥确认。
引入随机数是为了抵抗密钥会话攻击。
- 密钥协商
本质:不需要TA的参与,而是大家一起通过一个协议协商出密钥。
5.1Diffie-Hellman 密钥协商方案
该方案存在一个明显的中间人攻击
5.2简化的端 - 端密钥协商协议
通过加入签名抵抗中间人攻击
为什么能抵抗中间人攻击?
因为中间人没有U和V的私钥,无法伪造签名。
5.3MTI/A0 密钥协商方案
该方案引入了长期密钥
对该方案存在着一个三角攻击
6.群组密钥分配和群组密钥协商
特点:1.群组需要有共同的会话密钥
2.当某个用户加入/撤销时,TA 逐个对所有群组内的用户进行密钥更新
目标:一个新用户加入后看不到加入之前的消息;一个用户退出后看不到退出后的消息
6.1逻辑密钥树(LKH)
特点:每个叶子结点都知道它到根节点路径上的所有结点密钥
用户加入:
只需要更新新节点到根节点路径上所有节点的密钥
用户撤销:
逻辑密钥树(LKH)是无状态的
6.2无状态和有状态的定义
显然逻辑密钥树(LKH)不需要因为撤销一个用户而更新其他用户的密钥,所以是无状态的
6.3 Steiner 树
此方案也是无状态的,因为随着用户的撤销,并不是每个节点的密钥都要变化,可以是其路径上的祖先节点的密钥发生变化即可。
13.1
- 双线性配对具有如下性质:
双线性、非退化、可计算
13.2
- 代理重加密
14.1
- 比特承诺包括两个阶段
承诺阶段:发送方A选择一个比特b(0或1),并把能表示该比特的消息c发送给B
打开阶段:发送方A把能打开承诺的d和比特b发送给B,B用d打开承诺c,并与比特b进行比较,验证是否为比特b
- 隐藏性和绑定性
隐藏性:接收方B不能从消息c中获取关于比特b的任何信息
绑定性:发送方不能在打开阶段改变自己之前承诺的比特
因此,承诺阶段要满足隐藏性,打开阶段要满足绑定性。
注:1和2,老师说很有可能会考
- 散列函数方案
隐藏性在哪里得到保证?绑定性在哪里得到保证?如果不发送随机数会怎么样?如果只发送一个随机数会怎么样(并且第三步中不把r1发给B)?
- 因为哈希函数具有单向性,无法从H(r1||r2||b)中获取关于b的任何消息,所以保证了隐藏性。
- 因为第三步中发送了r1,如果A想要在打开阶段修改b的值的话,那他就要找到r2’||b’使得H(r1||r2||b)=H(r1||r2’||b’),而由于哈希函数是抗第二原象碰撞的,所以无法修改b的值,保证了绑定性。
- 由于b的值只有几种情况,那么B就可以将每个b的哈希值都计算出来,最终就能确定b,不满足隐藏性。
- 此时若A想要修改b的值,只需找到H(r1’||b’)=H(r1||b)即可,所以现在A只需要找到一组强碰撞即可,而找强碰撞是比找弱碰撞是要更加简单的,所以安全度会降低。
- 伪随机数发生器方案
隐藏性的实现:对B来说,c就是一串随机数,当然无法从c中获取m的任何信息
绑定性的实现:如图中分析
5.Pedersen承诺
隐藏性的实现:因为r是随机数,所以c对于B来说也是随机数,B无法从c中获取关于b的任何信息。
绑定性的实现:若A在打开阶段要改b的值,设gt=y,那他就是找到g(r+bt)=g(r+b’t)而该问题是基于CDL问题难解的