Подменённый файл выглядит как настоящий: то же имя, тот же размер, та же иконка.
Отличить его можно только по контрольной сумме (короткий отпечаток содержимого: изменился один байт, изменился весь отпечаток). Если сумма скачанного файла совпадает с той, что опубликовал автор, это тот самый файл. Не совпадает, значит другой, и запускать его не надо. Ниже: откуда берётся подмена, как посчитать сумму за секунду и где брать эталон, чтобы проверка что-то значила.
ЗАЧЕМ СВЕРЯТЬ СУММУ
файл у автора SHA-256: a3f9…
файл у вас SHA-256: a3f9… тот же
файл у вас SHA-256: 71c0… другой
└─ имя и размер могут совпадать,
сумма не может
Что такое хеш, если совсем просто
Возьмите любой файл, хоть на гигабайт, и пропустите через формулу. На выходе всегда 64 символа, и всегда одни и те же для одного и того же файла. Поменяйте в файле один байт, и все 64 символа станут другими, без всякой связи со старыми. Восстановить файл по этим символам нельзя, зато сравнить два файла по ним можно за секунду, не сравнивая сами файлы.
Это и есть хеш, он же контрольная сумма, он же отпечаток. Автор считает его от своего файла и публикует. Вы считаете от своего и сравниваете. Совпали, значит файлы одинаковы до последнего байта. Формула открытая и одна на всех, поэтому сумму, посчитанную на Windows, можно сверить с суммой, посчитанной на Mac или в браузере.
Откуда берётся подмена
Между сайтом и вашим диском есть дорога, и на ней файл могут заменить. Зеркало, которое «просто быстрее качает». Заражённый роутер в отеле. Оператор, подставляющий свою рекламу в незашифрованные страницы. Публичный Wi-Fi, где кто-то встал посередине. И самый частый случай: вы скачали файл не с официального сайта, а «с другого адреса, где то же самое», решив, что это то же самое.
HTTPS защищает от многого, но не от последнего. Если вы сами пришли на чужой сайт и сами скачали чужой файл, шифрование канала честно доставило вам подделку. Сумма отвечает на вопрос однозначно: это тот файл, что выпустил автор, или нет.
Для приложений VPN это особенно важно. Файл, который получает права на весь ваш трафик, стоит проверить до установки, а не после. Почему APK не из магазина это отдельный риск, сказано в статье VPN на Android: настройка.
Как посчитать сумму
Откройте контрольную сумму файла и перетащите файл. Считается SHA-256 (стандартный алгоритм отпечатка, 64 символа), рядом по кнопке SHA-1 и SHA-512, если автор опубликовал их. Файл никуда не загружается: он читается в памяти вкладки, и сетевых запросов при этом не происходит, что можно проверить во вкладке «Сеть» инструментов разработчика.
Если у вас есть эталонная сумма, вставьте её в поле рядом: страница сама скажет «совпала» или «не совпала», сравнивать 64 символа глазами не придётся.
Без браузера тоже можно, если вы на компьютере:
Windows: certutil -hashfile файл SHA256
macOS: shasum -a 256 файл
Linux: sha256sum файл
Результат один и тот же на любой системе. В этом весь смысл: сумма зависит от содержимого, а не от того, кто и чем её считал.
Где брать эталон
Вот здесь ошибаются чаще всего. Эталонную сумму надо брать с того источника, которому вы доверяете, а не из того же места, откуда скачали подозрительный файл. Если файл подменили на зеркале, сумму рядом с ним подменили тоже, и они «совпадут». Проверка тогда ничего не значит.
Правильно так: файл откуда угодно, сумма с официального сайта автора. Мы публикуем рядом с каждой нашей загрузкой файл с расширением .sha256: 404vpn.apk.sha256, 404vpn-macos.dmg.sha256, tunnel.apk.sha256. В нём лежит эталон. Скачали приложение с любого зеркала, взяли сумму со страницы загрузки, сравнили.
ОТКУДА БРАТЬ СУММУ
файл и сумма с зеркала ✗ пусто
файл с зеркала, сумма автора ✓ проверка
файл и сумма от автора ✓ проверка
└─ если файл не от автора,
сумма должна быть от него
Сумма не совпала: что это значит
Что это не тот файл. Причины бывают безобидные и нет, и различить их просто.
Безобидные. Скачали другую версию: автор обновил файл, а сумму на странице ещё нет, или наоборот. Файл не докачался. Браузер распаковал архив на лету. Во всех этих случаях повторное скачивание с официального сайта даёт совпадение.
Не безобидные. Скачали заново с того же места, сумма снова не совпадает с авторской, а с сайта автора файл совпадает. Значит, на том месте лежит другой файл. Что в нём, вы не узнаете, и узнавать не надо: удалить, не запуская.
Простое правило: несовпадение это не «проверить ещё раз глазами», а «не запускать, пока не совпадёт».
Что сумма не проверяет
Сумма подтверждает, что файл не изменился с момента, как автор посчитал эталон. Она не говорит, что сам автор честный, и не говорит, что в файле нет ошибок. Если вы доверяете автору, сумма гарантирует, что получили именно его файл. Если не доверяете, сумма не поможет: она с той же точностью подтвердит подлинность вредоносного файла, выпущенного тем, кому вы зря поверили.
И она не заменяет подпись. Подпись отвечает ещё и на вопрос «кто это выпустил», а сумма только «это то же самое или нет». Для скачанного приложения этого обычно достаточно, если сумма взята с сайта, которому вы доверяете.
Скажу, как делал бы сам: проверять всё подряд не стал бы. Проверял бы три категории: приложения, которые получают широкие права (VPN, антивирус, всё с доступом к системе), файлы с зеркал и торрентов, и всё, что пришло по ссылке от незнакомого человека. На это уходит секунда, а сэкономить может очень много.
КОГДА СВЕРЯТЬ ОБЯЗАТЕЛЬНО
[ ] приложение с широкими правами
[ ] файл с зеркала или торрента
[ ] файл от незнакомого человека
[ ] сумма взята НЕ оттуда же, откуда файл
└─ последний пункт делает
первые три осмысленными
Если сумма не совпала, а понять, безобидная ли причина, не получается, дайте нейросети обе суммы и историю файла.
Помоги понять, почему не совпала контрольная
сумма файла.
Файл: (что это, откуда скачан).
Эталон взят: (с сайта автора / рядом с файлом /
не знаю).
Моя сумма: (вставьте). Эталон: (вставьте).
Скачивал повторно: (да, сумма та же / нет).
Скажи, похоже ли это на другую версию или
недокачку, или на подмену, и что сделать
дальше. Не советуй запускать файл.
Коротко
Имя и размер подделать можно, сумму нет. Перетащили файл, получили SHA-256, сравнили с эталоном с сайта автора. Совпало, файл тот самый. Не совпало, не запускать. Главная ошибка: брать эталон оттуда же, откуда пришёл подозрительный файл, тогда проверка не значит ничего.