База знаний Под капотом
Проверка сборки
Открытый исходный код помогает только в том случае, если код, который вы используете, является кодом, который был опубликовано. Nymchat построен детерминированно, поэтому вы можете проверить это самостоятельно, изнутри приложение или из терминала.
Эта страница для удобства переведена автоматически. Применяется английский оригинал.
Воспроизводимые сборки
При создании приложения выдается build-manifest.json содержащий исходный коммит,
Хэш SHA-256 каждого предоставленного ресурса HTML, JavaScript и CSS, а также один
bundleHash по всему этому набору активов.
Результат зависит только от исходного контента — даже записанное время сборки является
временную метку коммита, а не момент запуска сборки, поэтому любой, кто пересобирает ту же самую
commit получает байт-идентичные файлы и то же самое bundleHash.
Затем действие GitHub перестраивает каждый коммит независимо и подписывает происхождение сборки.
аттестации для хеша и манифеста, поэтому есть подписанная запись, связывающая
bundleHash к коммиту в репозитории, созданному чем-то отличным от
развертывание.
Что проверяет диалоговое окно «О программе»
О в шапке проверка выполняется в реальном времени, в вашем браузере.
Он повторно извлекает каждый актив, который фактически запущен на странице, хеширует его с помощью Web Crypto API и
сравнивается с манифестом. Затем — и это самое важное — это
пересчитывает bundleHash из хешей это просто рассчитал, а не из
все, что утверждается в манифесте, и ищет это в подписанных аттестациях репозитория.
через API GitHub.
Именно это мешает развертыванию поручиться за себя: предоставление измененных файлов вместе с соответствующий манифест по-прежнему не удается, поскольку пересчитанный хэш не имеет подтверждения.
| Статус | Означает |
|---|---|
| &проверять; Проверенное официальное приложение (н/н) | Все активы совпадают, пересчитанный хэш пакета подтверждается репозиторием. и страница обслуживается с официального домена. |
| ⚠ Проверенная сборка · не официальное приложение | Код подлинный и сертифицированный, но это зеркало другого домена. Зеркало не может удалить это предупреждение, не пройдя проверку. |
| ✗ Несоответствие | Актив не хэшируется с тем, что указано в манифесте. |
| ✗ Неофициальная сборка | Перевычисленный хэш пакета не имеет подтверждения из репозитория — это самодельный манифест. |
| ⚠ Провенанс недоступен | Доступ к API GitHub невозможен, поэтому аттестацию невозможно проверить ни при каких обстоятельствах. |
Проверяем это сами
Перестройте коммит в именах диалогов «О программе» и сравните:
git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build # prints "Build hash: <bundleHash>"
Напечатанный хеш должен совпадать как с хешем в диалоговом окне «О программе», так и с тем, который указан в этом коммите. сводка пробега build-provenance. Вы также можете проверить подпись напрямую с помощью GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Приложения для Android и iOS
Приведенная выше проверка — это проверка веб-приложения, и причину стоит указать прямо: нативное приложение. не может сделать то же самое с собой. На вашем телефоне работает скомпилированный машинный код, а не исходный код находится в репозитории, и ничто из того, что приложение может вычислить на устройстве, не имеет отношения к другое.
Android может сделать что-то лучшее. Установленный .apk это файл, который приложение может прочитать
и хеш, а хеш каждого опубликованного выпуска уже общедоступен: публикация в
Zapstore
подписывает событие Nostr, содержащее SHA-256 APK и SHA-256 его сертификата подписи. Итак,
Андроид О диалоговое окно хеширует APK, из которого он запущен, и извлекает подписанные файлы.
события, сохраняет только те, которые подписаны ключом разработчика, и сравнивает. Это показывает два
хэши, чтобы можно было повторить проверку вне устройства: скачайте опубликованный APK, запустите
sha256sum на нем, и посмотрите на то же событие сами.
Приложение, установленное из Google Play, нельзя проверить таким способом., и это не признак того, что что-то не так. Google переподписывает каждую загрузку своим собственным ключом и строит отдельный APK для каждого устройства, поэтому то, что приземляется на вашем телефоне, не является файлом, выпущенным разработчиком, и его хеш не соответствует ничему, что может быть опубликовано.
iOS вообще невозможно проверить. Apple шифрует и повторно подписывает каждую загрузку индивидуально, поэтому хэш, вычисленный на вашем iPhone, уникален для вашего iPhone и ничему не соответствует опубликовано где угодно. Диалоговое окно «О программе» говорит об этом прямо, а не обнадеживает. Статус, который ничего не значит. Если вам нужен Nymchat, который вы можете проверить на оборудовании Apple, воспользуйтесь Интернетом. приложение, которое проверяет каждый запущенный файл.
Проверка, которую приложение запускает само по себе, не может доказать его честность — кто бы его ни модифицировал можно было бы и чек убрать. Это доказывает обычный случай: копия, которую вы Установлена копия, которая была опубликована. Это стоит иметь, потому что это ценно. Сравнения являются общедоступными, поэтому кто-то кроме вас может их проверить и не согласиться.
Ордер канарейка
Канарский ордер — это заявление, публикуемое по фиксированному графику, о том, что разработчик нет получили секретный правительственный приказ, который им запрещено разглашать — Письмо национальной безопасности, приказ FISA. Разработчика можно заставить хранить молчание о такой приказ, но его нельзя заставить лгать, поэтому канарейка, которая устареет или исчезнет, является сам сигнал.
Оно живет в canary.json в корне репозитория и извлекается напрямую
из GitHub, поэтому его историю можно проверить независимо от того, что говорит развернутый сайт.
Диалоговое окно «О программе» имеет цветовую маркировку:
| Цвет | Означает |
|---|---|
| Зеленый — все ясно | Подписано, актуально и подпись соответствует ключу разработчика. Никакого секретного приказа получено не было. |
| Желтый — просрочено или не все ясно | Он не был обновлен к указанной дате или его allClear флаг ложный. Не исключено, что приказ будет молчать. |
| Красный — неверная подпись или пропала | Подпись не соответствует ключу разработчика, либо файл удален полностью. Отнеситесь к этому как к серьезному предупреждению. |
Якорь свежести
Подписанная канарейка включает в себя последнюю высоту блока Биткойн и хеш на момент подписания. Этот хеш не мог быть известен до существования блока, что доказывает, что канарейка была подписано после конкретный момент времени, а не предварительно подписанный несколькими месяцами ранее. Диалоговое окно «О программе» связывает якорь с обозревателем блоков, чтобы вы могли его проверить.