一、上次内容总结
1.伪随机性和伪随机生成器(PRG):通过伪随机性的要求产生足够长但不完全随机的密钥;PRG利用足够长的种子生成伪随机串代替一次一密中的密钥;
2.CPA选择明文攻击:允许敌手查询谕言机加强自身的攻击能力,可进行任意多次且每次使用同样的密钥k,相当于把加密方案公布给敌手。
3.CPA不可区分实验:如果敌手有在选择明文并获取对应密文的能力下仍然无法有效区分加密的明文,就说明该加密方案能够有效抵抗选择明文攻击,即通过量化敌手成功区分加密明文的概率来评估加密方案的安全性。
4.流密码(对比特流进行变换)
流密码模式(同步):用一个密钥流中不同部分分别加密各个消息;流密码模式(异步):以密钥和初始向量一起作为输入来产生流,每个明文的加密采用相同的密钥和不同的初始向量。区别:同步模式适合持续通信场景,例如语音;异步模式适合间断通信场景,例如即时消息。
二、伪随机函数(pseudorandom function,PRF)
为了实现CPA安全,需要新的数学工具为加密提供额外的随机性。为此引入伪随机函数,是对伪PRG的扩大:PRG从一个种子生成一个随机串,PRF从一个key生成一个函数。
①带密钥的函数(Keyed Function)
两个输入一个输出(注意不是加密)或输入key得到一输入一输出的函数。
②查表(Look-up Table)
表格是直接描述输入与输出之间映射的表格,一个条目对应一个输入到一个输出,映射是随机产生的,是一个真随机函数。表越大随机性越好。
③函数族(Function Family):包含所有
. 一个PRF是函数族中的一个子集,key确定下的PRF是函数族中的一个元素,一个查表也是函数族中的一个元素。
④长度保留(Length Preserving)
密钥长度与函数输入输出长度相同均为n.
三、伪随机置换(Pseudorandom Permutations,PRP)
PRP可以提高对任意长度消息的加密效率。
①双射Bijection:F是一个输入对应唯一输出且满射;
②排列Permutations:一个从一个集合到自身的双射函数;
F是一个双射是一个双射,即函数和逆函数都是双射。
若一个有效的带密钥的排列F是PRP,如果对任意PPT的区分器D有negl(n)的概率区分出PRP和真随机置换,则可以接受:
一个PRP也是一个PRF。
四、分组密码
1. 电子密码本(Electronic Code Book,EBC)
将明文分组加密后的结果直接变成密文分组,最后一个明文分组长度小于分组长度时需要填充。由于明文分组与密文分组一一对应,因此根据密文就知道明文中存在怎样的重复组合,可以以此为线索来破译密码,因此是可以区分的,不是CPA安全的。
2.密码分组链接(Cipher Block Chaining,CBC)
将前一个密文分组与当前明文分组进行异或运算,然后再进行加密,避免EBC的弱点。由于第一个明文分组不存在“前一个密文分组”,因此通常需要随机产生一个长度为一个分组的比特序列来代替“前一个密文分组”,,这个比特序列称为初始化向量(Initialization Vector,IV)
特殊情况:①密文分组中有一个密文损坏(值变长度不变)解密时最多有两个分组改变。②密文中有一些比特缺失,则确实之后的密文分组无法解密。③IV被篡改则所有密文的解密受影响。
3.密码反馈(Cipher Feedback,CFB)
前一个密文分组会被送回到密码算法的输入端。CFB中明文分组没有通过密码算法直接进行加密,而是通过“加密算法的输出”和“明文分组”进行异或产生密文分组。如果明文中出现内容错误(值错不缺失)则影响产生错误之后的密文解密。
4.输出反馈(Output Feedback,OFB)
密码算法的输入会反馈到密码算法的输出中。不是对明文直接进行加密,这一点和CFB很像。
OFB和CFB的区别:CFB加密算法的输入是前一个密文分组;OFB的输入是加密算法的前一个输出。
OFB中某一部分明文内容出错(值错不缺失)不影响后面分组的解密。
4.计数器(Counter,CTR)
通过逐次累加的计数器进行加密来生成密钥流。
CTR和OFB的区别:①CTR可以以任意顺序对分组进行加密和解密,因为counter可以直接计算出来而OFB不具备该能力;②OFB中碰巧出现对密钥流的一个分组进行加密后结果和加密前相同,则这一分组之后的密钥流会变成该值不断重复,而CTR不存在这个问题。
5.CFB、OFB、CTR可以看作使用分组密码来实现流密码,即生成一个伪随机比特流和明文进行异或。但分组密码更容易理解且很多都是高度安全的。因此通常推荐使用分组密码。
五、选择密文攻击(Chosen-Ciphertext Attacks,CCA)[更强的攻击方式]
类似于CPA安全,除了加密谕言机(encryption oracle)外增加了解密谕言机(decryption oracle),要求不能向oracle查询与挑战密文相同的内容。
实验过程:
①敌手A一直安全参数,有一个连接
的oracle和连接
的oracle,输出等长明文
给加密者;
②挑战者任选输出密文
给敌手A,c是挑战密文;
③A在获得c后,仍有一个连接的oracle和连接
的oracle(能够根据c调整继续查询),输出猜测
;
④如果则试验成功,输出1,否则输出0.
CCA安全定义:
有私钥加密方案,如果对任意PPT敌手A,都存在一个可忽略函数negl(n)满足
,则称加密方案
在选择明文攻击下有不可区分性,是满足CCA安全的。
我的理解:挑战者任选从
中选取
加密后把密文c发送给敌手A, A可以选择一些密文进行解密操作并尝试从解密结果或者解密过程中获取有关明文或其他密文的信息,输出b的值,猜测该密文是
还是
加密而成的。CCA安全确保了加密方案在面对选择明文攻击时仍然能够保持足够的机密性和完整性。
六、消息完整性(message integrity)
1.收到的消息是真的吗?是合法的人发的还是敌手发的?是用户想表达的还是敌手拦截修改过的?
2.消息的私密性和消息的完整性需要区别,所有的加密方案都不能保证消息的完整性。(敌手改变密文,明文也会发生变化,消息的完整性遭到破坏。)
3.消息鉴别码(message authentication codes,MAC)
MAC由三种PPT算法(Gen,Mac,Vrfy)组成:
①密钥生成算法Gen:输入安全参数,输出密钥k,双方共享;
②标记生成算法:当Alice想发送一个消息给Bob,需要先计算
,将(m,t)一起发送给Bob,(m,t)表示(消息,标记)。
③校验算法:Bob收到(m,t)后,验证t是否等于
,等于则输出b=1,意味着消息有效,b=0意味着无效。
一般而言,Mac算法是随机的,假设Vrfy算法是确定的,有。对于每一个n,k,
,都有
..
消息鉴别码实验:[存在性不可伪造]
①运行Gen()产生一个随机密钥k;
②敌手A输入值,并能访问谕言机
,最后输出(m,t),并用Q表示所有A对谕言机的询问集合;
③当且仅当(敌手给出了一组未出现过的信息和对应的有效标记)时,实验结果输出为1(实验成功,敌手攻破了标记)。
如果没有敌手在上述实验中以不可忽略的概率成功,则认为MAC是安全的,即