Baza znanja Ispod haube
Provjera građe
Otvoreni kod pomaže samo ako je kod koji izvodite onaj koji je bio objavljeno. Nymchat je izgrađen deterministički tako da to možete sami provjeriti iznutra aplikacije ili s terminala.
Ova stranica je strojno prevedena radi praktičnosti. Engleski izvornik je verzija koja se primjenjuje.
Ponovljive građe
Izrada aplikacije emitira a build-manifest.json koji sadrži izvornu predaju, a
SHA-256 raspršivanje svakog posluženog HTML, JavaScript i CSS elementa i jednog
bundleHash nad tim cijelim skupom sredstava.
Izlaz ovisi samo o izvornom sadržaju — čak je i zabilježeno vrijeme izrade
vremensku oznaku uvrštenja, a ne trenutak kada je izgradnja pokrenuta — tako da svatko ponovno izrađuje istu
commit dobiva bajt-identične datoteke i iste bundleHash.
GitHub radnja zatim ponovno gradi svaki commit neovisno i potpisuje podrijetlo izgradnje
potvrde za hash i manifest, tako da postoji potpisani zapis koji povezuje a
bundleHash na predaju u spremištu, koju proizvodi nešto što nije
raspoređivanje.
Što provjerava dijaloški okvir O
Oko u zaglavlju pokreće provjeru uživo, u vašem pregledniku.
Ponovno dohvaća svako sredstvo koje stranica zapravo pokreće, hashira ga s Web Crypto API-jem i
uspoređuje s manifestom. Zatim - a ovo je dio koji je važan - to
ponovno izračunava bundleHash od haseva to samo izračunato, ne iz
sve što manifest tvrdi, i to traži u potpisanim atestima repozitorija
putem GitHub API-ja.
To je ono što sprječava implementaciju da jamči za sebe: posluživanje izmijenjenih datoteka zajedno s odgovarajući manifest i dalje ne uspijeva jer ponovno izračunati hash nema potvrdu.
| Status | Sredstva |
|---|---|
| &provjeriti; Potvrđena službena aplikacija (n/n) | Svako se sredstvo podudara, repozitorij potvrđuje ponovno izračunati hash paketa, i stranica se poslužuje sa službene domene. |
| ⚠ Provjerena verzija · nije službena aplikacija | Kod je originalan i potvrđen, ali ovo je ogledalo na drugoj domeni. Zrcalo ne može ukloniti ovo upozorenje bez neuspjele provjere. |
| ✗ Neusklađenost | Sredstvo se ne raspršuje prema onome što kaže manifest. |
| ✗ Neslužbena izrada | Ponovno izračunati hash paketa nema potvrdu iz repozitorija — vlastiti manifest. |
| ⚠ Podrijetlo nedostupno | Nije bilo moguće doći do GitHub API-ja, pa se atest nije mogao provjeriti ni na koji način. |
Uvjerite se sami
Ponovno izgradite commit imena dijaloškog okvira O i usporedite:
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>"
Ispisani hash trebao bi odgovarati i onom u dijaloškom okviru About i onom u tom urezivanju build-provenance run summary. Također možete provjeriti potpis izravno pomoću GitHub CLI-ja:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Android i iOS aplikacije
Gornja provjera je provjera web-aplikacije, a razlog vrijedi jasno navesti: izvorna aplikacija ne može sebi učiniti istu stvar. Ono što radi na vašem telefonu je kompilirani strojni kod, a ne izvor u repozitoriju i ništa što aplikacija može izračunati na uređaju ne povezuje se s drugo.
Android može napraviti sljedeću najbolju stvar. Instaliran .apk je datoteka koju aplikacija može čitati
i hash, a hash svakog objavljenog izdanja već je javan: objavljivanje na
Zapstore
potpisuje Nostr događaj koji nosi SHA-256 APK-a i SHA-256 certifikata za potpisivanje. Dakle,
Android Oko dijalog raspršuje APK iz kojeg se pokreće, dohvaća potpisane
događaje, čuva samo one koji su potpisani ključem programera i uspoređuje. Prikazuje njih dvoje
hashes također, tako da možete ponoviti provjeru uređaja: preuzmite objavljeni APK, pokrenite
sha256sum na njemu, i sami pogledajte isti događaj.
Aplikacija instalirana s Google Playa ne može se provjeriti na ovaj način, i to nije znak da ništa nije u redu. Google ponovno potpisuje svaki upload s vlastitim ključem i gradi zasebni APK za svaki uređaj, tako da ono što se nalazi na vašem telefonu nije datoteka koju je proizveo programer i njegov hash ne odgovara ničemu što bi se moglo objaviti. Aplikacija prepoznaje instalaciju Play i kaže tako umjesto da izvještava o neuspjehu.
iOS se uopće ne može provjeriti. Apple šifrira i ponovno potpisuje svako preuzimanje pojedinačno, tako da je hash izračunat na vašem iPhoneu jedinstven za vaš iPhone i ne odgovara ničemu objavljen bilo gdje. Dijaloški okvir O tome govori izravno, a ne daje utjehu status koji ništa ne znači. Ako želite Nymchat koji možete potvrditi na Apple hardveru, upotrijebite web aplikacija koja provjerava svaku datoteku koju pokreće.
Provjera koju aplikacija sama pokreće ne može dokazati da je aplikacija poštena - tko god ju je izmijenio mogao ukloniti i ček. Ono što dokazuje je običan slučaj: da vas kopija instalirana je kopija koja je objavljena. To vrijedi imati jer to vrijedi usporedbe su javne, tako da ih netko osim vas može provjeriti i ne složiti se.
Kanarinac s nalogom
Kanarinac naloga je izjava, objavljena prema fiksnom rasporedu, koju ima programer ne primili su tajnu vladinu naredbu koju je zabranjeno otkriti — a Pismo o nacionalnoj sigurnosti, nalog FISA-e. Programer može biti prisiljen šutjeti o tome takav red, ali se ne može prisiliti na laž, tako da kanarinac ustajao ili nestaje sam signal.
Živi u canary.json u korijenu repozitorija i izravno se dohvaća
s GitHuba, tako da se njegova povijest može revidirati neovisno o tome što kaže postavljeno mjesto.
Dijaloški okvir O označava ga bojom:
| Boja | Sredstva |
|---|---|
| zelena — sve jasno | Potpisan, aktualan, a potpis odgovara ključu programera. Nikakva tajna naredba nije primljena. |
| Žuta boja — kasni ili nije sve jasno | Nije osvježeno do navedenog datuma, niti je allClear zastava je lažna. Ne može se isključiti prešućena naredba. |
| crveno — nevažeći potpis ili nestao | Potpis ne odgovara ključu programera ili je datoteka u potpunosti uklonjena. Shvatite ovo kao ozbiljno upozorenje. |
Sidro svježine
Potpisani kanarinac ugrađuje najnoviju visinu i hash bloka Bitcoina u trenutku potpisivanja. Taj hash nije mogao biti poznat prije nego što je blok postojao, što dokazuje da je kanarinac bio potpisan nakon određenoj točki u vremenu, a ne unaprijed potpisanim skupnim mjesecima ranije. Dijaloški okvir About povezuje sidro s block explorerom tako da ga možete provjeriti.