Насколько надежна контрольная сумма adler32?
Интересно, насколько надежна контрольная сумма adler32 по сравнению, например, с контрольной суммой md5? В википедии было сказано, что adler32 "гораздо менее надежен", чем md5, так что мне интересно, сколько и каким образом?
В частности, мне интересно, достаточно ли он надежен в качестве проверки непротиворечивости для долгосрочного архивирования (tar) файлов размером 20 ГБ +?
5 ответов
Подробнее о возможностях проверки ошибок контрольной суммы Adler-32 см., Например, " Повторное посещение контрольных сумм Fletcher и Adler". Максино, 2006.
Эта статья содержит анализ расстояния Хэмминга, обеспечиваемого этими двумя контрольными суммами, и предоставляет показатель остаточной ошибки для слов данных до примерно 2^11 бит. Который, очевидно, намного меньше, чем ваше требование 2^38 бит...
Alder32 имеет совершенно иное назначение, чем MD5. Adler32 - это контрольная сумма. MD5 - это защищенный дайджест сообщений. Adler32 предназначен для быстрых хэшей, имеет небольшое битовое пространство и простой алгоритм. Частота столкновений низкая, но недостаточно низкая, чтобы быть в безопасности. MD5, SHA и другие криптографические / защищенные хэши (или дайджесты сообщений) имеют намного большие битовые пространства и более сложные алгоритмы, таким образом, имеют гораздо меньше коллизий. Сравните SHA2-256, например; 256 бит по сравнению с жалкими 32 битами Adler32.
Adler имеет свое назначение, например, в хеш-таблицах или для быстрой проверки целостности данных. Тем не менее, он не предназначен для той же цели, что и MD5 или другие безопасные дайджесты.
Кстати, если вам нужна простая, но достаточно надежная контрольная сумма, то, похоже, Флетчер превосходит Адлера. Я бы предположил, что они оба превосходят CRC, хотя, возможно, это не простая контрольная сумма, основанная на сложении (хотя она очень подвержена конфликтам). Если вам нужны ОБА и производительность, и безопасность, тогда используйте ОБА алгоритмы. Используйте алгоритм контрольной суммы для быстрого вычисления и поиска, затем используйте больший дайджест для более тщательного подтверждения, если оно найдено.
Чтобы ответить на ваш вопрос об обеспечении достоверности архивов, я бы сказал, что этого вполне достаточно. Лучший выбор? Сомнительный. Возможность ошибки? Очень низкий.
Это древний алгоритм; тот, который, как говорится на странице Википедии, "меняет точность на скорость". Короче говоря, нет, вы не должны полагаться на это.
Дело в том, что при множественных повреждениях эта контрольная сумма может по- прежнему проходить как "хорошо". Из-за лавинного эффекта это значительно реже встречается в современных алгоритмах (даже при старении MD5).
Для современных машин скорость не так важна, поэтому я бы предложил использовать современный алгоритм (такой как SHA2 - даже MD5, если семейство SHA2 слишком современно для ваших вкусов), даже для файлов в диапазоне TB. Незначительная экономия времени, которую вы получили бы со старой системой контрольных сумм, ИМХО не достаточна, чтобы уравновесить значительно возросший риск необнаруженного повреждения данных - и, честно говоря, 20 ГБ файлов - это не столько объем данных, который вам нужно было бы использовать слабым (и я осмелюсь нарушить) алгоритмы.
Он менее надежен, чем, скажем, MD5 или CRC (примерно так же, как CRC на самом деле). Преимущество - скорость, недостаток - больше для коротких данных (несколько сотен байтов) - это означает, что распределение значений хеш-функций не очень хорошо покрывает доступный 32-битный вывод. Для больших файлов это хороший выбор.
Адлер-32 и MD5 не сравнимы в этом отношении. MD5 фактически является криптографической контрольной суммой, когда вы хотите убедиться, что файл не был подделан злоумышленником, а Adler-32 (а также CRC, который сопоставим с Adler-32) предназначен для файл не был случайно изменен (контрольная сумма целостности)
MD5 фактически считается сломанным для своих криптографических целей и полезен только сейчас как проверка целостности, когда вам нужно больше битов для определенности. Единственный способ, которым Adler-32 может быть "менее надежным", состоит в том, что он позволяет потенциально большему количеству бит быть измененным, сохраняя тот же самый выход, что означает, что есть больше места для коллизий.
Эта ссылка дает хорошее обсуждение того, как использование Adler-32 может повысить производительность для некоторых типов кода, для которых необходимо использовать криптографические суммы для дополнительной уверенности. А именно, что вы можете использовать меньшую и дешевую контрольную сумму, чтобы увидеть, стоит ли рассматривать более дорогой MD5/SHA/Whirlpool в случае изменения файлов.