信息安全技术
从杂碎开始笔记在概念性的地方的笔记会更简单一些
课程主要内容:
对称加密 公钥加密
消息认证码 数字签名
The joy of cryptography
参考 Dan Boneh
考试:70%考试 30%平时成绩
目的:
- 基本的密码算法及其应用
- 密码算法可证明安全思路
- 学习密码思维方式
- 工程实践中正确运用
GF(P)的生成元;GF(2^m)
二进制加法:进行异或操作即可
乘法:乘上之后模一个不可约多项式
两个困难问题【现代公钥密码技术的安全保障】:大数因数分解(两个很大的素数相乘,很难分解乘法的结果)和离散对数问题
考试
概念性
流密码
-
完美保密性(完美安全性):
任意 任意密文c,同一明文,消息加密后为c的概率相等。
-
PRG
- PRG安全性:定义统计测试算法A(输出0 伪随机,输出1 真随机),一个PRG G,一个真随机r;定义A对G的优势: 如果该优势 是接近1,表明A可以将G与真随机区分,反之接近0 表示不可区分
- PRG性质:
- 安全的PRG是不可预测的;
- 可预测的PRG一定是不安全的;
- PRG G的每一个bit都是不可预测的,则G是一个安全的PRG
-
不可区分:p1和p2不可区分可以说,对于任意有效的统计检测A,有p1,p2两种在{0,1}^n上的分布
-
语义安全性(one-time key)(完美保密性的减弱)
定义了两个实验,优势为在两个实验中输出1的概率的差,如果对所有有效的A语义安全优势 是可忽略的,则称之为语义安全的
- 注意:语义安全性,A只能给挑战者发送一次明文,只能询问一次密文,挑战者的密钥只使用了一次
- 语义安全性例子:可推断LSB的算法A安全性(从输出的角度)、OTP的安全性(从分布的角度)
- 流密码的语义安全性:如果G是一个安全的PRG,则基于G的流密码E是语义安全的。因为:对任意语义安全的对手A,总是存在一个PRG对手B,使得
- 详细证明看笔记
分组密码
-
分组密码性能与流密码性能对比(分组比流密码块):
- 3DES:分组大小64bit 密钥168bit(56*3)
- 3DES轮数:48(3*16)
- 3E((k1,k2,k3),m)=E(k1,D(k2,E(k3,m)))
- k1=k2=k3 3DES会变成single的DES
- AES:分组大小128bit 密钥128,192,256bit
- AES轮数:10
- 3DES:分组大小64bit 密钥168bit(56*3)
-
伪随机函数PRF:F:K*X->Y
-
伪随机置换PRP:E:K*X->X
- 存在确定、有效的算法E(k,x)
- E(k,*)是一对一的
- 存在有效的逆算法 D(k,y)
- PRP是一个输入空间=输出空间的PRF且它可以有效求逆
- AES是PRP(K*X->X;K=X={0,1}128);3DES也是PRP(K*X->X;X={0,1}64,K={0,1}^168)
-
安全的PRF、PRP:
- 安全的PRF:从所有X到Y的函数(Funs[X,Y])中选取一个函数F,和使用任意k生成的 是不可区分的(不存在A使得 是可区分的)
- Funs[X,Y]中的元素是Y的X次方;所有k对应的PRF集合的大小是K的大小
- 安全的PRP:从所有的由X到Y的一对一函数中选取一个函数F(Perm[x]),和使用任意k生成的 是不可区分的(不存在A使得 是可区分的)
- 3DES,AES都可以视作安全的PRP
- 重点:注意PRP是一对一的,不可能存在不同的输入x1,x2使得PRP的输出相等
- 安全的PRF:从所有X到Y的函数(Funs[X,Y])中选取一个函数F,和使用任意k生成的 是不可区分的(不存在A使得 是可区分的)
-
从PRF构建PRP:如果F是一个安全的PRF,则将PRF按照不同输入拼接(F(k,1)||F(k,2)…)成为一个PRP,则该PRP是一个安全的PRP
-
DES:key长度:56bits 分组大小:64bit
- 核心Feistel网络(看笔记);如果f是一个安全的PRF,则使用该f构造的3轮Feistel网络是一个安全的PRP( )
- DES是16轮的Feistel网络
- 输入64bits明文,首先进行初始置换
- 进行16轮Feistel网络(将密钥k扩展成16个k,k长度为48bit);其中有
- 64bit名为拆开称为两个32bit,对第一个32bit输入
- 首先将32bit扩展为48bit,与 异或
- 异或得到的结果分成8组,分别输入到S盒中查表,从6位置换为4位
- 4*8=32 将8组输出合并
- 将32bit移位到低位
前半段计算f函数的结果,移位到后半段
- 64bit名为拆开称为两个32bit,对第一个32bit输入
- 进行逆置换
- 输出64位明文
- S盒的选取需要注意:不能有线性函数的输出能以较大比例与S盒的输出重合
- 如果是线性,则很容易通过多个DES推出一个DES
- 如果是线性,则很容易通过多个DES推出一个DES
-
AES:密钥长度:128bit/192bit/256bit 分组长度:128bit
- AES使用代换置换网络(而非Feistel),该网络中每回合所有的位都会变
- AES步骤
- 先构造16字节4*4矩阵(将一个分组变成矩阵)
- 然后将矩阵和密钥异或
- 异或结果输入到轮函数
- 最后一个分组只进行字节代换和行变换,不进行列混淆,最后与密钥异或后输出结果
-
通过PRG构建PRF
- 如果G: 是一个安全的PRG,则可以通过如下方法构造一个1bit的PRF:将PRG输出一分为二,如果0,就输出PRG输出的第一个分片,如果是1就输出PRG的第二个分片
- 安全性证明:(看笔记,通过不断使用针对及替换即可)
- GGM PRF:令G: 是一个安全的PRG,则可定义F:
-
通过PRF构建PRP?
- 通过GGMPRF 构建一个安全的PRF,然后通过Luby-Rackoff theorem(使用该f构造的3轮Feistel网络)构造出的PRP是一个安全的PRP
-
PRF转换引理:
- 安全的PRP也是安全的PRF,在== |X| 足够大时==
- 引理:对于q次询问的敌手A, A对PRP E的优势与A对PRF E的优势的差的绝对值小于
- 推论:如果 |X|足够大,那么 是可忽略的,则,如果PRP是安全的,即A对PRP E的优势可忽略,可以推出A对PRF E的优势可忽略,因此PRP也是一个安全的 PRF
- 如果X不够大会怎么样?看4.1章节的例题:1bit PRP->PRF
AES应用
- ECB模式(电码本模式)
- 加密不同的m,ECB方法总是使用同一个key;导致m1=m2.c1=c2
- ECB不是语义安全的【如果明文分组超过1个分组】,证明:
Adv=1的攻击方法:
- 确定的CTR模式
- 是一个由PRF构造的流密码
- 如果F是一个安全的PRF,则E_CTR 是一个语义安全的加密方法,对任何有效的CTR敌手A,存在有效的对于PRF的敌手B,使得
- 多次使用的密钥(Many time Key)下的语义安全性【CPA安全】
- 区别:敌手可以看到多个由同一个key加密得到的消息(此前,一次密钥是只能看到一条用一个密钥加密的消息);选择明文安全:因为敌手可以询问多个明文
- 定义:敌手可以询问q组明文的加密,每次都要猜测挑战者加密的是第一个还是第二个明文
- CPA攻击下,如果相同的m总输出相同的加密结果,那么可以通过询问两个一样的消息来获得正确明文。因此一定要保证相同的明文加密两次,产生的密文是不同的。
- 方案1:随机化加密(明文中加一个随机值,但是需要注意,随机值选取空间一定要足够大,保证r不重复)
- 方案2:基于新鲜值加密(1.计数器作为新鲜值,可以在密文中隐藏新鲜值;2.随机选取新鲜值,需要附加在密文中)新鲜值空间也要足够大
- 基于新鲜值加密的CPA安全:
- CBC模式:
- 加密:
- 解密:
- CBC的CPA分析(安全性):
对一个可以询问q次的E_CBC攻击者A,存在一个PRP的敌手B,使得:
- 只有当 时,CBC才是安全的
- 可以根据 反推出 qL的大小
- 基于新鲜值的CBC:注意,需要有两个key(一个用来生成IV,一个用来AES加密),不然会导致攻击!!
- CBC模式需要padding
- CTR模式
- 顺序计数器模式:PRF的输入是IV,IV+1…,IV是随机选取的
- 计数器模式安全性引理:如果F是一个安全的PRF E是一个CPA语义安全的CTR
只需要 即可满足安全性【比CBC好】
- 计数器模式安全性引理:如果F是一个安全的PRF E是一个CPA语义安全的CTR
- 新鲜值模式:新鲜值不重复,IV=【高位,nonce;低位:计数器】
- 顺序计数器模式:PRF的输入是IV,IV+1…,IV是随机选取的
消息认证码MAC
目的:完整性
- MAC组成:两个算法:S;输出认证tag;V:验证完整性:0/1
- MAC的安全性:
- 攻击者目的:存在性伪造,创造新的合法消息;因此攻击者无法对新消息产生合法key,给定一个正确认证的消息,无法产生该消息的新的合法认证码/无法产生新消息的合法认证码
- 安全的MAC:
- 注意标签空间T不能太短,如果太短,攻击者可以有 1/|T| 的优势猜中正确的MAC;至少需要1/2^96位
- 基于PRF的MAC:
- 安全性计算:如果F是安全的PRF,且F的输出空间 |Y| 足够大,则由此PRF构造的MAC是安全的MAC
- 存在一个对于MAC的敌手A,且存在一个PRF敌手B,使得
- 证明(看笔记)
- 存在一个对于MAC的敌手A,且存在一个PRF敌手B,使得
- 截断基于PRF的MAC:如果有一个安全的PRF构成的MAC是安全的,输出n位,那么截断的MAC,输出w位也是安全的【当且仅当 1/2^w是可忽略的】
- PRF的输入对于一个长消息来说还是太短了,需要CBC-MAC和NMAC
- 安全性计算:如果F是安全的PRF,且F的输出空间 |Y| 足够大,则由此PRF构造的MAC是安全的MAC
- ECBC-MAC
- 需要两个key
- 通过PRP定义一个新的PRF:
- 如果没有最后一步…也会被选择明文攻击攻破,选一个分组大小n的消息, 获得认证消息,然后接长原来的消息,可以通过t,pt构造出合法的MAC
- 当 时,CBC-MAC安全
- NMAC
- 也需要两个key 通过级联函数实现
- 如果没有最后一步…会被选择明文攻击攻破【攻击者选一个消息为分组大小n的消息,获取其tag,再将这个消息变成n+1,那么可知最后一个分组与输入F的t,可以成功伪造t;具体看笔记】
- 当 时,CBC-MAC安全
- 随机化的RCBC
- 安全性:
- CBC MAC的填充:
- ISO标准:padding:末尾为0,填充开始的地方以1分割,避免歧义需要假填充
- NIST标准 CMAC:key=(k,k1,k2),如果正好不需要填充,需要异或上一个k2,如果需要填充,正常填充即可,且使用k1异或
- PMAC:
- 最后一个分组不加密,需要两个 key
- 一次性MAC
- 定义:
- one time mac举例,使用L+1次多项式用于生成消息(不像举例,ppt里自己看吧)
- 一次性MAC->many-time MAC
- 使用one time MAC构造可快速求得的many-time MAC
- Carter-Wegman MAC: ;其中,F是一个安全的PRF,S是一个oneTime MAC,r是一个随机值
- 总结
哈希函数
- 生日悖论:
- 哈希函数
- H:M->T 是一个哈希函数(|M|>>|T|,大空间到小空间)
- 碰撞:m0!=m1,H(m0)=H(m1)
- 哈希函数的抗碰撞:对任意有效算法A, 是可忽略的
- 通过抗碰撞构造MAC
- 如果有一个对于短消息生成认证的MAC,以及一个哈希函数(从大空间到小空间),可以构造一个新的MAC I。如果MAC安全,且H是康朋子的,那么这个MAC是安全的。长消息通过Hash变成短消息,再通过S输出消息认证码。
- 注意,H一定是抗碰撞的
- Merkle-Damgard
- 构造:h压缩函数 得到哈希函数H,需要填充(具体看笔记)
- MD抗碰撞定理:如果压缩函数h是抗碰撞的,由MD构造方法构造的H也是抗碰撞的
(证明看笔记,证明逆否命题)
- 构建安全的压缩函数
- 从分组密码制造压缩函数
- Davies-Meyer压缩函数:
- 从分组密码构造压缩函数
- Miyaguchi-Preneel: 以及
- 不安全的:
- 从分组密码制造压缩函数
- 从难解问题构造压缩函数:利用离散对数问题,但是很慢
- HMAC(从SHA-256)
- 注意:直接将k,m输入hash函数构造MAC是不安全的【攻破方法:】
- HMAC: ;ipad和opad分别是外部密码本,内部密码本
- HMAC是一个安全的PRF:1. HMAC压缩函数是PRF下可证明安全的;2.安全边界和NMAC一致
认证加密
- 认证加密是为了防止篡改攻击【提供保密性和完整性】,实现了选择密文攻击的安全性,认证加密可以推出CCA安全
- 认证加密:认证加密系统 (E,D)
- 为了安全性,必须提供:CPA攻击下的语义安全;密文完整性(攻击者不能构造一个可被正确解密的密文)
- 密文完整性 CI 的定义与认证加密的定义
- 多次询问之后发送一个密文c,且c解密之后没有报密文无效的错误(不会输出错误符号)
- (E,D)提供认证加密,当它是CPA攻击下语义安全的,同时它具有密文完整性CI
- 选择密文攻击安全 CCA安全
- 定义:【CPA+可无限询问明文】CPA询问(询问两个m,获得任意一个的加密);CCA询问(进行多次密文询问,并获得密文的解密值);输出CPA询问结果,是被加密了m0还是m1 E是CCA安全的,对所有有效算法A, 是可忽略的
- 分析:随机IV的CBC的CCA安全(看笔记)
- 如果(E,D)提供认证加密(AE),那么(E,D)是CCA安全的[证明看笔记]
- 认证加密不能防止重放攻击和测信道攻击(如,计时攻击)
- 认证加密定理:如果(E,D)是CPA安全的加密,(S,V)是安全的MAC,则先E后M总是安全的;先M后E可能对CCA不安全,但是如果加密算法是随机CTR(一次MAC)或者随机CBC,那么先M后C是安全的
- 注意,MAC必须要是安全的,不然攻击者会找到碰撞,导致获得一个密文后,总是能构造出正确解出的明文(例子看笔记)
- OCB:直接从PRP构造的认证加密;高效可并行【有省略】
杂项
- 密钥获取:一般来说会通过一个SK(从硬件随机数发生器或密钥交换协议生成)去通过密钥生成函数(KDF)获取多个密钥
- 密钥推到函数KDF:
- SK服从均匀分布
- 如果源密钥SK在K空间是均匀分布的,则可以通过一个PRF来输出一组key;通过CTX来区分不同的进程
- SK不服从均匀分布
- SK不服从均匀分布,那么PRF输出不能与随机函数不可区分(只有输入是均匀的,输出才会均匀,如果输入不均匀,输出也不均匀)
- 一般来叔输出是不均匀的(比如,密钥交换协议输出的K的子集可能是不均匀的,硬件生成的随机数可能是不均匀的)
- 解决方法1:先提取再扩展机制
- 先提取在扩展:HKDF(使用HMAC构造KDF)
- 基于密码的KDF
- 密码熵值太小,不能用在HKDF中,会被字典攻击攻破
- 需要使用盐值以及一个慢哈希函数 PKCS#5
- SK服从均匀分布
- 确定性加密:概念
- 确定性加密:总是将指定明文映射到同一密文
- 确定性加密不是CPA安全的:(相同CT映射到相同PT;明文空间小,可以构成一个字典,可以根据部分不变的密文来获得额外信息)
- 证明CPA安全:由于相同明文会加密成相同密文,因此会泄露信息(确定性加密对一般的CPA安全是不安全的)
- 证明确定性CPA安全:
- 确定性安全:增加条件:加密者永远不会加密相同的明文两次,即(k,m)对永远不会重复
- 可以每次从很大的空间中选取消息;或者使用某种消息结构使消息具有唯一性
- 证明:确定性CPA安全【要素:多次使用同一个k加密,所有的消息是不同的,询问多次之后最后猜测ci是左侧消息还是右侧消息】
- 确定性安全:增加条件:加密者永远不会加密相同的明文两次,即(k,m)对永远不会重复
- 有确定IV的CBC没有确定性安全
- 确定IV的计数器模式吧不是确定性CPA安全【攻击:通过异或后的值来判断】
- 构造确定性加密
- 方法1:合成IV
- 该方法构造的E是确定CPA安全的,因为msg是唯一的,因此所有的r是与随机数不可区分的,对一个以上的CPA分组较为适合
- 合成IV构造了密文的完整性(确定认证加密)
- 以SIV-CTR为例,即中间的加密算法换成CTR模式
- 如果F是安全PRF 从CTR得出的F_{CTR}是CPA安全的,由F和F_{CTR}构造的SIV-CTR提供确定性认证安全
- 方法1:合成IV
密钥交换
- key的管理:每个人各自存一个密钥,每个人需要O(n)个密钥;使用信任的第三方(TTP),每个人只需要一个key
- 密钥生成的玩具协议:抵抗窃听攻击但是不抵抗篡改攻击
- Merkle Puzzle
- 通过难解谜题让对方猜测
- 使用例子:
- Alice准备2^32个谜题,每个谜题都包含一个随机的p和 ,逐一发给bob;Bob选取一个随机的puzzle去解,(解法,应该是遍历整个p,看看哪个能解出正确的值)得到 ,然后把 $x_i $ 发给Alice;Alice把k_j作为密钥
- 时间差别:Alice和Bob都只需要O(n)的时间来准备/解决puzzle,但是窃听者需要O(n^2)来首先猜测Bob选中的puzzle,再解密puzzle
- 两者的gap: 和
- Diffie-Hellman 协议
- 协议描述
- 首先选择一个大素数p(如,600位),g(比p小的整数)
- 安全性:攻击者可见p,g,A和B,但是攻击者难以计算
- DH函数:
- 求解时间复杂度:最好的算法
- 比较椭圆曲线和模大小
- 中间人主动攻击
- 关于DH的开放问题(看笔记去吧)
- 协议描述
- 建立共享私钥
- 公钥加密定义:需要三个函数G,E,D(D可以输出解密结果或错误)
- 公钥加密的语义安全性(IND-CPA)
- 共享私钥的建立:收方用私钥解密
- 该方式是语义安全的:攻击者能看到pk,E(pk,x) 想获得x;但是由于x是随机值,因此攻击者无法区分x和真随机,因此不能获得x
- 但是这种方式对于中间人攻击是脆弱的
公钥加密RSA
上课透了::::注意公钥加密的CPA安全性的定义
mark:我想思考,公钥加密的CPA安全和普通CPA安全的区别?几个典型的攻击?
对称加密:有one-time 安全和 many-time安全(CPA);一次密钥安全和CPA安全之间是不同的,一次密钥安全不能推出CPA安全
公钥加密:一次安全可以推出CPA安全,这是因为攻击者知道pk之后就可以自己随意加密msg,这和CPA安全是一样的
公钥加密来说,G一定是随机的
- 公钥加密的CPA安全(看上一章节的最后一节)
- 公钥加密的CCA安全
- 定义:发起挑战之前/之后,可以多次解密自己想要的密文的明文,但是不能解密挑战密文。
- 一个攻击举例:
- 陷门函数
- 陷门函数定义:西安门函数包括三个函数
- 陷门函数的安全性:如果F是一个单向的函数,即计算容易但求逆难,那么陷门函数 就是安全的
- 使用TDF进行公钥加密 (G,E,D)
- 安全性定理:如果(G,F,F^{-1})是安全TDF,(E_S,D_S)提供认证加密,H:X->K是一个随机寓言机,那么(G,E,D)是CCA安全的
- 不能直接使用TDF加密:
- RSA陷门置换函数
- 之前的是理论,现在套上实际的一个TDF:RSA
- RSA陷门置换:加密:消息求e次方,解密:消息求d次方
- RSA假设:RSA是一个单向置换(对于不知道sk的人来说,求出e的逆元很困难)
- RSA公钥加密:
- 先用G生成e和d,然后随机选一个x,算它RSA的值y,y作为公钥一部分;然后对x值hash,hash之后的值放入对称加密作为加密的key-
- RSA"加密"x,自己再用这个x生成k,然后解密
- 直接使用RSA进行加密是不安全的;示例一个攻击:
- 攻击者可以进行类似中间相遇攻击的办法对教科书RSA进行攻击
- RSA是单向函数:
RSA问题:已知e^x(mod N) 求x;该问题的求解只能将N进行因子分解,但是因子分解是一个难解问题,因此RSA是一个单向函数- RSA最小的指数为3,即最小的e为3
- 错误提高RSA性能:不能使用小私钥来加快解密,使得指数计算缩短来让==>这样会导致私钥可以通过(N,e)计算
- RSA的应用
- 可以使用较小的e加速RSA解密,e最小是3,一般推荐2^16+1
- 针对RSA的攻击(见后面)
公钥加密ElGamal
-
Elgamal:将DH协议转换为公钥加密
- 密钥交换:
- 作为公钥; 通过 计算出k然后解密
- ElGamal加密系统:(Gen,E,D) Gen生成一个有限群G中的生成元g,以及一个随机的a,a是sk,pk=(g,h=g^a)
- 人话分析加密过程:ElGamal:一个循环群,阶为n,然后选一个g
- 加密:加密者随便选一个b,然后计算gb;然后计算u=hb(g{ab});把gb和g^{ab}一起输入hash函数生成k(hash的输入长度是G,因为g是生成元,生成元的幂都在G里),然后用一个E加密,发送(u,c)
- 解密:
- k怎么恢复?先恢复h^b
- 人话分析加密过程:ElGamal:一个循环群,阶为n,然后选一个g
- ElGamal 的时间消耗:加密需要2 exp (一种提速方法:提前计算好g的各种次方;但是只能一对一);解密需要1 exp
- 密钥交换:
-
ElGamal安全性假设 CPA CCA安全
- CDH假设:可计算DH假设
- 如果 已知,计算 是困难的
- HDH假设:Hash DH假设
- 假设H是一个可以将G^2上的分布转为在K上的均匀分布的Hash函数(即,Hash的输出可以看作是真随机)
- HDH下,ElGamal的语义安全性证明
- 由于公钥加密,语义安全=CPA安全,证明如下:
- ElGamal的CCA安全:通过交互DH(IDH)证明:
- 依赖于IDH的安全定理:
- CDH假设:可计算DH假设
-
更高安全性的ElGamal变种:twin ElGamal
- 安全性证明:
- 如何回避随机寓言机假设?
- 使用双线性群
- 使用特定群
-
更一般的原理
- 基本的单向函数:从PRG构建的单向函数【没有特殊性质,难以密钥交换】
- 如果f是一个安全的PRG,那么f就是一个单向函数
- 离散对数单向函数:
- RSA单向函数
- 基本的单向函数:从PRG构建的单向函数【没有特殊性质,难以密钥交换】
-
公钥密码体制需要:
- 构造具有特殊性质的单向函数
- 同态特性()和陷门
数字签名
签名和MAC的最大差别:
签名只有发送发可以加密,任何人都可以验证;MAC只有收方可以验证(可以同时确认来源以及防止篡改)
公钥加密和对称加密的区别
公钥加密使用公钥加密私钥解密,任何人都可以加密;对称加密的加、解密使用同一个key
- 数字签名
- 数字签名的安全性
- 攻击者可以进行选择消息攻击,目标是进行存在性伪造,伪造一个新的合法的msg/sig 对,其中,m不能是此前询问过的m【注意与MAC安全性证明的区别】
- 攻击者不能对新消息产生任何合法签名
- 数字签名应用
- 代码签名
- 一次性验证通道=>多次验证通道
- 重要应用:证书
- 服务器使用可信第三方对公钥签名
- CA生成自己的私钥,用于签名
- 服务器使用证书的时间是有范围的
- EMV payments Credit-card payments
- 对email签名:DKIM
- 邮箱会对每个发出的邮件签名,接收者会从DNS获得pk,在收到邮件之后验证签名的合法性。
- 假设收件人可以为每封收到的电子邮件从DNS中检索新数据,那么Gmail可以在没有签名的情况下实现DKIM吗?可以,Gmail会将每封发送的电子邮件的抗碰撞哈希写入DNS。收件人从DNS中检索哈希并将其与传入消息的哈希进行比较。
- 使用签名和MAC的时间比较
- 如果一个组织签名,一个组织认证:使用MAC
- MAC需要交互去生成共享的私钥
- 接收者可以修改数据或者子集重新签名,在将信息发送给第三方组织之前
- 如果一个组织签名,多个组织认证:使用签名
- 接收者不能更改收到的消息
- 如果一个组织签名,一个组织认证:使用MAC
- 防止数据篡改的三种方式
- 抗碰撞的hash,需要一个只读空间
- 数字签名:需要一个长期的sk
- MAC:提供方需要对每个用户生成以恶新的MAC,同时需要保存一个长期存储的sk生成每个client的MAC KEY
- 数字签名构造
- 使用抗碰撞的hash函数构造
- 如果Sig是针对短消息的签名,那么在签名时使用长消息到短消息的hash函数就可以将对短消息的签名改为对长消息的签名
- 如果Hash函数是一个抗碰撞的函数,那么由它构造的 是一个安全的对于长消息的签名模式
- 使用单向函数构造签名(如使用AES):签名太长,不实用
- 使用陷门函数构造签名:(RSA)
- 使用DLOG离散对数构造签名:
- 使用抗碰撞的hash函数构造
- 使用陷门置换构造签名
- 全域hash签名 FDH Signature:
- 形式:
- 安全性证明:
- 如果不使用全域哈希,则会导致存在性伪造
- 为什么
- RSA-FDH
- 形式:
- 例子 PKCS1 v1.5:
- 全域hash签名 FDH Signature:
现实加密协议
OTP类
- RC4 【不安全】
- 初始输入不均匀,比如存在
- 出现连续两个0的概率是
- 密钥之间存在关联
- CSS 【已经被破解】
- CSS基于LFSR:线性反馈移位寄存器
- LFSR的种子是指初始LFSR状态;每次右移一次,末尾舍弃,将异或的结果放在第一位;异或的结果:反馈函数选取固定位置,将这些位置的值进行异或之后再放到第一位
- LSFR的级数指的是LSFR中的寄存器个数
- 作业中出现的LSFR的示例:密钥使用3级线性反馈移位寄存器生成流密码的m和c
- 先通过c和m异或得到k
- k即为LSFR结果,构造f,未知数c0,c1,cn
- 构造矩阵,解方程
- 解得方程与c,根据f推导出k的推导关系
- CSS的加密和解密:CSSseed由5字节组成,前两个字节放在17bit的LFSR 后3字节放在25bit的LFSR
- CSS在2^17时间可破解【如果已知道CSS的前缀,猜测CSS的前17bitLSFR初始状态获得20字节输出,后25bit根据CSS前缀结果反推,验证后25bit是否符合LSFR的输出】
- CSS基于LFSR:线性反馈移位寄存器
- eStream【比较好】
PRG+新鲜值nonce:PRG: 其中,n>>s
R只使用一次,(k,r)永远不会重复==>k可以重复使用 - estream:Salsa 20【安全的】安全性:2^128
MAC
- 使用MAC保护系统文件:每个文件都有一个MAC tag,如果病毒非法篡改了文件中的信息,那么会导致计算出的MACtag完全不同
Hash
- SHA-256
- 构造方法:Merkle-Damgard函数
- 压缩函数:Davies-Mayer压缩函数
- 分组加密算法:SHACAL-2
- TLS协议:使用HAMC-SHA1-96
认证加密
- 现实世界的AE系统以及其构造方式
- SSL:先MAC,生成tag后再将m和tag一起加密
- IPsec:先加密,加密后结果计算tag【永远对的】
- SSH:先加密,然后对明文计算tag,将tag附在密文后面【不安全,泄露明文】
- NIST的认证加密标准:(基于nonce,都是认证加密)
- TLS1.2 (TLS记录协议)【先计算MAC再加密】
- 有两个单向密钥k_{b to s} 和 k_{s to b} ;每个方向维护一个计数器ctr
- 加密 CBC-AES 128 HMAC-SHA1;E(k,data,ctr)
- 先算tag,再pad,再CBC加密,再接到header后
- 解密
- 先CBC解密,pad失败则发送失败;检查tag,检查失败则发送失败
- TLS 1.1漏洞
- CBC的IV是可预测的;下一个IV是本次记录的最后一个密文分块,不是CPA安全的
- 有padding oracle攻击:根据服务器返回的错误消息,可以得知密文的padding是否有效,(对不同的错误会返回不同的响应)
- 长度泄露:TLS头会泄露TLS记录的长度(也可以通过监听网络流量获取)
- 对802.11b WEP的主动攻击
- 注意,CRC是线性的,这表示
公钥加密
- PKCS1 v1.5
- 将消息扩展成如下格式之后,使用RSA加密
- 攻击:利用解密漏洞:server会先查看传来的密文的明文开头是不是’02’,则攻击者可以测试明文的首部是不是02
- 一个简化版的实际攻击例子(N取2的幂),每次通过将密文乘以2来使密文左移,逐渐左移,得到铭文的最高位,2th最高位,。。。。是不是02
- HTTP对此的解决方法:使用随机字符串r作为首部
- PKCS1 v2.0 OAEP 优化非对称加密补齐
- OAEP+(普通陷门函数替代RSA,但padding改成用随机寓言机计算得)与SAEP+(让RSA e=3,去掉一个G)
- OPEP实际执行困难要注意计时攻击
- 公钥加密应用:不同的pk加密, 保证不同人都可以解密
攻击方法汇总
对OTP和流密码的攻击
- two time pad 一次一密,密钥使用两次的情况
攻击者可以根据m1m2异或的结果得到明文信息
- two time pad示例:MS-PPTP
发送方和接收方的key都是G(k),正确方法应该是双方共享一对密钥 - 802.11b WEP
k不变,IV变,IV24bit,k104bit(不变),在2^24之后,IV会出现重复,且有些802.11会在重复后重置为0===>出现two time pad- 解决方法:k作为PRG输入,输出的结果分段,每个分段作为一个key==>每个包有一个伪随机生成的key
- 硬盘加密
使用相同密钥加密文件,可以根据文件相同的部分破解k - OTP无完整性、可修改性:修改密文攻击
解密后,得到 密文已经被改变但是接收者无法察觉
攻击举例:
对分组密码的攻击
DES
- 穷尽搜索攻击
- 给定一个key,存在另外一个key,使得DES(k,m)=DES(k’,m)的概率是:256*1/(264)=1/256【即有很小的概率找到key】
- 对于两个DES明文,密文对,他们的唯一性是1-1/(2^71)
- 对于AES 两个输入输出对,唯一性是 1-1/(2^128)
- 对于3DES 穷尽攻击的时间是2^118
- 2DES的穷尽搜索攻击(中间相遇攻击) 考过
- 一条消息就可以实现穷尽搜索攻击
- 2E((k1,k2),m)=E(k1,E(k2,m));key长度:112bits 密文长度64bits
- 寻找(k1,k2),使得E(k2,M)=D(k1,c)
- Step1:构建表格:列出所有k2以及对应的E(k2,M),并且按照第二列的值排列(方便第二步寻找)
- Step2:尝试相遇:列出所有的k,尝试D(k,C)是否在刚刚的表格中的第二列中,如果找到,则输出对应的(k1,k2)
- 时间复杂度:2个
- DESX的穷尽搜索攻击(中间相遇攻击)
- EX((k1,k2,k3),m)= k1 xor E(k2,m x or k3 )
- 一条消息不能实现穷尽搜索攻击(因为始终不能确定k1或者k3),应该使用两条明文,密文对进行相遇
- Step1:穷举k1,计算k1 xor c1 以及 k1 xor c2
- Step2:穷举k2,计算 D(k2,k1 xor c1) 和 D(k2,k1 xor c2)
- Step3:计算D(k2,k1 xor c1) xor m1 以及 D(k2,k1 xor c2) xor m2,如果相等则相遇,计算结果为k3
- 测量时间攻击,测量功率攻击;错误攻击:检测错误
- 线性密码分析:DES的S盒设计缺陷导致
- 如果c是DES(k,m),对于随机的k,m,有
- 对于DES,
- 因此对于 个随机明文、密文对,通过异或明文与密文,可以获得key的子集的概率大于等于97.7%
- 对于DES, ,则可以在 2^42时间内获得key的子集(14bit)
- 如果c是DES(k,m),对于随机的k,m,有
- 量子攻击
- 对于搜索问题,普通计算机需要O(|X|)的时间,而量子计算机只需要O(|X^1/2|)的时间搜索
AES
- 针对AES-256,存在相关密钥攻击,该攻击可以在给定 2^99个输入输出对(它们是由4个相关密钥加密而成),可以在 2^99时间内恢复密钥
- 对可预测IV的CBC的攻击
- 构造一个全零的,可以判断异或的值
- 针对带随机IV的CBC进行篡改攻击【作业里有】【随机IV的CBC不提供认证加密】
- 笔记7.1节 篡改攻击,CBC可以通过修改IV实现
- CTR模式的选择密文攻击
对MAC的攻击
- MAC的安全边界
- ECBC模式边界计算:通过使用的PRP大小来计算边界[AES,|X|=2^128;3DES, |X|=2^64]
- (如果ECBC-MAC NMAC都是PRP实现)存在如下性质:如果找到一个认证消息的碰撞,那么认证消息接长也会碰撞
- CBC MAC填充攻击:如果是应用全0填充,那么攻击者可以通过构造消息末尾为全0的消息,并且提前询问攻击者消息的加密,pad(m)=pad(m||0)
- 对MAC认证的计时攻击
- 产生原因:
HMAC(key, msg) == sig_bytes
该代码在验证tag的时候,由于是逐个字节比对,可以根据时间来确定哪些位数是对的
- 解决1:让比较总是花费相同时间
- 解决2:不让攻击者知道哪个值被比较了
- 产生原因:
对Hash的攻击
- 通用生日攻击
- 通用抗碰撞函数攻击:
每次选2{n/2}个随机消息,暴力破解,如果不行,再选2{n/2}个,大概只需要2轮查询即可
- 通用抗碰撞函数攻击:
- SHA
- SHA1 不安全,输入160bits 通用攻击2^80
- SHA256 安全 输入256bits 通用攻击2^128
- SHA512 安全,输入512bits 通用攻击2^256
- 量子计算机优化
对认证加密的攻击
对padding的攻击
- Padding Oracle可以通过先加密再MAC避免
- 先MAC再加密虽然提供认证加密,但是只有在不透露解密失败原因的时候
- 计时攻击:根据返回错的时间判断错误类型
- 针对CBC的padding oracle攻击
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
- 然后每次都提交,查看解密后返回的信息【是填充错误,还是其它】接下来,继续猜测,这次用02 02 覆盖
- 使用CTR模式可以避免攻击:先MAC再CTR 因为不需要padding,自然也不存在padding oracle
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
- 对TLS实现IMAP的padding oracle攻击
- 问题:TLS会在每次获取不合法消息之后重新协商key
- 每五分钟客户端会向server发一个登录密钥
- 攻击者还是可以通过padding oracle恢复出用户明文
非原子操作的解密攻击
- SSH二元包协议攻击
- 协议:先解密长度;再读取对应长度的包,然后解密密文分组,最后检查MAC是否合法
- 攻击:通过发送的“MAC error”判断消息m的长度,发送一个大小只有1的m,server先解密得到len,之后试图从收到的信息后获得len长度的消息,此时攻击者一个字节一个字节地发送消息,并且等待server发送“MAC error”(表示消息长度是对了,但是没有通过MAC的校验)====>攻击者获得明文中len的信息
- 非原子操作的解密,以及在正确认证之前就使用解密内容是不安全的。
- 如何更改SSH?
- 直接使用明文的长度域(可以防止CCA)
- 单独对长度(seq-num,length)进行MAC验证,加在len明文后
- 将先加密+MAC改成先加密后MAC没有用,因为还是会泄露长度域
- 可以更改长度域名,通过每次收取一个字节信息就用MAC来识别包的边界,可以但是要花费大量时间
对公钥加密的攻击
对RSA的攻击
- 计时攻击:计算c^d(mod N)的时间可能会暴露私钥d
- 功耗分析
- 解密错误攻击(比如,检查解密错误,可能会重新计算一下解密后的密文和收到的密文是否一样,这个耗时会暴露d)
- 举例:CRT-RSA中国剩余定理RSA(如果计算xq发生错误但是xp没有,那么就可以计算出p)
- 举例:RSA密钥生成问题:如果使用同样的p生成RSA密钥,那么则会导致不同设备的N有相同的因数p
第八周随便提一点
考试形式:闭卷考试,题型:填空题(20分)选择题(20分)大题4道,每道题15分左右,选择填空一般是零散的知识点,如OTP的密文如何得到对应明文,如何解密;
算法安全性:如作业中的,哪些哈希算法是安全的,,3des安全吗,AES安全吗,md5安全吗,sha1安全吗 sha256安全吗;认证加密,如果随机初始向量CBC模式,先加密后认证安不安全;公钥;;;
答题:会有简答题:概念性的东西,公钥加密和对称加密的区别和概念,有对称加密为什么还要有公钥加密;如果用纯对称的做密钥交换,代价很大,gap最多是n^2 如果有公钥加密,gap会达到指数
从定义上来说,对称:直接加密消息;公钥加密,用于传输
简答题,提一些协议的漏洞,TLS的漏洞,padding oraacle攻击,什么pp协议,WAP协议的漏洞讲一下上课讲过的漏洞
大题可能和作业有些类似,内容更多,成体系的东西比较多;建议看确定性加密
TLS协议一定要考 讲了很多TLS
考试:考过Dlog原理的hash抗碰撞
上课透了::::注意公钥加密的CPA安全性的定义
补充了:群签名的例子:给所有的用户相同的私钥
第十周:回顾
- 秘密共享;Shamir秘密共享是怎么做的。(不会考证明,但是会考公钥加密CPA安全性)门限秘密共享怎么利用拉格朗日插值;(n,t),给定t-1个点可以重构,t个点不能
- 流密码:
- OTP的定义;根据消息和密文恢复密钥
- 流密码将OTP变为实际可用的(伪随机生成器:安全性要求【不可预测性】)
- 攻击:PPTP协议的问题;WEP的问题(至少三次的问题,到底有哪些脆弱性,理出来);OTP完整性攻击(篡改密文 from bob from eve );
- RC4的缺陷(WEP);Salsa20的构造(很无聊,知道他是安全的;要知道哪些流密码是安全的哪些是不安全的;标准化的东西记住也没有用)
- 语义安全性:不会考太多,没有太多有关语义安全性的证明题;更多是分析以及找到一些攻击
- 证明的部分不用花太多时间,要理清楚他们之间的关系:(异或);攻击比较容易考(11:39)
- 攻击多看
- 第十周应该要提一点了吧
Dan Boneh Problem Set
Week1
- 判断安全的PRG
- 选项1:A:区分首位是不是1,Adv=1/2
- 选项2:如果G’可以由A区分,则G也可以由G区分(异或1,分布不变),与题干矛盾
- 选项3:k是随机选取的,异或1,分布不变
- 选项4:判断LSB是不是等于0,Adv=1/2
- 选项5:去除最后一个bit,不影响G的安全性
- 选项6:判断第一个bit和第n+1个bit是否一样即可
- 判断一次性的语义安全
- 选项1:询问 和 可以区分EXP(0)和EXP(1)【全0,和全0接一个1,如果全0,那么输出结果最后一位肯定是0,另一个m,输出结果最后一位肯定是1,Adv=1】
- 选项2:如果E’不安全,则E也一定不安全,与题干矛盾。(我也不知道为什么,但是感觉就是对的)
- 选项3:不能上当了,虽然这个很随机,但是直接把key接在E后面,攻击者直接可以用k解密
- 选项4:输出两次密文:攻击者无法获取任何信息,如果要破解E’,必然要先破解E。(不能把他和真随机比,因为这是语义安全性,不是在判断PRG)
- 选项5:加不加0对攻击者都没有影响,因为加0这个行为其实没有暴露可以区分m0和m1的方法
- 选项6:破解攻击很简单,构造 和 全0输出还是全0,全1输出是全1 Adv=1
Week2
- 判断安全PRF
注意看,正确的选项都是直接用了安全的PRF,直接输出,都可以将他们转换为真随机,转换后的结果仍然是真随机 - 两轮Feistel网络
根据提示,攻击方法如下: - 基于Nonce的CBC,但是Nonce用和加密一样的key k作为PRP的输入
因为有点简单,就是列举一下,不写过程了 - CBC加密长度为l个分组的密文,如果第l/2个分组出现问题,会影响2个密文的解密;CTR模式,同样长度为l但是第l/2个密文出问题,只会影响一个密文的解密
Week3
- 这题,不太理解,感觉都不对,难道选第一个选项是对的?只有更改了文件内容才会认证失败,难道更改名字不会失败吗
- MAC的安全性
- ECBC-MACB使用固定IV的攻击:
- 使用r作为初始向量,通过对IV异或可以做到更改m的目的
- 这题说的是把消息m的最后一个bit进行更改,加解密需要使用AES的次数,记住CBCMAC需要加密两次;这题要先把原消息m的最后一个分组解密,然后再更改成m’,再加密
- 抗碰撞
- 32次方太短了,可以在 2^16时间内攻破
- 碰撞需要的样本数量计算
- 2次碰撞:T的大小是tag空间,如果两次碰撞,只需要尝试 个消息即可
- 3次碰撞:假设需要n个样本,n个样本的三层碰撞的组合有 种,由于两个H函数的碰撞概率(H(x)=H(y))为 ,构造三层碰撞需要 H(X)=H(y);H(x)=H(z)同时成立,同时成立的概率是 则三次碰撞的概率是 由于需要概率趋于1,这里不妨直接令 则可以计算出,需要
Week4
- 经典针对CBC的完整性攻击
- 判断认证加密
- 认证加密:密文完整性CI+选择密文攻击安全性CCA安全
- 2不是认证安全,原因可以看3,2没有保证两个明文都是正确的
- 4不是认证安全,因为4是encrypt-and-MAC是不安全的
- 认证加密提供CCA安全,同时也满足many time key的安全
- 如何通过对称加密构造一个MAC?==需要对称加密满足认证加密的要求(MAC安全,则MAC需要不能被存在性伪造,由于认证加密不存在存在性伪造,因此MAC也不会存在存在性伪造,就是安全的MAC了)
- KDF,奇怪的题目,让你挑一个在k均匀分布的时候安全但是在k不是均匀分布的时候不安全的PRF
- 什么情况下可以使用DAE(确定性认证加密)
- CBC攻击的次数
- 每个bit攻击2^8=256次*48个字节=12288次
Week5
- 利用DH问题难解的性质
- 如果DH难解,那么由DH组成的f也一定是难解的
- 别搞反了:只要记住A只知道a,B只知道b就可以
- 玩具协议加MAC可以防止中间人攻击吗?
- 加MAC并不能阻止中间人攻击,因为攻击者还是可以生成称自己的pk’,发给A和B,照样执行中间人攻击
- 欧拉定理和费马定理计算阶乘应用
- 解得方程
Week6
- 公钥加密可以像对称加密一样,加密后的结果是32bit吗?
- 显然不能,因为2^32长度对的密文太短了,会导致字典攻击来解密
- 公钥加密(Gen,E,D)使用的加密算法E可以是确定性加密吗?
- 不能,因为E中一定要有随机元素,不然就没有CPA安全了
- 判断安全的公钥加密系统
- 1不是安全的,不能保证传输过程中,密文被篡改
- 2不是CCA安全的,因为攻击者可以询问m0=0128和m1=1128的两个消息,获得一个挑战密文(c1,c2),然后攻击者构造一个新的明文m0,并且将其加密为c3,然后请求challenger对(c1,c3)进行解密,如果解密结果是m0或者错误输出;如果结果是m0,表示c1是m0,则表示c1=c3,均为m0的加密,即在exp0,如果输出错误,则表示在exp1
- 3是安全的,因为1的第二个密文没啥用,相当于一个公钥加密
- 使用y分解N????【很迷惑的一道题】
- 找到一个偶次方根不为1的
- N分解三个素因数
- N由三个相同的相近素数产生,那么d的边界是???【没搞懂这道题】
- 边界是1/6,是因为N-fai(N)现在是N^{2/3}的秩
Week7
-
一个均匀分布s和一个随机数异或是0,那么概率就是1/2^{n}
-
各种安全性的梳理
- 完美安全:密钥长度一定要大于等于消息长度
- 语义安全性(一次密钥的语义安全性质):只能询问一次m0,m1
- CPA安全:many time key 可以进行多次询问,每次询问的结果用一个key加密而成,随机获得0,1里的一个值的加密。确定性加密一定没有CPA安全
- 确定性CPA安全:cpa安全的基础上,限制加密者不会加密相同的明文两次
- CCA安全:可以无限询问密文的解密,但是只能询问一次m0,m1的加密内容,目的是要猜出是m0还是m1的加密
-
CBC用PRP,CTR用PRF
-
不懂但是做对了:对使用一个key去加密2^32个消息的对称加密,如果需要使其具有CPA安全,那么需要应用新鲜值,新鲜值的长度?
- 原因是用了生日攻击??
- 不太懂啊啊啊
-
不懂但是做对了;为什么计数器模式可以只用32bit长度的nonce,但是不用计数器的需要2^128
-
安全的MAC的定义
- 为什么是给定一个k,后半句可以理解
-
碰撞检测的定义
-
语义安全的定义
-
DH密钥交换协议
密码学透透🤣
开源精神互相帮助捏
====秘密共享
- Shamir秘密共享是怎么做的。(不会考证明,但是会考公钥加密CPA安全性)门限秘密共享怎么利用拉格朗日插值;(n,t),给定t个点可以重构,t-1个点不能
====流密码
-
OTP的定义;
- 定义: K是一串随机选取的和消息长度一样的bit
- 根据消息和密文恢复密钥
- 定义: K是一串随机选取的和消息长度一样的bit
-
流密码将OTP变为实际可用的(伪随机生成器:安全性要求【不可预测性】)
- 流密码的组成:使用PRG构成流密码
- 伪随机生成器的安全要求
- PRG安全性:定义统计测试算法A(输出0 伪随机,输出1 真随机),一个PRG G,一个真随机r;定义A对G的优势: 如果该优势 是接近1,表明A可以将G与真随机区分,反之接近0 表示不可区分
- 流密码的组成:使用PRG构成流密码
-
攻击:PPTP协议的问题;WEP的问题(至少三次的问题,到底有哪些脆弱性,理出来);OTP完整性攻击(篡改密文 from bob from eve );
- two time pad示例:MS-PPTP
发送方和接收方的key都是G(k),正确方法应该是双方共享一对密钥 - WEP的问题
- 对802.11b WEP的主动攻击【完整性攻击】
- 注意,CRC是线性的,这表示
- 802.11b WEP
k不变,IV变,IV24bit,k104bit(不变),在2^24之后,IV会出现重复,且有些802.11会在重复后重置为0===>出现two time pad- 解决方法:k作为PRG输入,输出的结果分段,每个分段作为一个key==>每个包有一个伪随机生成的key
- RC4使用WEP
- 对802.11b WEP的主动攻击【完整性攻击】
- OTP完整性攻击
- OTP无完整性、可修改性:修改密文攻击
解密后,得到 密文已经被改变但是接收者无法察觉
攻击举例:
- OTP无完整性、可修改性:修改密文攻击
解密后,得到 密文已经被改变但是接收者无法察觉
- two time pad示例:MS-PPTP
-
RC4的缺陷(WEP);Salsa20的构造(很无聊,知道他是安全的;要知道哪些流密码是安全的哪些是不安全的;标准化的东西记住也没有用)
- RC4
- 初始输入不均匀,比如存在
- 出现连续两个0的概率是
- 密钥之间存在关联
- 安全的流密码和不安全的流密码:
- RC4 不安全
- CSS 基于LFSR 已经被破解(2^17时间)
- estream:Salsa 20【安全的】
- RC4
- 语义安全性:不会考太多,没有太多有关语义安全性的证明题;更多是分析以及找到一些攻击
- 语义安全性:
定义了两个实验,优势为在两个实验中输出1的概率的差,如果对所有有效的A语义安全优势 是可忽略的,则称之为语义安全的
- 注意:语义安全性,A只能给挑战者发送一次明文,只能询问一次密文,挑战者的密钥只使用了一次
- 语义安全性例子:可推断LSB的算法A安全性(从输出的角度)、OTP的安全性(从分布的角度)
- 语义安全性:
定义了两个实验,优势为在两个实验中输出1的概率的差,如果对所有有效的A语义安全优势 是可忽略的,则称之为语义安全的
- 证明的部分不用花太多时间,要理清楚他们之间的关系(比如流密码:随机生成器和消息异或,会出现什么样的攻击);攻击比较容易考(11:39)
- 太抽象了,不知道在说什么,感觉是要把各个密码的理论构造看懂
- 攻击多看
- 攻击比证明重要,哈哈
====分组密码
- DES为什么不安全?因为S盒有线性关系;DES使用feistel网络;AES没有用Feistel网络;
- 密钥搜索只需要2^24时间
- 线性密码分析:DES的S盒设计缺陷导致
- 如果c是DES(k,m),对于随机的k,m,有
- 对于DES,
- 因此对于 个随机明文、密文对,通过异或明文与密文,可以获得key的子集的概率大于等于97.7%
- 对于DES, ,则可以在 2^42时间内获得key的子集(14bit)
- 中间相遇攻击2DES(知道就可以)
- 密钥搜索只需要2^24时间
- 实现中出现的问题:侧信道,时间攻击,错误攻击
- 测信道攻击:包括计时攻击,针对功率的攻击,
- 错误攻击:对解密者返回的错误进行分析
- 线性分析不考,知道对对称密码来说,线性分析很简单,就可以对其进行破解
- 只要知道AES是安全的就好;AES和3DES相同的安全等级下,谁的效率更高:AES效率更高;3DES:加密一次解密一次再加密一次;效果不好
====分组密码的使用
【着重看CBC模式的加密,怎么做的】
- CBC模式:
- 加密:
- 解密:
- 使用模式的安全,哪些安全哪些不安全。
-
DESX的穷尽搜索攻击(中间相遇攻击)
-
ECB模式不是语义安全的
- 加密不同的m,ECB方法总是使用同一个key;导致m1=m2.c1=c2
- ECB不是语义安全的【如果明文分组超过1个分组】,证明:
Adv=1的攻击方法:
-
CBC模式
- 对可预测IV的CBC的攻击 不是CPA安全的
- 构造一个全零的,可以判断异或的值
- 可以使用基于新鲜值的CBC解决,需要两个k
- 针对带随机IV的CBC进行篡改攻击【作业里有】【随机IV的CBC不提供认证加密】
- 7.1节 篡改攻击,CBC可以通过修改IV实现
- 针对CBC的padding oracle攻击
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
- 然后每次都提交,查看解密后返回的信息【是填充错误,还是其它】接下来,继续猜测,这次用02 02 覆盖
- 使用CTR模式可以避免攻击:先MAC再CTR 因为不需要padding,自然也不存在padding oracle
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
- 随机IV的CBC不是CCA安全的
- 对可预测IV的CBC的攻击 不是CPA安全的
-
CTR模式
- 确定CTR模式,由PRF构成,是一次密钥语义安全的
- 有选择密文攻击:
-
- CBC模式的加密:需要使用随机IV,如果IV不随机,会导致什么安全性后果,如果IV可预测会出现什么问题,TLS1.0版本的bug
- 可预测CBC,看上一个
=====MAC
- 消息认证码,有些上课提到过:消息认证码和数字签名的关系;
- 签名只有发送发可以加密,任何人都可以验证;MAC只有收方可以验证(可以同时确认来源以及防止篡改)
- MAC的定义,以及安全MAC的定义;存在性伪造的定义,CPA下的存在性伪造的定义;所有的伪造的方法以及伪造后怎么修复;存在性伪造会有一个简单的让你伪造的题目
- MAC的定义:
- 存在性伪造(针对MAC CPA安全的存在性伪造):
- 安全MAC的定义:多次询问挑战者tag,最后伪造一个可以通过检验的新MAC
- 所有的伪造的方法以及伪造后怎么修复(MAC这块好像没找到)
- 基于PRF的MAC(针对短消息的)[这个修复只能想到换一个key]
- 安全性计算:如果F是安全的PRF,且F的输出空间 |Y| 足够大,则由此PRF构造的MAC是安全的MAC
- 存在一个对于MAC的敌手A,且存在一个PRF敌手B,使得
- NMAC与CBC-MAC确实有伪造;
- ECBE-MAC没有最后一步加密:使用一次选择消息攻击就可以轻松伪造(放在下一节)
- NMAC没有最后一步加密:使用一次选择消息攻击就可以轻松伪造:先询问m的tag1,再询问tag1 xor w的tag(cascade(k,m||w)),然后 cascade(k,m)=>cascade(k,m||w)
- 安全边界
- ECBC模式边界计算:通过使用的PRP大小来计算边界[AES,|X|=2^128;3DES, |X|=2^64]
- (如果ECBC-MAC NMAC都是PRP实现)存在如下性质:如果找到一个认证消息的碰撞,那么认证消息接长也会碰撞
- 解决方法:使用随机构造
- 基于PRF的MAC(针对短消息的)[这个修复只能想到换一个key]
- MAC的定义:
- 着重看一下ECBC-MAC(encrypted CBC-MAC = CBC-MAC)会有什么问题
- 需要两个key
- 通过PRP定义一个新的PRF:
- 如果没有最后一步…也会被选择明文攻击攻破,选一个分组大小n的消息, 获得认证消息,然后接长原来的消息,可以通过t,pt构造出合法的MAC
- 当 时,CBC-MAC安全
===hash
- hash和数字签名结合在一起考
- 生日攻击;以根号t的时间找到,hash至少要160以上;要了解一下这个(阈值??)
- 通用生日攻击:通用抗碰撞函数攻击:
每次选2{n/2}个随机消息,暴力破解,如果不行,再选2{n/2}个,大概只需要2轮查询即可- 原理:生日悖论
- 通用攻击时间
- 通用生日攻击:通用抗碰撞函数攻击:
- 哪些hash安全哪些不安全
- SHA1 不安全,输入160bits 通用攻击2^80
- SHA256 安全 输入256bits 通用攻击2^128
- SHA512 安全,输入512bits 通用攻击2^256
- 量子计算机优化
===认证加密
-
padding oracle的攻击实验;以及它的原理
- Padding Oracle可以通过先加密再MAC避免
- 实验:针对CBC的padding oracle攻击
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
- 然后每次都提交,查看解密后返回的信息【是填充错误,还是其它】接下来,继续猜测,这次用02 02 覆盖
- 使用CTR模式可以避免攻击:先MAC再CTR 因为不需要padding,自然也不存在padding oracle
- 根据CBC特性,更改前一个分组的密文就可以更改解密后的CBC的值,将其用padding 01 覆盖
-
对于WEP不考(不考大题),要把TLS的注意一下,TLS要考大题;以及它的缺陷怎么修复
- TLS协议哈希函数:使用HAMC-SHA1-96
- TLS1.2 (TLS记录协议)【先计算MAC再加密】
- 有两个单向密钥k_{b to s} 和 k_{s to b} ;每个方向维护一个计数器ctr
- 加密 CBC-AES 128 HMAC-SHA1;E(k,data,ctr)
- 先算tag,再pad,再CBC加密,再接到header后
- 解密
- 先CBC解密,pad失败则发送失败;检查tag,检查失败则发送失败
- TLS 1.1漏洞
- CBC的IV是可预测的;下一个IV是本次记录的最后一个密文分块,不是CPA安全的
- 有padding oracle攻击:根据服务器返回的错误消息,可以得知密文的padding是否有效,(对不同的错误会返回不同的响应)
- 长度泄露:TLS头会泄露TLS记录的长度(也可以通过监听网络流量获取)
- 对TLS实现IMAP的padding oracle攻击
- 问题:TLS会在每次获取不合法消息之后重新协商key
- 每五分钟客户端会向server发一个登录密钥
- 攻击者还是可以通过padding oracle恢复出用户明文
===密钥交换
- 要知道密钥交换怎么做的,怎么实现的
- 密钥交换DH协议
- 密钥交换DH协议
===数论
- 计算 \fai(N),N=pq的时候
- 对于比较大的指数,要会求 m^e mod n 的结果,会用欧拉定理;指数值很大怎么计算,比如5^1000怎么计算;
===RSA
- RSA公钥加密怎么做
- RSA陷门置换:加密:消息求e次方,解密:消息求d次方
- RSA假设:RSA是一个单向置换(对于不知道sk的人来说,求出e的逆元很困难) - RSA公钥加密:
- RSA陷门置换:加密:消息求e次方,解密:消息求d次方
- textbook RSA是怎么做的;对教科书RSA的攻击(有点像中间相遇)
- 直接使用RSA进行加密是不安全的;示例一个攻击:
- 攻击者可以进行类似中间相遇攻击的办法对教科书RSA进行攻击
- 直接使用RSA进行加密是不安全的;示例一个攻击:
- 要会写RSA陷门(基本功)
- 要知道CPA安全性的定义(公钥安全的)
- 公钥加密的语义安全性(IND-CPA)
- 假如给你一个方案,你要会证明CPA安全性,可能需要规约;课本上会归约到困难问题,有时候也会归约到两个算法的问题;归约到陷门函数。
- 例如,从陷门函数构造公钥加密,归约到陷门函数的安全
- 感觉可以参考ElGamal的语义安全证明,用到两次规约
- HDH下,ElGamal的语义安全性证明
- 由于公钥加密,语义安全=CPA安全,证明如下:
- 例如,从陷门函数构造公钥加密,归约到陷门函数的安全
===Elgamal(自己加的 )
- 有一道大题有关ELGAMAL,和DH密钥协商类似;基于椭圆曲线
- 这是在说谜语吗,ELGAMAL到底要啥?只能把ppt 12-pubkey-dh-annotated全看一遍了
===数字签名
- 数字签名考的不是很多,概念知道就可以了,数字签名和hash结合会有一道小题;会少一些数字签名
- 抗碰撞Hash函数扩展签名输入的大小
- 题目答案是3,因为如果H不是抗碰撞的,那么一定可以找到m0和m1.导致可以伪造签名
- 全域哈希签名
- 在全域哈希中,哈希函数的选择不是固定的,而是从一个哈希函数的集合中随机选择的。
- 构造
- 形式:
- 安全性证明:
- 如果不使用全域哈希,则会导致存在性伪造
- 为什么
- RSA-FDH
- RSA-FDH
- 形式:
- 例子 PKCS1 v1.5:
- 抗碰撞Hash函数扩展签名输入的大小