Преминете към съдържанието
Обратно към Нимчат

База знания Под капака

Проверка на компилацията

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

Възпроизводими конструкции

Изграждането на приложението излъчва a build-manifest.json съдържащ ангажимента на източника, a SHA-256 хеш на всеки сервиран HTML, JavaScript и CSS актив и единичен bundleHash над целия този набор от активи.

Резултатът зависи само от изходното съдържание - дори записаното време за изграждане е клеймото на commit, а не момента, в който компилацията е стартирана - така че всеки, който възстановява същото commit получава идентични по байт файлове и същите bundleHash.

След това GitHub Action възстановява всеки комит независимо и подписва произхода на компилацията атестации за хеша и манифеста, така че има подписан запис, обвързващ a bundleHash към ангажимент в хранилището, произведен от нещо различно от разгръщане.

Какво проверява диалоговият прозорец Информация

За в заглавката изпълнява проверката на живо във вашия браузър.

Диалоговият прозорец Относно Nymchat, показващ версията, целостта на компилацията и гарантиращ статус на канарче.
Диалоговият прозорец About: версия, цялост на компилация, гаранция за канарче и директна връзка с разработчика.

Той повторно извлича всеки актив, който страницата действително работи, хешира го с Web Crypto API и сравнява с манифеста. Тогава - и това е важната част - то преизчислява bundleHash от хъшовете то просто изчислено, не от всичко, което манифестът твърди, и го търси в подписаните атестации на хранилището чрез GitHub API.

Това е, което спира внедряването да гарантира само за себе си: обслужване на модифицирани файлове заедно с съвпадащ манифест все още е неуспешен, тъй като преизчисленият хеш няма атестация.

СтатусСредства
&проверете; Потвърдено официално приложение (n/n)Всеки актив съвпада, преизчисленият хеш на пакета се удостоверява от хранилището, и страницата се обслужва от официалния домейн.
⚠ Проверена компилация · не е официалното приложениеКодът е оригинален и удостоверен, но това е огледало на друг домейн. Огледалото не може да премахне това предупреждение без проверката да е неуспешна.
✗ НесъответствиеЕдин актив не хешира това, което се казва в манифеста.
✗ Неофициална компилацияПреизчисленият хеш на пакета няма атестация от хранилището — самостоятелно направен манифест.
⚠ Произходът е недостижимAPI на GitHub не може да бъде достигнат, така че атестацията не може да бъде проверена по двата начина.

Проверете го сами

Създайте отново ангажимента на имената на диалоговия прозорец About и сравнете:

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>"

Отпечатаният хеш трябва да съвпада както с този в диалоговия прозорец About, така и с този в този комит обобщение на изпълнението на произхода на компилацията. Можете също да проверите подписа директно с GitHub CLI:

gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM

Приложенията за Android и iOS

Проверката по-горе е проверка на уеб приложение и причината си струва да се посочи ясно: родно приложение не може да направи същото на себе си. Това, което работи на вашия телефон, е компилиран машинен код, а не източник в хранилището и нищо, което приложението може да изчисли на устройството, не се свързва с друго.

Android може да направи следващото най-добро нещо. Инсталираният .apk е файл, който приложението може да прочете и хеш, а хешът на всяка публикувана версия вече е публичен: публикуване в Zapstore подписва събитие Nostr, носещо SHA-256 на APK и SHA-256 на неговия сертификат за подписване. Така че Android За диалоговият прозорец хешира APK, от който се изпълнява, извлича подписаните събития, запазва само тези, подписани от ключа на разработчика, и сравнява. Показва двамата хешове, така че можете да повторите проверката на устройството: изтеглете публикувания APK, стартирайте sha256sum върху него и вие вижте същото събитие.

Приложение, инсталирано от Google Play, не може да бъде проверено по този начин, и това не е знак, че нещо не е наред. Google подписва всяко качване със свой собствен ключ и изгражда отделен APK за всяко устройство, така че това, което се приземява на телефона ви, не е файлът, произведен от разработчика и неговият хеш не съвпада с нищо, което може да бъде публикувано. Приложението разпознава инсталацията на Play и казва така, вместо да докладва за неуспех.

iOS изобщо не може да се провери. Apple криптира и преподписва всяко изтегляне индивидуално, така че хешът, изчислен на вашия iPhone, е уникален за вашия iPhone и не съвпада с нищо публикувани навсякъде. Диалоговият прозорец Информация казва това директно, вместо да показва успокоение състояние, което не означава нищо. Ако искате Nymchat, който можете да потвърдите на хардуера на Apple, използвайте мрежата приложение, което проверява всеки файл, който изпълнява.

Какво нищо от това не доказва

Проверката, която едно приложение изпълнява само по себе си, не може да докаже, че приложението е честно - който и да го е променил може да премахне и чека. Това, което доказва, е обикновеният случай: че копието ви инсталирано е копието, което е публикувано. Това си струва да има, защото го цени сравненията са публични, така че някой друг освен вас може да ги провери и да не се съгласи.

Канарчето варант

Варантът е изявление, публикувано по фиксиран график, което разработчикът има не са получили секретна правителствена заповед, която им е забранено да разкриват — a Писмо за национална сигурност, заповед на FISA. Разработчикът може да бъде принуден да мълчи такава заповед, но не може да бъде принуден да лъже, така че канарчето застоява или изчезва самият сигнал.

То живее в canary.json в основата на хранилището и се извлича директно от GitHub, така че неговата история може да се проверява независимо от това, което казва внедреният сайт. Диалоговият прозорец Информация го кодира с цвят:

ЦвятСредства
Зелено — всичко ясноПодписан, актуален и подписът съответства на ключа на разработчика. Не е получена тайна поръчка.
Жълто — просрочено или не всичко е ясноНе е обновен до посочената дата или до allClear флагът е фалшив. Не може да се изключи заглушена поръчка.
червено — невалиден подпис или го нямаПодписът не съответства на ключа на програмиста или файлът е премахнат изцяло. Приемете това като сериозно предупреждение.

Котвата на свежестта

Подписаното канарче вгражда най-новата височина на биткойн блок и хеш в момента на подписване. Този хеш не може да е бил известен преди съществуването на блока, което доказва, че канарчето е било подписан след конкретен момент от време, а не предварително подписани групово месеци по-рано. Диалоговият прозорец About свързва котвата с изследовател на блокове, така че можете да го проверите.