Перейти до вмісту
Назад до Німчату

База знань Під капотом

Перевірка збірки

Відкритий вихідний код допомагає, лише якщо код, який ви використовуєте, є тим самим опубліковано. Nymchat побудовано детерміновано, тому ви можете перевірити це самостійно, зсередини або з терміналу.

Відтворювані збірки

Створення програми випромінює a build-manifest.json містить вихідний комміт, a Хеш SHA-256 кожного активу HTML, JavaScript і CSS, а також окремого bundleHash над усім набором активів.

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

Потім GitHub Action перебудовує кожен комміт незалежно та підписує походження збірки атестації для хешу та маніфесту, тож існує підписаний запис, що зв’язує a bundleHash до коміту в сховищі, створеного чимось іншим, ніж розгортання.

Що перевіряє діалогове вікно «Про».

про у заголовку запускає перевірку в реальному часі у вашому браузері.

Діалогове вікно «Про Nymchat», яке показує версію, цілісність збірки та гарантує статус канарки.
Діалогове вікно «Про програму»: версія, цілісність збірки, гарантійна програма та прямий зв’язок із розробником.

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

Саме це заважає розгортанню ручатися за себе: обслуговування змінених файлів разом із відповідний маніфест все ще не вдається, оскільки повторно обчислений хеш не має атестації.

Статусзасоби
&перевірити; Перевірений офіційний додаток (n/n)Кожен актив збігається, повторно обчислений хеш пакета засвідчується репозиторієм, і сторінка обслуговується з офіційного домену.
⚠ Перевірена збірка · не офіційний додатокКод справжній і підтверджений, але це дзеркало в іншому домені. Дзеркало не може видалити це попередження, не пройшовши перевірку.
✗ НевідповідністьАктив не хешує те, що зазначено в маніфесті.
✗ Неофіційна збіркаПереобчислений хеш пакета не має атестації зі сховища — маніфест, створений самостійно.
⚠ Походження недоступнеНе вдалося отримати доступ до GitHub API, тому атестацію неможливо перевірити в будь-який спосіб.

Перевірте це самостійно

Перебудуйте коміт імен діалогового вікна Про та порівняйте:

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

Надрукований хеш має збігатися з хеш-кодом у діалоговому вікні «Про програму» та хеш-кодом у коміті підсумок запуску збірки походження. Ви також можете перевірити підпис безпосередньо за допомогою 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 для кожного пристрою, так що те, що приземляється на вашому телефоні, не є файлом, який виробляє розробник, і його хеш не відповідає нічому, що може бути опубліковано.

iOS взагалі неможливо перевірити. Apple шифрує та повторно підписує кожне завантаження окремо, тому хеш, обчислений на вашому iPhone, є унікальним для вашого iPhone і не відповідає жодному опубліковано будь-де. Діалогове вікно «Про» говорить про це прямо, а не заспокоює статус, який нічого не означає. Якщо вам потрібен Nymchat, який можна перевірити на обладнанні Apple, скористайтеся Інтернетом додаток, який перевіряє кожен запущений файл.

Чого це не доводить

Перевірка, яку виконує програма сама по собі, не може підтвердити чесність програми — незалежно від того, хто її змінив також міг зняти чек. Це доводить звичайний випадок: копія вас встановлена копія, яку було опубліковано. Це варто мати, тому що це цінує порівняння є загальнодоступними, тому хтось інший, крім вас, може перевірити їх і не погодитися.

Ордерна канарка

Ордерна канарка - це заява, опублікована за фіксованим графіком, яку має розробник ні отримали таємне урядове розпорядження, яке заборонено розголошувати — a Лист національної безпеки, наказ FISA. Забудовника можна змусити промовчати такий наказ, але не можна змусити брехати, тому канарейка несвіжа або зникає сам сигнал.

Воно живе в canary.json у корені сховища та витягується безпосередньо з GitHub, тому його історію можна перевірити незалежно від того, що повідомляє розгорнутий сайт. Діалогове вікно «Про» позначає його кольором:

колірзасоби
Зелений — все ясноПідписано, актуально, і підпис відповідає ключу розробника. Ніякого секретного наказу не отримано.
Жовтий — прострочено, або не все зрозумілоЙого не було оновлено до зазначеної дати або до його allClear прапор хибний. Не можна виключати замовчування.
Червоний — недійсний підпис або його немаєПідпис не відповідає ключу розробника, або файл повністю видалено. Сприймайте це як серйозне попередження.

Якір свіжості

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