Перейти к содержимому
Вернуться в Нимчат

База знаний Под капотом

Проверка сборки

Открытый исходный код помогает только в том случае, если код, который вы используете, является кодом, который был опубликовано. Nymchat построен детерминированно, поэтому вы можете проверить это самостоятельно, изнутри приложение или из терминала.

Воспроизводимые сборки

При создании приложения выдается build-manifest.json содержащий исходный коммит, Хэш SHA-256 каждого предоставленного ресурса HTML, JavaScript и CSS, а также один bundleHash по всему этому набору активов.

Результат зависит только от исходного контента — даже записанное время сборки является временную метку коммита, а не момент запуска сборки, поэтому любой, кто пересобирает ту же самую commit получает байт-идентичные файлы и то же самое bundleHash.

Затем действие GitHub перестраивает каждый коммит независимо и подписывает происхождение сборки. аттестации для хеша и манифеста, поэтому есть подписанная запись, связывающая bundleHash к коммиту в репозитории, созданному чем-то отличным от развертывание.

Что проверяет диалоговое окно «О программе»

О в шапке проверка выполняется в реальном времени, в вашем браузере.

Диалоговое окно «О программе» Nymchat, показывающее версию, целостность сборки и гарантированный статус canary.
Диалоговое окно «О программе»: версия, целостность сборки, гарантия canary и прямая связь с разработчиком.

Он повторно извлекает каждый актив, который фактически запущен на странице, хеширует его с помощью 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 флаг ложный. Не исключено, что приказ будет молчать.
Красный — неверная подпись или пропалаПодпись не соответствует ключу разработчика, либо файл удален полностью. Отнеситесь к этому как к серьезному предупреждению.

Якорь свежести

Подписанная канарейка включает в себя последнюю высоту блока Биткойн и хеш на момент подписания. Этот хеш не мог быть известен до существования блока, что доказывает, что канарейка была подписано после конкретный момент времени, а не предварительно подписанный несколькими месяцами ранее. Диалоговое окно «О программе» связывает якорь с обозревателем блоков, чтобы вы могли его проверить.