На практике да, идентичный криптографический хеш означает, что файлы одинаковы, если файлы не были созданы злоумышленником или другим злонамеренным объектом. Шансы случайных столкновений с любой хорошо спроектированной криптографической хеш-функцией настолько малы, что на практике они незначительны и в отсутствии активного злоумышленника.
В целом, однако, нет, мы не можем сказать, что два произвольных файла с одинаковым хешем однозначно означают, что они идентичны.
Способ работы криптографической хеш-функции состоит в том, чтобы взять вход произвольной длины и вывести значение фиксированной длины, вычисленное из входных данных. У некоторых хеш-функций есть несколько выходных длин на выбор, но выходные данные все еще в некоторой степени являются значениями фиксированной длины. Это значение будет иметь длину до нескольких десятков байт; алгоритмы хэширования с самым длинным выходным значением, обычно используемым в настоящее время, имеют 512-битный выход, а 512-битный выход составляет 64 байта.
Если вход в хэш-функцию длиннее, чем выход хэш-функции, необходимо удалить некоторую точность воспроизведения, чтобы вход соответствовал выходу. Следовательно, должно существовать несколько входов с длинами, превышающими длину вывода, которые генерируют один и тот же вывод.
Давайте возьмем текущую рабочую лошадку, SHA-256, в качестве примера. Он выводит хэш 256 бит или 32 байта. Если у вас есть два файла, каждый из которых имеет длину ровно 32 байта, но разные, они должны (при условии отсутствия ошибок в алгоритме) хешировать разные значения, независимо от содержимого файлов; в математических терминах, хэш - функция отображения 2 на 256 входное пространство на 2 256 выходного пространства, которое должно быть можно обойтись без столкновений. Однако, если у вас есть два файла, каждый из которых имеет длину 33 байта, должна существовать некоторая комбинация входных данных, которые дают одинаковое 32-байтовое выходное хэш-значение для обоих файлов, потому что теперь мы отображаем пространство ввода 2 264 на 2 256выходное пространство; здесь мы можем легко увидеть, что в среднем должно быть 2 8 входов для каждого отдельного выхода. Продолжайте в том же духе, и для 64-байтовых файлов должно быть 2 256 входов на каждый выход!
Криптографические хеш-функции разработаны таким образом, что в вычислительном отношении сложно составить вход, который дает конкретный вывод, или составить два входа, которые дают одинаковый вывод. Это известно как сопротивление атакам прообраз или сопротивление атакам столкновений . Это не невозможно найти эти столкновения; Он просто должен быть очень, очень, очень, очень сложным. (Особый случай столкновительной атаки - атака на день рождения .)
Некоторые алгоритмы лучше других противостоят атакующим. MD5 обычно считается полностью сломанным в наши дни, но, в последний раз я смотрел, он все еще демонстрировал довольно хорошее сопротивление первому прообразу . SHA-1 также эффективно разрушается; атаки прообраз были продемонстрированы, но требуют особых условий, хотя нет оснований полагать, что так будет до бесконечности; как говорится, атаки всегда становятся лучше, они никогда не становятся хуже. SHA-256/384/512 в настоящее время все еще считается безопасным для большинства целей. Тем не менее , если вы просто заинтересованы в том , чтобы, если два , не со злым умыслом, действительныйфайлы одинаковы, тогда любого из них должно быть достаточно, поскольку входное пространство уже достаточно ограничено, чтобы вас больше всего интересовали случайные столкновения. Если у вас есть основания полагать, что файлы были созданы злонамеренно, то вам по крайней мере необходимо использовать криптографическую хеш-функцию, которая в настоящее время считается безопасной и которая устанавливает нижнюю планку в SHA-256.
Первым прообразом является поиск входных данных, которые дают конкретное выходное хеш-значение; второй прообраз - найти один вход, который дает тот же выход, что и другой, указанный вход; Столкновение состоит в том, чтобы найти два входа, которые дают один и тот же результат, независимо от того, что это такое, а иногда и без учета того, что это за входы.
При этом важно помнить, что файлы могут иметь очень разные представления данных и при этом отображать их абсолютно одинаково. Таким образом, они могут казаться одинаковыми, даже если их криптографические хеши не совпадают, но если хэши совпадают, то, скорее всего, они будут выглядеть одинаково.
cmp
Unix илиfc
(сравнить файлы) в Windows.