目录
哈希函数Hashes
数据完整性保护
- 场景与问题
- Alice通过一个不安全的通道向Bob发送消息M。
- 消息M的完整性可能由于以下原因被破坏:
- a. 由于噪声或错误而损坏,
- b. 被攻击者篡改(内容修改),
- c. 其他原因
- 假设Bob接收到的消息为M’,那么Bob要如何确定M’的完整性,保证它与原M相同呢?
- 方法:
- 校验和,循环冗余码(CRC)
- 消息摘要-密码哈希函数的输出
加密哈希函数
- 可以使用加密哈希函数h(·)来保护数据完整性
- 密码哈希函数h(·)的属性:
- 给定任意x,很容易计算,y = h(x)
- 固定长度输出y从任意长度输入x
- 雪崩效应- x的微小变化会引起y的巨大变化
- 安全需求
- 原象阻力(单向,不可逆)-不能找到x给定y
- 抗碰撞- 2种:弱、强
哈希函数的安全要求
- 原像电阻(单向)
给定哈希函数h(·),且z = h(x),不能得到x = h−1(z) - 第二预像(弱碰撞)抗
给定x1,求出x2是不可行的,其中x2 = x1使h(x1) = h(x2) - 抗碰撞(或强抗碰撞):
不能找到任意一对x1和x2使h(x1) = h(x2) - 常用的哈希函数:MD5, SHA-1, SHA-256, RIPEMD
生日攻击Birthday attack
- 在一个可以取N个可能值的总体中,总是有可能在t个成员大小的样本中找到至少一对具有相同值的成员。
例子:
考虑一个人的生日,只包括日和月,不包括年,只有N = 365个可能的值。
可以看出,在t =23人的样本容量下,找到2个人生日相同的概率≈50%。
- 对于n位哈希,对于任意输入x,可能的输出数是2n。总是有可能找到x的t个样本,使它们中的一对具有相同的哈希输出。这就是所谓的生日袭击。
碰撞的概率
•从N个样本中选取t个样本,发现无碰撞的概率PnoCollision
•因此在t个样本中发现碰撞/s的概率为