База знания Под капака
Проверка на компилацията
Отвореният код помага само ако кодът, който изпълнявате, е кодът, който е бил публикувани. Nymchat е изграден детерминистично, така че можете да проверите това сами отвътре приложение или от терминал.
Тази страница е машинно преведена за удобство. Английският оригинал е версията, която се прилага.
Възпроизводими конструкции
Изграждането на приложението излъчва a build-manifest.json съдържащ ангажимента на източника, a
SHA-256 хеш на всеки сервиран HTML, JavaScript и CSS актив и единичен
bundleHash над целия този набор от активи.
Резултатът зависи само от изходното съдържание - дори записаното време за изграждане е
клеймото на commit, а не момента, в който компилацията е стартирана - така че всеки, който възстановява същото
commit получава идентични по байт файлове и същите bundleHash.
След това GitHub Action възстановява всеки комит независимо и подписва произхода на компилацията
атестации за хеша и манифеста, така че има подписан запис, обвързващ a
bundleHash към ангажимент в хранилището, произведен от нещо различно от
разгръщане.
Какво проверява диалоговият прозорец Информация
За в заглавката изпълнява проверката на живо във вашия браузър.
Той повторно извлича всеки актив, който страницата действително работи, хешира го с 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 свързва котвата с изследовател на блокове, така че можете да го проверите.