Base di cunniscenza Sottu u cappucciu
Verificà a custruzione
Open source aiuta solu se u codice chì site in esecuzione hè u codice chì era publicatu. Nymchat hè custruitu deterministically cusì pudete verificà chì tù stessu, da l'internu app o da un terminal.
Questa pagina hè tradutta in macchina per comodità. L'uriginale in inglese hè a versione chì si applica.
Custruzzioni riproducibili
Custruisce l'app emette a build-manifest.json chì cuntene l'impegnu fonte, a
SHA-256 hash di ogni asset HTML, JavaScript è CSS servitu, è un solu
bundleHash nantu à tuttu questu set di attivu.
L'output dipende solu da u cuntenutu di a fonte - ancu u tempu di creazione registratu hè u
commit's timestamp piuttostu cà u mumentu chì a custruzione hè stata fatta - cusì qualcunu ricustruisce u listessu
commit riceve i schedarii identici à i byte è u listessu bundleHash.
Una Azione GitHub poi ricostruisce ogni impegnu indipindente è firma a custruzzione-provenza
attestazioni per l'hash è u manifestu, cusì ci hè un registru firmatu ligatu a
bundleHash à un commit in u repository, pruduttu da qualcosa altru ch'è u
implementazione.
Ciò chì verifica u dialogu About
À propositu in l'intestazione corre u cuntrollu in diretta, in u vostru navigatore.
Recupera ogni attivu chì a pagina hè veramente in esecuzione, l'hash cù l'API Web Crypto, è
compara cun u manifestu. Allora - è questu hè a parte chì importa - hè
ricalcula u bundleHash da i hashes lu appena calculatu, micca da
tuttu ciò chì u manifestu pretende, è cerca chì in l'attestati firmati di u repository
attraversu l'API GitHub.
Hè ciò chì impedisce à una implementazione di cunfirmà per sè stessu: serve i schedari mudificati inseme cù un manifestu currispundente falla sempre, perchè l'hash recalculatu ùn hà micca attestazione.
| Status | I mezi |
|---|---|
| & verificate; App ufficiale verificata (n/n) | Ogni asset currisponde, l'hash di bundle ricalculatu hè attestatu da u repository, è a pagina hè servita da u duminiu ufficiale. |
| ⚠ Custruzione verificata · micca l'app ufficiale | U codice hè genuinu è attestatu, ma questu hè un specchiu nantu à un altru duminiu. Un specchiu ùn pò micca sguassà stu avvisu senza verificazione falluta. |
| ✗ Mismatch | Un attivu ùn hà micca à ciò chì u manifestu dice. |
| ✗ Custruzione non ufficiale | L'hash di bundle recalculatu ùn hà micca attestazione da u repository - un manifestu self-made. |
| ⚠ Provenienza inaccessibile | L'API GitHub ùn pò micca esse ghjunta, cusì l'attestazione ùn pò esse verificata in ogni modu. |
Verificà lu stessu
Ricustruite l'impegnu di i nomi di dialogu About è paragunate:
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>"
L'hash stampatu deve currisponde à quellu in u dialogu About è quellu in quellu commit's riassuntu di custruzzione-provenza. Pudete ancu verificà a firma direttamente cù u GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
L'app Android è iOS
A verificazione sopra hè una verificazione di l'app web, è u mutivu vale a pena dichjarà chjaramente: una app nativa ùn pò micca fà a stessa cosa per sè stessu. Ciò chì corre nantu à u vostru telefunu hè un codice macchina compilatu, micca u surghjente in u repository, è nunda chì l'app pò calculà nantu à u dispusitivu ùn hè in relazione cù u altru.
Android pò fà u prossimu megliu. U installatu .apk hè un schedariu chì l'app pò leghje
è l'hash, è l'hash di ogni versione publicata hè digià publicu: pubblicazione à u
Zapstore
firma un avvenimentu Nostr chì porta u SHA-256 di l'APK è u SHA-256 di u so certificatu di firma. Allora u
Android À propositu dialogu hashes l'APK da cui corre, recupera quelli firmati
avvenimenti, mantene solu quelli firmati da a chjave di u sviluppatore, è paragunate. Mostra i dui
i hashes, cusì pudete ripetiri a verificazione di u dispusitivu: scaricate l'APK publicatu, eseguite
sha256sum nantu à questu, è fighjate u stessu avvenimentu.
Una app installata da Google Play ùn pò micca esse verificata in questu modu, è chì questu ùn hè micca un segnu chì quachi cosa ùn va micca. Google ricontrasigna ogni caricamentu cù a so propria chìave è crea un APK separatu per ogni dispozitivu, dunque ciò chì arriva nantu à u vostru telefonu ùn hè micca u filu chì u sviluppatore hà produttu è u so hash ùn risponde à nenti chì puderia esse pubblicatu. L'app riconosce un'installazione da u Play è u dice invece di segnalà un fallimentu. Per verificà una versione da voi, installate direttamente l'APK pubblicatu.
iOS ùn pò esse verificatu in tuttu. Apple cripta è rifirma ogni scaricamentu individually, cusì un hash computed nant'à u vostru iPhone hè unicu à u vostru iPhone è currisponde à nunda publicatu in ogni locu. U dialogu À propositu dici questu francamente invece di mostrà un rassicurante statutu chì significa nunda. Se vulete un Nymchat, pudete verificà nantu à u hardware Apple, utilizate u web app, chì verifica ogni schedariu chì hè in esecuzione.
Un verificatu chì una app funziona nantu à sè stessu ùn pò micca dimustrà chì l'app hè onesta - quellu chì l'hà mudificatu puderia ancu sguassà u cuntrollu. Ciò chì prova hè u casu ordinariu: chì a copia ti installatu hè a copia chì hè stata publicata. Vale a pena avè perchè u valore i paraguni sò publichi, cusì qualcunu altru ch'è vo pudete cuntrollà, è ùn sò micca d'accordu.
U mandatu canarinu
Un canarinu di mandatu hè una dichjarazione, publicata in un calendariu fissu, chì u sviluppatore hà micca ricivutu un ordine secretu di u guvernu chì sò pruibiti di divulgà - a Lettera di Sicurezza Naziunale, un ordine FISA. U sviluppatore pò esse obligatu à stà in silenziu un tali ordine, ma ùn pò micca esse obligatu à menti, cusì u canarinu chì si stanca o sparisce hè ellu stessu u signale.
Vive in canary.json à a radica di u repositoriu è hè ritruvatu direttamente
da GitHub, cusì a so storia hè auditable indipindente di ciò chì dice u situ implementatu.
U dialogu About u codifica di culore:
| Culore | I mezi |
|---|---|
| Verde - tuttu chjaru | Firmatu, attuale, è a firma currisponde à a chjave di u sviluppatore. Nisun ordine secretu hè statu ricevutu. |
| Ghjallu - tardu, o micca tuttu chjaru | Ùn hè statu rinfriscatu da a so data dichjarata, o u so allClear a bandiera hè falsa. Un ordine silenziu ùn pò micca esse esclusu. |
| Rossu - firma invalida, o andata | A firma ùn currisponde à a chjave di u sviluppatore, o u schedariu hè statu eliminatu sanu. Trattate questu cum'è un avvirtimentu seriu. |
L'ancora di freschezza
U canarinu firmatu incorpora l'ultime altezza di bloccu Bitcoin è hash à u mumentu di a firma. Ddu hash ùn pudia esse cunnisciutu prima chì u bloccu esiste, chì prova chì u canarinu era firmatu dopu un puntu specificu in u tempu piuttostu cà pre-firmatu in bulk mesi prima. U dialogu About liga l'ancora à un esploratore di blocchi per pudè verificà.