
Как проверить скачанный кошелёк: контрольные суммы, подписи и воспроизводимые сборки
Устанавливая кошелёк, вы доверяете тому, что файл на вашем компьютере — это именно то программное обеспечение, которое выпустили его разработчики, а не изменённая копия со взломанного сайта, поддельной страницы загрузки или подменённая сборка. Большинству людей достаточно установки из официального магазина. Но тем, кто предпочитает проверять, а не доверять, кошельки с открытым исходным кодом могут предложить три всё более надёжных инструмента: контрольные суммы, подписи и воспроизводимые сборки.
Вот что доказывает каждый из них и как использовать их с SSP Wallet.
Контрольные суммы: это тот же файл?
Контрольная сумма — это отпечаток файла, который создаёт хеш-функция, например SHA-256. Стоит изменить хотя бы один байт, и отпечаток меняется полностью. Если контрольная сумма скачанного файла совпадает с опубликованной разработчиками, у вас тот же самый файл.
В macOS или Linux её можно вычислить в терминале:
shasum -a 256 ssp-wallet-chrome-v2.1.3.zip
У одной лишь контрольной суммы есть слабое место: если злоумышленник контролирует страницу загрузки, он может подменить и файл, и опубликованную контрольную сумму. Поэтому так важен следующий шаг.
Подписи: это опубликовали разработчики?
Подпись доказывает, кто опубликовал контрольные суммы. Разработчики подписывают файл с контрольными суммами закрытым ключом, и любой, у кого есть соответствующий открытый ключ, может проверить эту подпись. Злоумышленник, изменивший файл или контрольные суммы, не сможет создать действительную подпись без этого закрытого ключа.
Единственное, в чём нельзя ошибиться, — это сам открытый ключ. Получите его из официального источника проекта, сверьте его отпечаток более чем по одному официальному каналу и в дальнейшем используйте один и тот же ключ для каждого релиза.
Воспроизводимые сборки: действительно ли этот файл собран из опубликованного кода?
Подписи доказывают, кто выпустил файл, но не что в нём. Сборочная машина разработчика может быть скомпрометирована и добросовестно подписать вредоносный результат.
Воспроизводимые, или детерминированные, сборки закрывают этот пробел. Процесс сборки зафиксирован так, что один и тот же исходный код на любой машине всегда даёт побайтово идентичный файл. Любой может пересобрать релиз из открытого кода и сравнить контрольные суммы. Если они совпадают, выпущенный файл содержит ровно то, что написано в исходном коде, и ничего больше. В статье Атаки на цепочку поставок и детерминированные сборки объясняется, почему это так важно для кошельков.
Проверка SSP Wallet
Релизы SSP Wallet на GitHub (RunOnFlux/ssp-wallet) собираются детерминированно для Chrome и Firefox и содержат два дополнительных файла: SHA256SUMS со списком контрольных сумм каждого пакета и SHA256SUMS.asc — подпись GPG для этого списка.
1. Скачайте файлы релиза. Со страницы релиза скачайте в одну папку пакет для вашего браузера — с именем вида ssp-wallet-chrome-v2.1.3.zip или ssp-wallet-firefox-v2.1.3.zip — вместе с SHA256SUMS и SHA256SUMS.asc.
2. Проверьте подпись. Импортировав в GPG открытый ключ SSP для подписи релизов, выполните:
gpg --verify SHA256SUMS.asc SHA256SUMS
GPG должен сообщить о действительной подписи от ожидаемого ключа. Если он сообщает о недействительной подписи или неизвестном ключе, остановитесь.
3. Сверьте файлы со списком.
sha256sum -c SHA256SUMS
В macOS то же самое делает shasum -a 256 -c SHA256SUMS. Для каждого скачанного файла должно выводиться OK. Список охватывает и пакет для Chrome, и пакет для Firefox; если вы скачали только один, добавьте --ignore-missing, чтобы второй не отмечался как отсутствующий.
4. При желании соберите его сами. Клонируйте репозиторий на теге релиза и запустите детерминированную сборку:
git clone https://github.com/RunOnFlux/ssp-wallet.git
cd ssp-wallet
git checkout <release-tag>
yarn build:deterministic
Сборка выполняется в зафиксированном окружении Docker и записывает собственный SHA256SUMS. Если ваши контрольные суммы совпадают с опубликованными, вы независимо подтвердили, что релиз собран именно из этого исходного кода.
А как же магазины браузеров?
Большинство людей устанавливают SSP Wallet из Chrome Web Store или Firefox Add-ons, и это разумный выбор: установленные из магазина расширения обновляются автоматически, а у магазинов есть собственные процессы проверки. Описанные выше контрольные суммы относятся к пакетам релизов на GitHub. Если вы устанавливаете из магазина, самые важные проверки проще: что вы перешли на страницу расширения с официального сайта и что издатель совпадает. В статье Как распознать поддельные приложения-кошельки описаны эти шаги, а гигиена браузерных расширений рассказывает, как затем поддерживать безопасность браузера.
Честный итог
Контрольная сумма доказывает, что у вас тот же файл; подпись доказывает, кто его опубликовал; воспроизводимая сборка доказывает, что файл получен из опубликованного кода. Каждый шаг устраняет свой вид доверия.
Большинство людей установят кошелёк из официального магазина, и это нормально. Если вы хотите проверить всё сами, релизы SSP Wallet дают вам все три инструмента: подписанный список контрольных сумм, проверку одной командой и сборку, которую можно воспроизвести байт в байт.


