CLI AI

Проверить загрузку: sha256sum -c, а потом подпись

2026-07-30

sha256sum -c SHA256SUMS проверяет все файлы из списка сумм и печатает OK или FAILED по каждому — никакого сравнения шестнадцатеричных строк глазами. Это доказывает, что файл скачался целиком. Но не доказывает, что релиз настоящий: для этого проверяют подпись самого файла сумм.

1. Проверить всё, что скачано

clai
$ clai проверь контрольные суммы скачанных файлов→ sha256sum -c SHA256SUMSapp-1.2.0-darwin-arm64.tar.gz: OKapp-1.2.0-linux-amd64.tar.gz: OKapp-1.2.0-linux-arm64.tar.gz: OK

SHA256SUMS — обычный текстовый файл из строк «хеш, два пробела, имя», который проекты выкладывают рядом с релизом. -c сравнивает сам, ради этого всё и затевается.

2. Скачан только один файл из списка

clai
$ clai проверь только тот файл, который у меня есть→ sha256sum -c --ignore-missing SHA256SUMSapp-1.2.0-linux-amd64.tar.gz: OK

Без --ignore-missing проверка ругается на каждый отсутствующий файл сообщением FAILED open or read и завершается с кодом 1, хотя с вашим файлом всё в порядке. Это самая частая причина решить, что проверка не прошла.

3. Как выглядит настоящий провал

clai
$ clai проверь файл после оборванной загрузки→ sha256sum -c --ignore-missing SHA256SUMSapp-1.2.0-linux-amd64.tar.gz: FAILEDsha256sum: WARNING: 1 computed checksum did NOT matchsha256sum: SHA256SUMS: no file was verified

Проверено переворотом одного байта в архиве. Код возврата 1 — то, на что смотрит скрипт. FAILED означает «файл не тот», FAILED open or read — «файла нет»: это разные беды.

4. Один хеш без файла сумм

clai
$ clai сверь файл с хешем со страницы загрузки→ echo "<hash>  app-1.2.0-linux-arm64.tar.gz" | sha256sum -c -app-1.2.0-linux-arm64.tar.gz: OK

Два пробела между хешем и именем — часть формата, а не типографика. Так проверяют, когда на сайте опубликован один хеш, а файла сумм нет.

5. Подпись важнее хеша

clai
$ clai проверь подпись файла контрольных сумм→ gpg --verify SHA256SUMS.asc SHA256SUMSgpg: Signature made Thu Aug 27 23:09:38 2026 +07gpg:                using EDDSA key CDDC16ABE7FBF699F0CA9D6C7CA6166B006AB9B0gpg: Good signature from "App Releases <[email protected]>" [ultimate]

Эту часть пропускает большинство руководств. Хеш доказывает, что байты дошли целиком, а не что релиз выложил его автор: злоумышленник, подменивший и архив, и SHA256SUMS, получит сходящиеся суммы. Подпись такого не переживает — после правки одного символа в файле сумм gpg отвечает BAD signature from "App Releases <releases@example.com>", проверено.

6. Когда ключа нет

clai
$ clai проверь подпись без ключа проекта→ gpg --verify SHA256SUMS.asc SHA256SUMSgpg: Signature made Thu Aug 27 23:09:38 2026 +07gpg:                using EDDSA key CDDC16ABE7FBF699F0CA9D6C7CA6166B006AB9B0gpg: Can't check signature: No public key

Это не «подпись плохая», а «проверять нечем». Ключ забирают командой gpg --recv-keys <отпечаток> — и отпечаток нужно взять не с той страницы, откуда скачан файл, иначе проверка проверяет сама себя.

Gotchas

  • FAILED и FAILED open or read — разные беды. Первое означает, что файл повреждён или подменён, второе — что его нет в каталоге. --ignore-missing лечит только второе.
  • Совпадение хеша — не подлинность. Хеш защищает от оборванной загрузки, а не от подменённого релиза. Подлинность даёт подписанный файл сумм плюс ключ, полученный независимо от страницы загрузки.
  • Формат строки строгий. Ровно два пробела между хешем и именем; один пробел или табуляция — и вы получите no properly formatted checksum lines found.

Related questions

Чем sha256sum отличается от md5sum? Алгоритмом. MD5 давно ломается подбором коллизий, поэтому подлинность им не установить; оборванную загрузку он всё ещё поймает, но повода выбирать его нет.

Как проверить хеш в Windows? certutil -hashfile app.tar.gz SHA256 в cmd или Get-FileHash в PowerShell. Форматирование другое, значение то же.

Что делать, если суммы не сошлись? Скачать заново — чаще всего виновата оборванная передача. Если не сошлись и со второго раза, менять зеркало и обязательно проверять подпись.

See also

CliAI пишет строку проверки — вместе с флагом для случая «скачан один файл» — и показывает её до запуска. Поставить одной строкой.