Введение
Проверка формальной правильности или целостности файла
Проверка файла — это процесс использования алгоритма для подтверждения целостности компьютерного файла, как правило, с помощью контрольной суммы. Это можно сделать, сравнивая два файла бит за битом, но для этого требуются две копии одного и того же файла, и такой способ может не обнаружить систематические повреждения, которые могут возникнуть в обоих файлах. Более распространенный подход заключается в создании хеша скопированного файла и его сравнении с хешем исходного файла.
Проверка целостности
Целостность файла может быть нарушена, что обычно называют повреждением файла. Файл может быть поврежден различными способами: из-за неисправных носителей информации, ошибок при передаче данных, сбоев при копировании или перемещении, ошибок в программном обеспечении и так далее. Проверка на основе хеша обеспечивает обнаружение изменений в файле путем сравнения его текущего хеш-значения с ранее вычисленным. Если эти значения совпадают, файл считается неизменным. В силу особенностей хеш-функций, возможны коллизии хешей, приводящие к ложным срабатываниям, однако вероятность их возникновения при случайном повреждении обычно пренебрежимо мала.
Проверка подлинности
Часто желательно убедиться, что файл не был изменен при передаче или хранении ненадежными сторонами, например, для внедрения вредоносного кода, такого как вирусы или бэкдоры. Для проверки подлинности одной классической хеш-функции недостаточно, поскольку они не рассчитаны на устойчивость к коллизиям; для злоумышленника вычислительно тривиально спровоцировать намеренные коллизии хешей, что означает, что злонамеренное изменение файла не будет обнаружено при сравнении хешей. В криптографии эта атака называется атакой по исходному значению. Для этих целей часто используются криптографические хеш-функции. До тех пор, пока хеш-суммы не могут быть подделаны — например, если они передаются по защищенному каналу — можно считать, что файлы не были повреждены. В качестве альтернативы можно использовать цифровые подписи для обеспечения защиты от несанкционированного изменения.
Форматы файлов
Файл с контрольной суммой — это небольшой файл, содержащий контрольные суммы других файлов. Существует несколько известных форматов файлов с контрольными суммами. Некоторые утилиты, такие как md5deep, могут использовать такие файлы для автоматической проверки всех файлов в каталоге за одну операцию. Конкретный используемый алгоритм хеширования часто указывается в расширении файла контрольной суммы. Расширение ".sha1" указывает на файл с контрольной суммой, содержащий 160-битные хеши SHA-1 в формате sha1sum. Расширение ".md5" или файл с именем "MD5SUMS" указывает на файл с контрольной суммой, содержащий 128-битные хеши MD5 в формате md5sum. Расширение ".sfv" указывает на файл с контрольной суммой, содержащий 32-битные контрольные суммы CRC32 в формате простой проверки файла. Файл "crc.list" указывает на файл с контрольной суммой, содержащий 32-битные контрольные суммы CRC в формате brik. Начиная с 2012 года, лучшей практикой считается использование SHA-2 или SHA-3 для генерации новых дайджестов целостности файлов, а также принятие дайджестов MD5 и SHA-1 для обратной совместимости, если более надежные дайджесты недоступны. Ранее для проверки целостности файлов часто использовались теоретически более слабые SHA-1, более слабый MD5 или значительно более слабый CRC. Контрольные суммы CRC не могут использоваться для проверки подлинности файлов, поскольку CRC32 не является устойчивой к коллизиям хеш-функцией. Даже если файл с контрольными суммами не был изменен, злоумышленнику вычислительно легко заменить файл другим файлом с тем же значением CRC, что означает, что злонамеренное изменение файла не будет обнаружено при сравнении CRC.