База знаний Под капотом
Проверка сборки
Открытый исходный код помогает только в том случае, если код, который вы используете, является кодом, который был опубликовано. 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
Ордер канарейка
Канарский ордер — это заявление, публикуемое по фиксированному графику, о том, что разработчик нет получили секретный правительственный приказ, который им запрещено разглашать — Письмо национальной безопасности, приказ FISA. Разработчика можно заставить хранить молчание о такой приказ, но его нельзя заставить лгать, поэтому канарейка, которая устареет или исчезнет, является сам сигнал.
Оно живет в canary.json в корне репозитория и извлекается напрямую
из GitHub, поэтому его историю можно проверить независимо от того, что говорит развернутый сайт.
Диалоговое окно «О программе» имеет цветовую маркировку:
| Цвет | Означает |
|---|---|
| Зеленый — все ясно | Подписано, актуально и подпись соответствует ключу разработчика. Никакого секретного приказа получено не было. |
| Желтый — просрочено или не все ясно | Он не был обновлен к указанной дате или его allClear флаг ложный. Не исключено, что приказ будет молчать. |
| Красный — неверная подпись или пропала | Подпись не соответствует ключу разработчика, либо файл удален полностью. Отнеситесь к этому как к серьезному предупреждению. |
Якорь свежести
Подписанная канарейка включает в себя последнюю высоту блока Биткойн и хеш на момент подписания. Этот хеш не мог быть известен до существования блока, что доказывает, что канарейка была подписано после конкретный момент времени, а не предварительно подписанный несколькими месяцами ранее. Диалоговое окно «О программе» связывает якорь с обозревателем блоков, чтобы вы могли его проверить.