加载中...

| 中文名 | 哈希碰撞 |
| 外文名 | Hash Collision |
| 理论基础 | 鸽巢原理、生日悖论 |
| 处理方法 | 链地址法、开放寻址 |
| 安全影响 | 哈希洪水、算法破解 |
哈希碰撞是指两个互不相同的输入数据经过同一个哈希函数运算后,产生了完全相同的输出哈希值的现象。由于哈希函数把无限或巨大的输入空间映射到有限的输出空间,碰撞在原理上无法完全避免。
哈希函数将任意长度的数据压缩为固定长度的值,广泛用于哈希表、数据校验和密码学。但正因为输出取值有限而输入无限,按照鸽巢原理必然存在多个输入对应同一输出。一个优秀的哈希函数应当让输出尽量均匀分布,使碰撞概率最小化,但无法从根本上杜绝。如何检测和处理碰撞,是设计哈希相关系统时的关键。
在哈希表场景,碰撞会使查找退化,极端情况下所有元素落入同一桶,查询时间从常数级恶化为线性级。攻击者可故意构造大量碰撞键发起哈希洪水攻击,拖垮服务,因此许多语言引入随机化种子或碰撞过多时切换为平衡树来防御。在密码学场景,碰撞则意味着哈希算法被攻破,MD5 和 SHA-1 已因能被人为构造碰撞而不再安全。
问:哈希碰撞能被彻底避免吗?答:不能。只要输入空间大于输出空间,碰撞在数学上就必然存在,工程上只能通过优良的哈希函数降低概率,并设计合理机制来处理已发生的碰撞。
问:为什么 MD5 不再安全?答:因为研究者已能高效地人为构造出两个不同却哈希值相同的文件,这种可控碰撞使得依赖 MD5 做完整性校验或签名的系统可被伪造,故它已被淘汰,改用更强的算法。

| 中文名 | 哈希碰撞 |
| 外文名 | Hash Collision |
| 理论基础 | 鸽巢原理、生日悖论 |
| 处理方法 | 链地址法、开放寻址 |
| 安全影响 | 哈希洪水、算法破解 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