CRC32 действительно так плох для проверки целостности файла?

Конечно, что MD5 лучше, чем CRC32, SHA1 лучше, чем MD5 и так далее... Но они также намного медленнее, чем CRC32.

Правильно знаете, я думаю о том, как проверить целостность передаваемого файла, и CRC32 - самый быстрый вариант.

Я нигде не нашел, насколько плох CRC32 для проверки целостности (возможно, другими словами, как, вероятно, CRC32 не обнаружит искаженный файл)?

2 ответа

Решение

Цитата из http://www.mathpages.com/home/kmath458.htm:

Таким образом, если мы предположим, что любое искажение наших данных влияет на нашу строку совершенно случайным образом, т. Е. Так, что поврежденная строка полностью не связана с исходной строкой, то вероятность того, что поврежденная строка останется незамеченной, равна 1/(2^ н). Это основа, на которой люди говорят, что 16-битный CRC имеет вероятность 1/(2^16) = 1.5E-5 не обнаруживать ошибку в данных, а 32-битный CRC имеет вероятность 1/(2^32), что составляет около 2,3E-10 (менее одного на миллиард).

Мое мнение: CRC-32 более чем достаточно для обнаружения ошибок. Он широко используется. Тем не менее, это небезопасно, когда вы хотите использовать его в качестве "хэш-функции".

Столкновения (тот же результат хеширования, но разные данные) могут легко произойти при использовании CRC-32, потому что CRC-32 использует только 32 бита по сравнению с другими алгоритмами, например. MD5 - 128-бит, SHA-1 - 160-бит, SHA-2 (серия SHA256/512) - 224 бит-512 бит. (зависит от того, что вы используете). Также для серии SHA-2 столкновения не обнаружено.

Для получения дополнительной информации о математике и вероятности, что может привести к столкновению ваших данных. Пожалуйста, посмотрите на проблему Hash Collision и Paradox.

Другие вопросы по тегам