两个数据块可能产生相同CRC64值的可能性有多大?

时间:2011-05-17 01:56:45

标签: crc crc64

我有一个缓存应用程序,它使用CRC64值来确保数据完整性。 我正在考虑增加一个额外的字段,一个时间戳来传递数据 在各种缓存服务器之间进行比较,以查看数据是否已更改。

但是,这需要协议更改。虽然这不是一个大问题,但我已经有了 一个CRC64,可用作指示某些事情发生了变化。

是否有人知道生成相同CRC64的两个数据块周围的统计数据?如果没有,我怎么能计算它或估计它的可能性?

3 个答案:

答案 0 :(得分:6)

如果你认为crc64是'完美',那么这些数字是非常合理的:

For a 1% probability of collision, you need 6.1 × 10^8 entries. For a 50% probability of collision, you need 5.1 × 10^9 entries.

当然,如果数据可能是由恶意来源提供的,那么可以很容易地生成像crc64这样简单的哈希冲突,并且冲突可能会很频繁。所以,你是否走这条路线取决于输入数据的来源和碰撞的潜在后果。

答案 1 :(得分:3)

任何两个给出的块碰撞的概率是1/2 64 ,或者在约1.8×10 19 中的1。

但是,如果您对大小为N的任意两个块的碰撞率感兴趣,则概率很快就会变得更高。

有关更多信息,请参阅维基百科上的Birthday Problem,其中包含公式和近似值。

答案 2 :(得分:0)

两个CRC64相对于不同随机数据相同的概率在2 ** 64中接近1个机会。但由于CRC对数据模式有些敏感,可能会出现退化情况,你会丢失几个二进制数保护。可能不可能得出一个硬数字,但你可能会安全地假设在最差情况下碰撞机会在2 ** 50左右的时间内不到1次。

如果你使用加密哈希而不是CRC64,你可以放心接近理论极限,但加密哈希的计算成本通常要高得多。