第六讲 消息认证和散列函数
安全攻击
- 泄密、传输分析:破坏机密性
- 伪装、内容修改、顺序修改、计时修改:破坏完整性
- 发送方否认、接收方否认:破坏抗抵赖性
其中接收方否认的情况不仅需要数字签名,还需要配合协议来解决。
消息认证和HASH函数
区别和关系
可用来产生认证符的函数分为三类:
- 消息加密函数,用完整信息的密文作为对消息的认证。
- 消息认证码MAC,MAC是消息和密钥的函数,产生一个固定长度的值作为认证标识。
- 散列函数(Hash Function),是一个公开的函数,它将任意长的信息映射成一个固定长度的信息。
一句话概括就是Hash函数属于消息认证中的一部分。
消息加密
消息的自身加密可以作为一个认证的度量。对称密钥模式和公开密钥模式有所不同。
- 对称加密:如果明文具有一定的语法结构,接收方可以判断解密后明文的合法性,从而确认消息来自发送方而且中间未受到篡改。如果明文为二进制文件,则难以判断解密后的消息是正确的明文。
- 公钥加密:既能实现保密性,又能完成认证和签名。一次通信中要进行四次复杂的公钥算法。
消息认证码
可以参考之前的博文:第四讲 对称密码的使用方法
需要区分注意的是,认证码对明文或密文进行MAC都是可以的。因为有密钥的保护,所以即便是对密文进行MAC也不会被篡改,只是这种方式在仲裁的时候必须保留密文,不太好。
而对于Hash函数而言,只能对明文或摘要进行Hash,对密文的Hash是没有任何意义的,可以被随意篡改。
散列函数(Hash)
- 将一个长度可变的消息M转换为一个固定长度的输出,称之为散列码或摘要
- 与MAC的区别:没有使用密钥,函数输入参数只有一个
- 可以检测出消息是否发生变化
- 和加密结合可以用于认证
消息认证和数字签名
※消息认证与数字签名的区别
认证包括消息认证与身份认证两类:
- 消息认证:针对消息,主要验证消息的来源以及完整性
- 身份认证:针对通信方,主要验证通信方的身份,通讯对端身份的唯一性和合法性
数字签名:是一种实现身份认证+消息认证的方法。
消息认证认证来源,验证信息的完整性,即验证数据在传送或存储过程中未遭篡改、重放等。
数字签名认证个体,验证信息发送者的身份,包括信源、信宿等的认证和识别。
※HASH函数的性质
- 抗弱碰撞:明文的任何一点改变都会使Hash值发生变化。
- 抗强碰撞:明文和Hash值是一一对应的。
抗强碰撞自然抗弱碰撞。
这里的弱碰撞和强碰撞的区别在于,弱碰撞是已知一个消息去找碰撞,而强碰撞是在所有消息中找满足碰撞的一组消息。
- 单向性
MD5算法的原理
- 填充消息
为什么位数正好也要进行填充:防止碰撞。
-
附加消息长度
-
初始化缓冲区
-
分组处理消息
每次处理一个消息分组:512位。一个消息分组的处理过程:
算法的核心是压缩函数,由四轮运算组成,每轮进行16步迭代。每轮使用不同的逻辑函数,记为F,G,H,I。
T是事先产生的表格,包含64项,每项32位。512位信息在每轮被分为16个分组,每个分组为32位。
-
输出消息摘要
本质其实就是根据消息对着基础ABCD寄存器中的字符进行不断的计算,最终输出变化后的ABCD寄存器中的值。
MD5、SHA-1和RIPEMD-160的比较
MD5的攻击方法
- 枚举法
- 字典法
- 彩虹表法
HASH攻击的意义:碰撞服务器存储的密码。
彩虹表法
值域和定义域的意思就是方便收尾相接互相作为输入输出。
为了解决不同的明文也会产生同样的结果的问题,对R(x)函数进行了改进。即,每次对R函数进行修改。
只存一系列函数处理的一头和一尾,一系列函数一般是H R1 H R2 H R3这样的顺序交叉进行处理,可以有效防止重复。
生日攻击的原理
-
生日问题1:当你走进教室的时候,问教室里要有多少人使得存在跟你生日相同的人的概率超过50%?(弱碰撞性)
解:求\(n\),使得\(q(n)=1-(\frac{364}{365})^n≥\frac{1}{2}\)。
解得\(n=253\)。 -
生日问题2:一个教室内,要有多少人才能使至少有二人的生日在同一天的概率超过50%?(强碰撞性)
解:求\(k\),使得\((1-\frac{1}{365})(1-\frac{2}{365})…(1-\frac{k-1}{365})≈\frac{1}{2}\)
解得\(k≈23\)
说了这么多,其实生日攻击就是写出好的hash function最大的绊脚石。如果你把hash function的每个输入值想成是n个人中的一个,再把输出值想成是每个人的生日,那么生日问题就告诉我们,只需要很少的输入值,就会有很大的可能性有至少两个输出值完全相同,也就违反了hash function的条件之一。这就是生日攻击。
生日攻击能够奏效就是因为这个值域太小,像我们的生日问题中值域只有365,所以只要70个人就能够找到相同生日的两个人。
可以参考:生日攻击是什么,有什么用?