Treci la conținut
Înapoi la Nymchat

Baza de cunoștințe Sub capotă

Se verifică construcția

Sursa deschisă ajută doar dacă codul pe care îl executați este codul care a fost publicat. Nymchat este construit în mod determinist, astfel încât să puteți verifica asta singur, din interiorul aplicație sau de pe un terminal.

Construcții reproductibile

Construirea aplicației emite a build-manifest.json care conține comiterea sursă, a Hash SHA-256 pentru fiecare material HTML, JavaScript și CSS servit și unul singur bundleHash asupra întregului set de active.

Ieșirea depinde doar de conținutul sursă - chiar și timpul de construcție înregistrat este marca temporală a commit-ului, mai degrabă decât momentul în care a rulat construcția - deci oricine reconstruiește același lucru commit primește fișiere identice la octeți și la fel bundleHash.

O acțiune GitHub reconstruiește apoi fiecare commit în mod independent și semnează originea construcției atestări pentru hash și manifest, deci există o înregistrare semnată care leagă a bundleHash la un commit în depozit, produs de altceva decât de desfășurare.

Ce verifică dialogul Despre

Despre în antet rulează verificarea live, în browser.

Fereastra de dialog Nymchat Despre, care arată versiunea, integritatea construcției și garantează starea de canar.
Dialogul Despre: versiunea, integritatea construirii, garantează canar și o linie directă cu dezvoltatorul.

Preluează din nou fiecare material pe care pagina îl rulează de fapt, îl face hash cu API-ul Web Crypto și se compară cu manifestul. Apoi - și aceasta este partea care contează - ea recalculează bundleHash din hashuri ea doar calculat, nu de la orice pretinde manifestul și caută asta în atestările semnate ale depozitului prin API-ul GitHub.

Acesta este ceea ce oprește o implementare să se garanteze pentru sine: servirea fișierelor modificate împreună cu un manifest de potrivire încă eșuează, deoarece hashul recalculat nu are nicio atestare.

StareMijloace
&verifica; Aplicație oficială verificată (n/n)Fiecare material se potrivește, hash-ul pachetului recalculat este atestat de depozit, şi pagina este servită din domeniul oficial.
⚠ Versiunea verificată · nu este aplicația oficialăCodul este autentic și atestat, dar aceasta este o oglindă pe alt domeniu. O oglindă nu poate elimina acest avertisment fără a eșua verificarea.
✗ NepotrivireUn activ nu corespunde cu ceea ce spune manifestul.
✗ Construcție neoficialăHash-ul pachetului recalculat nu are nicio atestare din depozit - un manifest auto-realizat.
⚠ Proveniența inaccesibilAPI-ul GitHub nu a putut fi accesat, astfel încât atestarea nu a putut fi verificată în niciun caz.

Verificați singuri

Reconstruiți numele casetei de dialog Despre commit și comparați:

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

Hash-ul imprimat ar trebui să se potrivească atât cu cel din dialogul Despre, cât și cu cel din acel commit rezumatul executării build-provenency. De asemenea, puteți verifica semnătura direct cu CLI-ul GitHub:

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

Aplicațiile pentru Android și iOS

Verificarea de mai sus este o verificare a aplicației web, iar motivul merită menționat clar: o aplicație nativă nu poate face același lucru pentru sine. Ceea ce rulează pe telefonul tău este codul de mașină compilat, nu sursă în depozit și nimic pe care aplicația nu poate calcula pe dispozitiv nu are legătură cu altele.

Android poate face următorul lucru cel mai bun. Instalat .apk este un fișier pe care aplicația îl poate citi și hash, iar hash-ul fiecărei versiuni publicate este deja public: publicarea către Zapstore semnează un eveniment Nostr care poartă SHA-256 al APK-ului și SHA-256 al certificatului de semnare. Deci Android Despre dialog hashează APK-ul de pe care rulează, preia cele semnate evenimente, le păstrează doar pe cele semnate de cheia dezvoltatorului și le compară. Îi arată pe cei doi hash-uri, de asemenea, astfel încât să puteți repeta verificarea de pe dispozitiv: descărcați APK-ul publicat, rulați sha256sum pe el și priviți singuri același eveniment.

O aplicație instalată de pe Google Play nu poate fi verificată în acest felGoogle re-semnează fiecare încărcare cu propria cheie și construiește un APK separat pentru fiecare dispozitiv, astfel încât ceea ce aterizează pe telefonul dvs. nu este fișierul produs de dezvoltator și hash-ul său nu se potrivește cu nimic care ar putea fi publicat. Aplicația recunoaște o instalare Play și spune așa mai degrabă decât să raporteze un eșec.

iOS nu poate fi verificat deloc. Apple criptează și resemnează fiecare descărcare individual, astfel încât un hash calculat pe iPhone este unic pentru iPhone și nu se potrivește cu nimic publicat oriunde. Fereastra de dialog Despre spune acest lucru mai degrabă decât să arate o liniștitoare statut care nu înseamnă nimic. Dacă doriți un Nymchat pe care îl puteți verifica pe hardware Apple, utilizați web-ul aplicație, care verifică fiecare fișier pe care îl rulează.

Ceea ce nimic din toate acestea nu demonstrează

O verificare pe care o rulează o aplicație pe ea însăși nu poate dovedi că aplicația este sinceră - oricine a modificat-o ar putea elimina și cecul. Ceea ce dovedește este cazul obișnuit: că te copiază instalat este copia care a fost publicată. Merită să aveți asta pentru că îl prețuiește comparațiile sunt publice, așa că altcineva decât tine poate să le verifice și să nu fie de acord.

Canarul de mandat

Un canar de mandat este o declarație, publicată pe un program fix, pe care dezvoltatorul o are nu a primit un ordin secret al guvernului pe care le este interzis să îl dezvăluie — a Scrisoare de securitate națională, un ordin FISA. Dezvoltatorul poate fi obligat să tacă un astfel de ordin, dar nu poate fi obligat să mintă, așa că canarul devine învechit sau dispare însuși semnalul.

Trăiește în canary.json la rădăcina depozitului și este preluat direct de la GitHub, astfel încât istoria sa este auditabilă independent de ceea ce spune site-ul implementat. Fereastra de dialog Despre codifică culorile:

CuloareMijloace
Verde — totul clarSemnat, curent și semnătura se potrivește cu cheia dezvoltatorului. Nu a fost primit niciun ordin secret.
Galben — întârziat sau nu este clarNu a fost reîmprospătat până la data declarată sau la data sa allClear steag este fals. O comandă redusă la tăcere nu poate fi exclusă.
Roşu — semnătură nevalidă sau dispărutSemnătura nu se potrivește cu cheia dezvoltatorului sau fișierul a fost eliminat în întregime. Tratează asta ca pe un avertisment serios.

Ancora de prospețime

Canarul semnat încorporează cea mai recentă înălțime a blocului Bitcoin și hash în momentul semnării. Acel haș nu ar fi putut fi cunoscut înainte de a exista blocul, ceea ce demonstrează că canarul a fost semnat după un anumit moment în timp, mai degrabă decât pre-semnat în vrac luni mai devreme. Fereastra de dialog Despre leagă ancora la un explorator de blocuri, astfel încât să o puteți verifica.