Контрольная сумма — это короткая строка символов, уникально идентифицирующая содержимое файла. Даже изменение одного бита в установщике полностью меняет полученный хеш. Сравнение вычисленного значения с эталонным, опубликованным разработчиком, — единственный надёжный способ убедиться, что файл не повреждён при загрузке и не был подменён злоумышленниками.
Главный ориентир: всегда сверяйте SHA-256. Это текущий стандарт для распространения ПО. MD5 и SHA-1 считаются устаревшими — для них известны коллизии, позволяющие подобрать другой файл с тем же хешем. Если разработчик публикует только MD5 или SHA-1, используйте их, но относитесь к такому распространению с осторожностью.
- Зачем проверять хеш перед запуском
- Где найти эталонные значения
- Встроенные средства Windows: PowerShell и certutil
- PowerShell — Get-FileHash
- certutil — классическая утилита
- Сторонние утилиты с графическим интерфейсом
- Как сравнить полученный хеш с эталоном
- Проверка цифровой подписи Authenticode — второй слой защиты
- Типичные ошибки и как их избежать
- Сценарии: как действовать в типичных ситуациях
- Автоматизация для системных администраторов
- Ограничения метода
- Краткий чек-лист перед запуском любого установщика
- Что делать дальше
Зачем проверять хеш перед запуском
Три основных сценария, когда верификация критична:
- Загрузка с зеркал или сторонних источников. Официальный сайт может отдавать файл через CDN или редиректы на файловые хостинги. Промежуточный сервер может подменить исполняемый файл, добавив нежелательное ПО или вредоносный код.
- Подозрение на повреждение при передаче. Нестабильное соединение, обрыв загрузки, ошибки диска или антивирус, «лечащий» файл на лету, могут изменить бинарник так, что он запустится, но будет работать некорректно.
- Получение файла по незащищённому каналу. HTTP без TLS, локальная сеть, флешка, переданная третьим лицом — в этих случаях нет гарантии, что файл дошёл до вас в исходном виде.
Если вы качаете установщик с официального HTTPS-сайта крупного вендора (Microsoft, Adobe, JetBrains, GitHub Releases) и браузер не сообщал об ошибках, риск минимален. Проверка всё равно полезна как привычка, но не обязательна каждый раз.
Где найти эталонные значения
Разработчики публикуют хеши в нескольких местах. Порядок надёжности:
- Страница загрузки на официальном сайте. Часто в виде раскрывающегося блока «Checksums», «Verify download» или отдельной ссылки на файл .sha256 / .sha256sum рядом с инсталлятором.
- GitHub / GitLab Releases. В описании релиза или в активе SHA256SUMS / SHA256SUMS.txt.
- Файл с хешами в том же каталоге на FTP/HTTP-зеркале. Обычно называется SHA256SUMS, sha256sum.txt или аналогично.
- Ключи подписи (PGP/GPG). Некоторые проекты (например, VeraCrypt, Tor, Linux-дистрибутивы) подписывают файл хешей или сам инсталлятор detached-подписью .asc / .sig. Это даёт гарантию авторства, а не только целостности.
- Скопируйте эталонный хеш со страницы загрузки (Ctrl+C).
- Получите хеш вашего файла любым способом выше.
- Приведите оба к одному регистру (обычно нижнему) и уберите пробелы/переводы строк.
- Сравните посимвольно. Даже один отличающийся символ — файл не тот.
- Проводник: правый клик → Свойства → вкладка «Цифровые подписи». Если список пуст — файл не подписан.
- PowerShell: Get-AuthenticodeSignature «C:\Path\to\installer.exe». Поле Status должно быть Valid, SignerCertificate — содержать имя издателя.
- signtool (Windows SDK): signtool verify /pa /v «C:\Path\to\installer.exe» — подробный вывод с цепочкой сертификатов.
- Сравнение хешей разного регистра или с пробелами. Всегда приводите к нижнему регистру и убирайте пробелы перед сравнением.
- Использование MD5/SHA-1 как единственной проверки. Для них известны коллизии. Подходит только если разработчик не предоставил SHA-256, и вы понимаете риск.
- Проверка хеша не того файла. Браузеры иногда скачивают в %TEMP% или добавляют суффикс (1), .part. Убедитесь, что проверяете именно итоговый .exe/.msi.
- Вера в подпись без проверки издателя. Подпись может быть валидной, но выдана на «John Doe» или компанию, не связанную с ПО. Читайте поле «Издатель» (Subject).
- Проверка после запуска. Если установщик уже запустился и распаковал себя во временную папку, исходный файл может быть удалён или изменён антивирусом. Проверяйте до первого запуска.
- Скачивание хеша с того же зеркала, что и файл. Если зеркало скомпрометировано, и файл, и файл с хешами могут быть подменены. Берите эталон с официального сайта проекта (HTTPS, основной домен).
- Удалите файл. Скачайте снова, лучше с другого зеркала или напрямую с официального сайта. Если повторяется — сообщите разработчику (возможно, релиз пересобрали без обновления хешей на странице). Не запускайте файл с несовпадающим хешем.
- Скачайте инсталлятор на управляющую станцию / сервер сборки.
- Проверьте хеш скриптом (пример выше) и подпись Get-AuthenticodeSignature.
- Положите в репозиторий пакетов (SCCM, Intune, Chocolatey, Winget, PDQ Deploy) только верифицированный файл.
- В политике развёртывания укажите хеш пакета (Chocolatey: checksum/checksum64, Winget: InstallerSha256). Клиентская сторона проверит его при скачивании автоматически.
- Уязвимостей в самом ПО. Легатимный, неподделанный установщик может содержать нулевую уязвимость (0-day) или закладку разработчика (редко, но бывает — supply chain attacks вроде SolarWinds, event-stream).
- Компрометации сервера разработчика. Если злоумышленник получил доступ к релизному аккаунту и заменил и файл, и хеш на сайте — вы скачаете «официальный» вредоносный файл с верным хешем. Защита — подпись PGP/GPG с ключом, хранящимся у разработчика офлайн (hardware token), и проверка этой подписи.
- Атак на цепочку поставок до этапа релиза. Вредоносный код может быть внедрён в исходники или сборочную инфраструктуру (CI/CD) до создания релиза. Хеш финального артефакта будет «правильным».
- Файл скачан с официального сайта (HTTPS, верный домен) или доверенного зеркала, указанного на официальном сайте.
- На странице загрузки найден эталонный SHA-256 (или SHA-1/MD5, если другого нет).
- Вычислен хеш файла: (Get-FileHash «путь\файл.exe» -Algorithm SHA256).Hash.ToLower().
- Хеши совпадают посимвольно.
- В свойствах файла (вкладка «Цифровые подписи») есть подпись, статус «Действительная», издатель соответствует разработчику.
- (Опционально) Проверена PGP-подпись файла хешей / инсталлятора, если проект её предоставляет.
Важно: эталонный хеш нужно брать из того же источника, что и информация о релизе, а не из случайного блога или форума. Если на странице загрузки нет хешей — это повод насторожиться, но не повод отказываться от программы. Многие легатимные проекты всё ещё не публикуют их открыто.
Встроенные средства Windows: PowerShell и certutil
Дополнительное ПО не требуется. В Windows 10/11 и Windows Server 2016+ доступны два нативных способа.
PowerShell — Get-FileHash
Самый удобный вариант. Поддерживает SHA256 (по умолчанию), SHA1, SHA384, SHA512, MD5.
Get-FileHash -Path «C:\Path\to\installer.exe» -Algorithm SHA256
Результат — объект с полями Algorithm, Hash, Path. Хеш выводится в верхнем регистре без пробелов. Для сравнения с эталоном (часто в нижнем регистре) удобно привести к единому виду:
(Get-FileHash «C:\Path\to\installer.exe» -Algorithm SHA256).Hash.ToLower()
Если нужно проверить несколько файлов сразу:
Get-ChildItem «C:\Downloads\*.exe» | Get-FileHash -Algorithm SHA256 | Format-Table Path, Hash -AutoSize
certutil — классическая утилита
Работает во всех поддерживаемых версиях Windows, включая старые сборки без PowerShell 5+. Синтаксис:
certutil -hashfile «C:\Path\to\installer.exe» SHA256
Вывод содержит хеш в виде групп по два символа, разделённых пробелами, и строку «CertUtil: -hashfile command completed successfully.». Для автоматического сравнения вывод придётся парсить, поэтому для ручной проверки PowerShell удобнее.
Поддерживаемые алгоритмы: MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512.
Сторонние утилиты с графическим интерфейсом
Если вы проверяете хеши регулярно или хотите визуально сравнить строки без копирования в блокнот, удобны небольшие портативные программы.
| Утилита | Особенности | Алгоритмы |
|---|---|---|
| HashCheck Shell Extension | Интегрируется в свойства файла (вкладка «CRC SHA» / «Hashes»), открывается правым кликом. Открытый код, нет установки (регистрирует DLL). | CRC32, MD5, SHA-1, SHA-256, SHA-384, SHA-512 |
| 7-Zip | Правый клик → CRC SHA → SHA-256. Уже стоит у многих для архивов. | CRC32, CRC64, MD5, SHA-1, SHA-256, SHA-384, SHA-512, BLAKE2sp |
| HashTab | Вкладка в свойствах файла. Бесплатна для личного использования, закрытый код. | 30+ алгоритмов, включая ed2k, Tiger, Whirlpool |
| OpenHashTab | Форк HashTab с открытым кодом, без рекламы и телеметрии. | Аналогично HashTab |
| RapidCRC Unicode | Портативное окно с drag-and-drop, пакетная проверка списка хешей из .sfv/.md5/.sha256. | CRC32, MD5, SHA-1, SHA-256, SHA-512, BLAKE2, и др. |
Для разовой проверки достаточно 7-Zip или PowerShell. Для постоянной работы — HashCheck или OpenHashTab: они показывают хеш в двух кликах без открытия терминала.
Как сравнить полученный хеш с эталоном
Алгоритм прост, но есть нюансы:
Удобный трюк в PowerShell для мгновенного сравнения без глазомерки:
$expected = «a1b2c3d4e5f6…» # вставьте эталон в нижнем регистре
$actual = (Get-FileHash «C:\Path\to\installer.exe» -Algorithm SHA256).Hash.ToLower()
if ($expected -eq $actual) { Write-Host «OK: хеши совпадают» -ForegroundColor Green }
else { Write-Host «ОШИБКА: хеши НЕ совпадают» -ForegroundColor Red }
Если эталон опубликован в файле SHA256SUMS (формат: «хеш *имя_файла» или «хеш имя_файла»), можно автоматизировать проверку всего списка:
# Предполагаем, что файл SHA256SUMS лежит рядом с инсталляторами
$sums = Get-Content «C:\Downloads\SHA256SUMS»
foreach ($line in $sums) {
if ($line -match ‘^([a-f0-9]{64})\s+\*?(.+)$’) {
$expectedHash = $matches[1]
$fileName = $matches[2]
$filePath = «C:\Downloads\$fileName»
if (Test-Path $filePath) {
$actualHash = (Get-FileHash $filePath -Algorithm SHA256).Hash.ToLower()
$status = if ($expectedHash -eq $actualHash) { «OK» } else { «MISMATCH» }
Write-Host «$status $fileName»
} else {
Write-Host «MISSING $fileName»
}
}
}
Проверка цифровой подписи Authenticode — второй слой защиты
Контрольная сумма гарантирует целостность битов. Цифровая подпись гарантирует авторство: файл подписан сертификатом, выданным доверенным центром сертификации (CA), и не был изменён после подписания.
В Windows подпись проверяется автоматически при запуске (SmartScreen, UAC), но можно проверить вручную:
Важно: валидная подпись не отменяет проверку хеша. Подпись подтверждает, что файл подписан конкретным издателем в конкретный момент. Хеш подтверждает, что это именно тот файл, который имел в виду издатель (и который вы ожидаете получить). Используйте оба метода.
Типичные ошибки и как их избежать
Сценарии: как действовать в типичных ситуациях
| Ситуация | Что делать |
|---|---|
| Официальный сайт даёт только SHA-1 / MD5 | Проверяйте то, что есть. Заведите issue разработчику с просьбой добавить SHA-256. Не отказывайтесь от ПО только из-за этого, но будьте внимательнее к источнику загрузки. |
| Хеш не совпадает | |
| Файл не подписан, но хеш совпадает | Многие open-source проекты не покупают EV-сертификаты для подписи Windows. Совпадение SHA-256 с официального источника — достаточная гарантия. Решайте по доверию к проекту. |
| Файл подписан, но хеш на сайте другой | Возможно, разработчик переподписал тот же бинарник (редко) или вы смотрите хеш для другой версии/архитектуры. Уточните версию. Не запускайте, пока не разберётесь. |
| Скачали через торрент / файлообменник | Обязательно проверяйте SHA-256 с официального сайта. Подпись Authenticode также должна быть валидной. Риск подмены здесь максимален. |
| Установщик — .msi или .msix | То же самое: Get-FileHash работает с любыми файлами. .msix/.appx имеют встроенную подпись и проверку целостности при установке, но предварительная проверка хеша не лишняя. |
Автоматизация для системных администраторов
Если вы развёртываете ПО на десятки машин, ручная проверка нереальна. Правильный подход — верификация на этапе подготовки пакета:
Так вы исключаете человеческий фактор и «человек посередине» на этапе доставки к конечному компьютеру.
Ограничения метода
Проверка контрольной суммы не защищает от:
Поэтому хеш — необходимый, но не достаточный слой защиты. Комбинируйте: HTTPS-загрузка с официального домена → проверка SHA-256 → проверка Authenticode → (при наличии) проверка PGP-подписи файла хешей → запуск в изолированной среде / песочнице для критичного ПО.
Краткий чек-лист перед запуском любого установщика
Если все пункты выполнены — риск запуска поддельного или повреждённого файла минимален. Если хотя бы один пункт не пройден — не запускайте, пока не разберётесь в причине.
Что делать дальше
Сделайте проверку SHA-256 привычкой для каждого нового исполняемого файла, который вы запускаете с правами администратора. Добавьте в контекстное меню HashCheck или OpenHashTab — это уберёт барьер «надо открывать терминал». Для корпоративной среды заложите верификацию в процесс подготовки пакетов развёртывания. И помните: хеш защищает только от подмены и повреждения битов. От уязвимостей в коде защищают своевременные обновления, принцип минимальных привилегий и сетевая сегментация.
Материал носит информационный характер. Проверка контрольных сумм и цифровых подписей снижает риски, но не гарантирует отсутствие уязвимостей в самом программном обеспечении или компрометации инфраструктуры разработчика. Для критических систем комбинируйте верификацию артефактов с изоляцией, мониторингом и политиками нулевого доверия.
