2025-08-03 SSP Wallet v1.25.0 выпустила два изменения, которые вместе закрывают одну из самых старых неозвученных слабостей дистрибуции кошельков: вам больше не нужно верить, что бинарь из магазина — это бинарь из репозитория. Релизы теперь собираются детерминированно внутри Docker и подписываются GPG. Кто угодно — не только мы, не только аудитор — может пересобрать из исходников и убедиться, что результат совпадает байт в байт с тем, что мы опубликовали.
Не доверяй, проверяй — применительно к бинарям кошелька
Биткойн-максима «не доверяй, проверяй» обычно звучит про транзакции. Она с той же силой относится к программе, которая их подписывает. Код кошелька может быть открытым и пройденным аудитом и при этом отгружать скомпрометированный бинарник, потому что путь от кода к бинарю проходит через сервер сборки, шаг упаковки, ключ подписи кода и загрузку в магазин. Любое звено можно отравить. Утёкший токен CI, подменённый бинарь в пайплайне, изменённый агент сборки — ничего из этого не затрагивает публичный репозиторий и ничего из этого не видно в git log.
Защитный ответ на эту модель угрозы: сам бинарник должен быть верифицируемым. Не «верифицируемым, потому что мы обещаем». Воспроизводимым посторонними.
Детерминированные сборки в Docker
Именно это и доставляет v1.25.0. Каждый релиз SSP теперь собирается внутри Docker-контейнера с фиксированным базовым образом, фиксированными версиями тулчейна и полностью изолированным окружением. У сборки нет сетевого доступа там, где он не нужен, она не утекает в файловую систему хоста, не запекает в вывод временные метки и пути, специфичные для машины. Вывод — детерминированная функция от входов.
Практическое следствие: одинаковый исходный код даёт одинаковые бинари с одинаковыми контрольными суммами. Возьми тег, собери его в задокументированном контейнере на своей машине — получишь ту же SHA-256, что и мы. Если нет, что-то разошлось между тегом и опубликованным бинарём — и это именно тот сигнал, который вам нужен, потому что единственный честный исход: «бинарь сходится с кодом» или «не сходится».
Это митигация атаки на цепочку поставок. Она не предполагает, что сервер сборки честный. Она не предполагает, что ноутбук разработчика чист. Она ничего не предполагает и даёт посторонним инструменты для проверки.
Релизы, подписанные GPG
Воспроизводимость говорит, что бинарник соответствует дереву исходников. Она сама по себе не говорит, какое дерево исходников настоящее. Это решается подписью GPG.
Каждый артефакт v1.25.0 — бандлы расширения, файл контрольных сумм — подписан ключом релизов SSP. Подпись публикуется рядом с релизом на GitHub. Чтобы проверить загрузку, вы один раз импортируете публичный ключ, запускаете gpg --verify по подписи, и инструмент говорит, цел ли файл и тот ли ключ его подписал, что вы ожидали.
Два механизма складываются. Подпись GPG доказывает «это файл, который выпустила SSP». Детерминированная сборка доказывает «этот файл соответствует этому коммиту». Вместе они снимают разрыв доверия между коммитом и установкой.
Как самому проверить релиз
Страница релиза на GitHub — авторитативный источник точных шагов: отпечаток публичного ключа, имена файлов подписей, команда Docker для воспроизведения сборки. Короткая версия: импортируйте релизный ключ SSP, скачайте файл контрольных сумм и его подпись, запустите gpg --verify по подписи, затем sha256sum -c суммы против скачанного бинаря. Если оба прошли — артефакт цел и подлинный.
Продвинутые пользователи, желающие пойти дальше, могут клонировать тег, запустить задокументированную Docker-сборку и убедиться, что полученный SHA-256 совпадает с опубликованной суммой. Большинство этого не будет делать никогда. Суть в том, что кто-то будет, и любой из них, заметивший расхождение, тут же выводит атаку наружу.
Что меняется
SSP — открытый исходный код с v1.0.0 и пройден аудитом Halborn от и до с момента полной ревизии в начале 2025. v1.25.0 закрывает третью сторону этого треугольника. Открытый исходный код значит, что вы можете прочитать код; аудит — что эксперты его рассмотрели; воспроизводимость плюс подпись — что то, что крутится у вас на машине, действительно есть прочитанный вами код.
Эти три гарантии независимы и складываются. Не воспроизводимый open-source бинарь всё ещё может скрывать компрометацию в пайплайне сборки. Не воспроизводимый аудитированный проект всё ещё может отгрузить подменённый бинарь, которого аудиторы не видели. С v1.25.0 «проверь перед установкой» перестаёт быть стремлением и становится конкретным чек-листом.
Такова история цепочки поставок для самокастодиального кошелька, рассказанная единственно честным способом.