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.
Această pagină este tradusă automat pentru comoditate. Originalul în limba engleză este versiunea care se aplică.
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.
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.
| Stare | Mijloace |
|---|---|
| &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. |
| ✗ Nepotrivire | Un 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 inaccesibil | API-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ă.
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:
| Culoare | Mijloace |
|---|---|
| Verde — totul clar | Semnat, curent și semnătura se potrivește cu cheia dezvoltatorului. Nu a fost primit niciun ordin secret. |
| Galben — întârziat sau nu este clar | Nu 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ărut | Semnă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.