Насколько надежна контрольная сумма adler32?

#md5 #checksum #data-consistency #adler32

#md5 #контрольная сумма #согласованность данных #adler32

Вопрос:

Интересно, насколько надежна контрольная сумма adler32 по сравнению, например, с контрольными суммами md5? В википедии было сказано, что adler32 «намного менее надежен», чем md5, поэтому мне интересно, насколько и каким образом?

Более конкретно, мне интересно, достаточно ли она надежна в качестве проверки согласованности при длительном архивировании файлов (tar) размером 20 ГБ ?

Ответ №1:

Для получения подробной информации о возможностях проверки на ошибки контрольной суммы Adler-32 см., например, Пересмотр контрольных сумм Fletcher и Adler. Максино, 2006.

В этом документе содержится анализ расстояния Хэмминга, обеспечиваемого этими двумя контрольными суммами, и указывается остаточная частота ошибок для слов данных размером примерно до 2 ^ 11 бит. Что, очевидно, намного меньше вашего требования в 2 ^ 38 бит…

Комментарии:

1. Спасибо, это полезная статья. Было бы интересно посмотреть вычисления для слов длиной до 20 ГБ … интересно посмотреть, возникнет ли аналогичный эффект порога, с резко увеличивающимся числом необнаруженных ошибок, где-нибудь до этого, также для алгоритма adler32 …

Ответ №2:

Назначение Adler32 совершенно иное, чем у MD5. Adler32 — это контрольная сумма. MD5 — это защищенный дайджест сообщения. Adler32 предназначен для быстрого хэширования, имеет небольшое битовое пространство и простой алгоритм. Частота коллизий низкая, но не настолько, чтобы быть безопасной. MD5, SHA и другие криптографические / безопасные хэши (или дайджесты сообщений) имеют гораздо большие битовые пространства и более сложные алгоритмы, поэтому имеют гораздо меньше коллизий. Сравните, например, SHA2-256; 256 бит по сравнению с жалкими 32 битами Adler32.

У Adler есть свое назначение, например, для хэш-таблиц или быстрой проверки целостности данных. Тем не менее, он не разработан с той же целью, что MD5 или другие защищенные дайджесты.

Кстати, если вам нужна простая, но в некоторой степени надежная контрольная сумма, то, похоже, Fletcher превосходит Adler. Я бы предположил, что они оба превосходят CRC, хотя, возможно, это не простая контрольная сумма на основе сложения (хотя она очень подвержена коллизиям). Если вам нужны и производительность, И безопасность, то используйте ОБА алгоритма. Используйте алгоритм контрольной суммы для быстрого вычисления и поиска, затем используйте увеличенный дайджест для более тщательного подтверждения, если он найден.

Отвечая на ваш вопрос об обеспечении достоверности архивов, я бы сказал, что этого, вероятно, было бы вполне достаточно. Лучший выбор? Сомнительно. Возможность ошибки? Очень низкая.

Комментарии:

1. Теперь, когда я понимаю, что такое проверки CRC, я бы ожидал, что хороший CRC-код превзойдет Adler32. CRC подкреплен огромной теорией поля Галуа: все исправные CRC невосприимчивы к нечетно-разрядным ошибкам (1-разрядным, 3-разрядным, 5-разрядным …), невосприимчивы к 2-разрядным ошибкам, невосприимчивы почти ко всем пакетным ошибкам меньшего размера (например: CRC32 невосприимчив к пакетной ошибке длиной 32 бита). Существует ровно одна 32-разрядная пакетная ошибка, от которой CRC32 не может защититься: и это сам полином CRC32 (или в случае Ethernet: пакетная ошибка ровно 0x1EDC6F41). Все остальные 32-пакетные ошибки защищены. Для Adler такой теории не существует

Ответ №3:

Это древний алгоритм; тот, который, как говорится на странице Википедии, «обменивает точность на скорость». Короче говоря, нет, вы не должны на это полагаться.

Дело в том, что при множественных повреждениях эта контрольная сумма может по-прежнему передаваться как «нормально». Из-за эффекта лавины это значительно реже встречается в современных алгоритмах (даже в старом MD5).

