Выбор длина CRC по сравнению с размером файла в основном актуально в тех случаях, когда один, скорее всего, есть вход, который отличается от «правильного» входа три или меньшего количества бит, чем иметь один, который существенно отличается. Учитывая два входа, которые существенно различаются, вероятность ложного совпадения будет составлять около 1/256 при большинстве форм 8-битного контрольного значения (включая CRC), 1/65536 с большинством форм 16-битной контрольной величины (включая CRC) и т. д. Преимущество CRC происходит от его обработки входов, которые очень похожи.
С 8-разрядным CRC, полином которого генерирует два периода длины 128, доля одиночных, двойных или трехкратных ошибок в пакете короче, чем тот, который не обнаружен, не будет 1/256 - он будет равна нулю. Аналогично, с 16-битным CRC периода 32768, используя пакеты 32768 бит или меньше.
Если пакеты больше, чем период CRC, то двухбитовая ошибка будет не обнаружена, если расстояние между ошибочными битами будет кратно периоду CRC. Хотя это может показаться не очень вероятным сценарием, CRC8 будет несколько хуже в улавливании двойных битовых ошибок в длинных пакетах, чем при улавливании «пакетов полностью скремблированных» ошибок. Если двубитовые ошибки являются вторым наиболее распространенным режимом отказа (после однобитовых ошибок), это было бы плохо. Однако, если что-либо, что искажает некоторые данные, скорее всего, повредит многие из них, низкое поведение CRC с двубитными ошибками может быть проблемой без проблем.
Атака MD5 в конце 2008 года представляет собой пример учебника проблемы с CRC, который является слишком однородным или слишком маленьким: http://www.win.tue.nl/hashclash/rogue-ca/ – bzlm
CRC не является алгоритм хэширования. Это способ увидеть, случайно ли было перевернуто. Я не вижу связи с ссылкой MD5. Я еще раз посмотрю. – Robert
@bzlm MD5 не имеет к этому никакого отношения. CRC не будут противостоять таким атакам вообще, они используются для обнаружения случайных ошибок, а не для злонамеренных атак. – starblue