为什么CRC不被用作哈希函数?

与MD5和SHA等算法相比,CRC作为哈希函数不够优化,因为它在均匀性、确定性和碰撞抵抗性方面存在限制。
On this page

为什么CRC不被用作哈希函数?

摘录

尽管循环冗余校验(CRC)在错误检测方面非常有效,但由于均匀性差、确定性问题和更高的碰撞易受性,它不适用作哈希函数。

简介

哈希函数在计算机科学的许多领域中都是非常重要的,用于将数据映射到固定大小的值。另一方面,循环冗余校验(CRC)通常用于检测数据传输和存储中的意外错误。尽管CRC在错误检测中被广泛使用,但它并不适用于作为加密哈希函数。

本文将概述CRC及其特性,讨论哈希函数的要求,并解释阻止CRC有效用作哈希算法的关键限制。

理解CRC

循环冗余校验(CRC)是一种常见的技术,用于检测原始数据的意外更改。它通过从原始数据计算出一个校验和值,并将其附加到消息中。

接收方然后重新计算CRC校验和,并将其与接收到的值进行比较,以验证数据的完整性和准确性。如果校验和不匹配,则表示数据在传输过程中被损坏或更改。

CRC的一些优点是计算高效、在硬件和软件中易于实现,以及在检测常见错误方面具有高效性。

哈希函数及其要求

哈希函数将输入转换为一个短的固定大小的哈希值,是一个单向过程。哈希函数在计算机科学中具有广泛的用途,例如:

  • 密码学 - 用于密码存储和数据完整性
  • 数据索引 - 高效的查找和检索
  • 指纹识别 - 唯一标识文件和数据

密码学安全哈希函数的关键要求:

  • 均匀性 - 输出呈均匀分布
  • 确定性 - 相同的输入产生相同的哈希输出
  • 抗碰撞性 - 很难找到具有相同哈希的输入

CRC作为哈希函数的局限性

虽然CRC在错误检测方面表现出色,但它具有一些缺点,使它成为密码哈希函数的不佳选择:

缺乏均匀性

CRC会导致相似消息产生相似的校验和。这导致了非均匀性和聚集,与随机哈希函数输出不同。

确定性问题

CRC校验和仅由输入数据确定。这使得它更容易预测,并容易受到有意的篡改。

碰撞易受攻击

较短的校验和长度,通常为16或32位,导致不同输入之间发生碰撞的机会增加。这增加了攻击向量。

替代CRC进行哈希的方法

一些广泛使用的哈希函数克服了CRC的局限性,如下所示:

MD5

生成一个128位的哈希值,设计用于速度和均匀性。

SHA-1

生成一个160位的哈希,具有良好的碰撞抗性和安全性。

SHA-256

SHA-256输出更长的256位哈希,以增强对暴力攻击的安全性。

这些哈希函数专为提供良好的雪崩效应、单向操作、均匀输出和抗碰撞性,以用于密码学和数据应用。

结论

总之,尽管CRC在错误检测方面可靠,但它不满足密码哈希函数所需的重要属性。不良的均匀性、可预测的输出和更高的碰撞概率使CRC不适用于哈希。

为了保证安全性,使用像MD5SHA-1SHA-256这样专门设计用于具有良好雪崩效应、抗暴力破解和均匀性的哈希算法是至关重要的。了解CRC的局限性凸显了根据应用需求使用适当的哈希函数的重要性。