Для современных компьютеров скорость не так важна, поэтому я бы предложил использовать современный алгоритм (какой бы он ни был текущим), даже для файлов в диапазоне TB. Незначительной экономии времени, которую вы получили бы при использовании старой системы контрольных сумм, ИМХО, недостаточно, чтобы уравновесить значительно возросший риск необнаруженного повреждения данных — и, честно говоря, 20 ГБ файлов — это не так много данных в наши дни, чтобы вам понадобилось использовать слабые (и, осмелюсь сказать, неработающие) алгоритмы.

Комментарии:

1. Я не думаю, что Adler-32 может быть «взломан», потому что, похоже, он никогда не предназначался для целей безопасности . Везде, где я видел это упоминание за последние десять лет, всегда упоминалось о нем как о том, что вы используете, если хотите проверить, что файл не был случайно удален. Кроме того, «современные компьютеры» могут не использоваться. Существуют микроконтроллеры или приложения реального времени, у которых может быть что-то более важное для использования своего времени, чем вычисление 512-битных хэшей.

2. @Skrylar: Достаточно справедливо; обратите внимание, что я никогда не упоминал о целях безопасности. «Сломанный» также имеет значение «неисправный», т. е. «неправильно выполняющий свою функцию, например, сообщающий об ошибках там, где их нет, или сообщающий об отсутствии ошибок, несмотря на их наличие»; обратите внимание, что в моем ответе так сказано. Тем не менее, вы действительно читали ответ (не обращая внимания на вопрос , а именно на его последнее предложение), или вы просто увидели «современные машины» и вскочили с «о, о, я знаю, я знаю: что, если это работает на тостере RT»?

3. Что касается контрольной суммы архива для хранения, я бы назвал это недостаточным : «Проверка… да, она сломана.» Что теперь? Архив также должен быть устойчивым, см., например en.wikipedia.org/wiki/Parchive

Ответ №4:

Она менее надежна, чем, скажем, MD5 или CRC (примерно такая же, как CRC на самом деле). Преимуществом является скорость, недостаток проявляется в большей степени для коротких данных (несколько сотен байт) — это означает, что распределение хэш-значений не очень хорошо покрывает доступный 32-битный вывод. Для больших файлов это хороший выбор.

Комментарии:

1. -1 для последнего предложения: 20 ГБ не очень велики по сегодняшним стандартам, и использование слабой проверки избыточности аукнется вам (возможно, не на следующей неделе, возможно, не в следующем месяце, возможно, даже не в следующем году). Нахождение архивов за 10 лет в нечитаемом состоянии (хотя CRC утверждает, что он правильный) — отстой.

2. Тема на форуме была отличной… тем более, что кто-то провел фактический тест надежности… было бы здорово найти что-то подобное для больших файлов (хотя я понимаю, сколько времени это займет : s)

3. Что такое «повреждение»? Если это один байт, то это невозможно. По крайней мере, четыре байта должны быть повреждены, прежде чем вы сможете вернуться к тому же crc-32.

Ответ №5:

Adler-32 и MD5 не сопоставимы таким образом. MD5 на самом деле предназначен для криптографической контрольной суммы, когда вы хотите убедиться, что файл не был подделан злоумышленником, в то время как Adler-32 (а также CRC, который сопоставим с Adler-32) предназначен для проверки того, что файл не был подделан случайно (контрольная сумма целостности).

MD5 фактически считается взломанным для своих криптографических целей и полезен сейчас только для проверки целостности, когда вам нужно больше битов для уверенности. Единственный способ, которым Adler-32 может быть «менее надежным», заключается в том, что он позволяет изменять потенциально большее количество битов, сохраняя тот же результат, что и раньше, что означает больше возможностей для коллизий.

Эта ссылка дает хорошее обсуждение того, как использование Adler-32 может обеспечить преимущества в производительности для некоторых видов кода, который должен использовать криптографические суммы для дополнительной уверенности. А именно, что вы можете использовать меньшую и дешевую контрольную сумму, чтобы посмотреть, стоит ли использовать более дорогой MD5 / SHA / Whirlpool в случае изменения файлов.