一 回顾总计和补充
1. 分组密码:EBC、CBC、CFB、OFB、CTR,后三者可以看作使用分组密码来实现流密码且安全性较高,是通常推荐使用的分组密码。
2. 选择密文攻击CCA:挑战者任选从中选取加密后把密文c发送给敌手A, A可以选择一些密文进行解密操作并尝试从解密结果或者解密过程中获取有关明文或其他密文的信息,输出b的值,猜测该密文是还是加密而成的。CCA安全确保了加密方案在面对选择明文攻击时仍然能够保持足够的机密性和完整性。
3.消息鉴别码:确保消息的完整性,因为所有的加密方案都不能保证消息的完整性。
说明了MAC的存在性不可伪造,实验成功则表示敌手能对一组未出现过的信息给出相应的消息鉴别码。
4. 对消息鉴别码的重放攻击:重放攻击是指将前面发送过得消息再次发送,如:将“A给B打款100元”重发九次B会收到十条一样的消息,可以使用时间戳抵挡住重放攻击,加上“this same message”表示只能被发送一次的数据信息,或为每个消息分配序列号。
二 利用PRF构造安全的消息鉴别码MAC
1.构造长度为n消息m的固定长度MAC方法(假设F是一个PRF):
①Gen:输入安全参数,均匀随机选择;
②Mac:输入密钥和消息,输出标记(若则没有输出,即k和m长度必须相等,:=表示确定赋值);
③Verf:输入密钥、消息和标记,当且仅当输出1(若则输出0)。
2. 生成变长信息的MAC的方法:
假设是针对长度为n的输出定长MAC的方案。
①Gen:同;
②Mac:输入密钥和消息,要求消息长度(为了防止生日攻击,保证安全性),将m分成d个分块,每个长度为(需要填充时用0填充最后一个分块)然后,选择一个随机的标识码;
对i=1,…d,计算标记,其中i,l被唯一编码为长度为的字符串,最后输出标记(||表示拼接);
③Verf:输入密钥和消息,要求消息长度,
标记,将m分成d个分块(对分块的要求同②),当且仅当
,且对于时,时,输出1.(分块生成标记,但不是分块检验标记是否有效)
三 链式密码快消息认证码CBC-MAC(将分组密码转换为MAC的方法,和MAC一样防止数据在传输过程中被篡改)
1. 构造CBC-MAC的方法:
①Gen:输入安全参数,均匀随机选择;
②Mac:输入一个密钥和长度为的消息m,(令l=l(n)),首先将m分块为,每一个的长度为n,并令,
其次,对,令并输出作为标记(只保留最后一个);
③Verf:输入一个密钥、长度为的消息m和长度为n的标记t,当且仅当时,输出1.
2. 变长消息的CBC-MAC:
初始化向量IV修改为|m|,|m|后置会不安全。
分别定义两个密钥,其中是消息m的基本CBC-MAC,记作,然后输出结果.
变长消息的CBC-MAC模式示意图
3. CBC-MAC与CBC的比较:
①CBC模式使用初始向量IV但CBC-MAC却没用到(用IV会不安全);
② CBC中将所有的中间值都被输出作为密文的一部分,而CBC-MAC只输出最终的(输出每一个不再安全)
CBC模式示意图
CBC-MAC模式示意图
四 抗碰撞散列函数
1. 散列函数是将任意长度的字符串通过特定的数学函数或者算法映射成固定大小的散列值的函数。散列函数是单向的,已知散列值也无法唯一确定原始数据是什么(单向性);输入发生微小变化,散列函数只会产生完全不同的结果(敏感性)。
2. 在密码学中,碰撞的含义是指两个不同的输入在通过同一哈希函数处理后,产生了相同的哈希值(或散列值或输出等),而抗碰撞则指哈希函数具备的安全性质,难以在合理时间内找到两个不同输入对应同一哈希值的情况。
抗碰撞性可以分为两个层次:弱抗碰撞性(Weak Collision Resistance)和强抗碰撞性(Strong Collision Resistance)。
弱抗碰撞性是指对于给定的一个消息以及其哈希值,要找到另一个不同的消息使得,在计算上是不可行的。这意味着即使攻击者知道了某个消息的哈希值也难以构造出另一个具有相同哈希值的不同消息。
强抗碰撞性是指要找到任意两个不同的消息,和使得在计算上也是不可行的。这意味着攻击者几乎不可能通过构造碰撞来破坏哈希函数的应用。
3.数学化定义:散列函数是一个PPT算法(Gen,H),满足如下条件:
①Gen:输入安全参数并输出密钥s;
②存在一个多项式l满足:对H输入一个密钥s和一个字符串输出;
如果当输入和有定义,就称(Gen,H)是输入长度为的定长散列函数。
4. 碰撞发现实验
实验目标:验证给定哈希函数H是否具备抗碰撞性;
实验步骤:①运行得到密钥s;
②敌手输入s并输出x和;
③当且仅当且时,实验输出1,表示敌手发现了碰撞。
实验结论:如果存在PPT敌手A,存在一个可忽略的函数negl(n)使得发现碰撞的概率
,则哈希函数H是抗碰撞的。
5. 散列函数三种典型安全水平:抗碰撞、抗第二原像(单向性)、抗原像(弱抗碰撞性)。
6. 生日攻击:在足够多的人中,至少有两人生日相同的概率会随着人数的增加而显著增加。
改进的生日攻击:①降低空间需求;
②缺乏对碰撞的控制,即不同的表达但同样的意思也算碰撞。
7. Merkel-Damgard变换(MD变换)
①主要目的:将一个固定长度的压缩函数转换为一个能够处理任意长度输入的哈希函数。通过迭代地应用压缩来实现,每次迭代都处理输入的一部分,并将前一次迭代地输出作为下一次迭代的输入。
②定长MD变换的构造方法(输入量压缩一半):
主要过程:填充,初始化,迭代压缩,输出。
令(Gen,h)是一个压缩函数(定长抗碰撞散列函数),其输入量长度为2l(n),输出量长度为l(n),构造变长散列函数(Gen,H)方法如下【Gen:同上】:
H:输入密钥s和一个串,其长度.
①假设(x中的分块数量),用0把x的长度填充成l的倍数,将填充后的x分块解析:,令,其中L的长度为l;
②假设(长度为l所有位都设为0的序列);
③对于,计算;
④输出
.
MD变换示意图