Quelle est la probabilité deux blocs de données susceptibles de produire la même valeur CRC64?

StackOverflow https://stackoverflow.com/questions/6025445

  •  14-11-2019
  •  | 
  •  

Question

J'ai une application de mise en cache qui utilise une valeur CRC64 pour assurer l'intégrité des données. Je pense à mettre un champ supplémentaire, un horodatage à transmettre avec les données entre les différents serveurs de cache et par rapport à la vue si les données ont changé.

Cependant, cela nécessite des changements de protocole.Bien que ce n'est pas une affaire énorme, j'ai déjà Un CRC64 qui pourrait être utilisé comme indicateur que quelque chose a changé.

Est-ce que quelqu'un connaît-il les statistiques autour de deux blocs de données produisant le même CRC64?Sinon, comment pourrais-je le calculer ou estimer sa probabilité?

Était-ce utile?

La solution

If you assume that crc64 is 'perfect', then the numbers are pretty reasonable:

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.

Of course, if the data is potentially supplied by malicious sources, then collisions in a hash as simple as crc64 can be generated easily, and collisions could be rampant. So whether or not you go this route depends on the source of input data and the potential ramifications of collisions.

Autres conseils

The probability of any two given blocks colliding is 1/264, or 1 in about 1.8 × 1019.

However, the probability rapidly becomes more likely if you are interested in the rate of collision out of any two blocks from a population of size N.

For more information, see Birthday Problem on Wikipedia, which has formulas and approximations.

The probability of two CRC64s over different random data being identical would be something close to 1 chance in 2** 64. But since CRCs are somewhat sensitive to data patterns, there could be degenerate cases where you'd lose several binary orders of protection. It's probably not possible to come up with a hard number, but you'd likely be safe in assuming the worst case chance of collision would be less than 1 chance in 2** 50 or so.

You'd be assured of getting closer to the theoretical limit if you used a cryptographic hash instead of a CRC64, but the crypto hash is generally much more expensive to compute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top