Preskočite na sadržaj
Nazad na Nymchat

Baza znanja Ispod haube

Provjera izrade

Otvoreni izvor pomaže samo ako je kod koji koristite onaj koji je bio objavljeno. Nymchat je izgrađen deterministički tako da to možete sami provjeriti iznutra aplikacije ili sa terminala.

Reproducibilne građe

Izgradnja aplikacije emituje a build-manifest.json koji sadrži izvorno urezivanje, a SHA-256 hash svakog serviranog HTML, JavaScript i CSS sredstva, i jedan bundleHash preko celog skupa sredstava.

Izlaz ovisi samo o izvornom sadržaju — čak je i zabilježeno vrijeme izrade vremensku oznaku urezivanja, a ne trenutak kada je izgradnja pokrenuta — tako da svako ko ponovo gradi isto commit dobija identične fajlove po bajtovima i iste bundleHash.

GitHub Akcija zatim ponovo gradi svaki urezivanje nezavisno i potpisuje poreklo izgradnje potvrde za hash i manifest, tako da postoji potpisani zapis koji veže a bundleHash na urezivanje u spremištu, proizvedeno nečim drugim osim raspoređivanje.

Šta provjerava dijalog O

O u zaglavlju pokreće provjeru uživo, u vašem pretraživaču.

Dijalog o Nymchatu, koji prikazuje verziju, integritet izgradnje i garantira status kanarinca.
Dijalog O: verzija, integritet gradnje, kanarinac garancije i direktna linija do programera.

Ponovo dohvaća svaki materijal koji stranica zapravo radi, hešira ga sa Web Crypto API-jem i poredi sa manifestom. Onda — i ovo je dio koji je bitan — to ponovo izračunava bundleHash od heša to samo izračunato, ne iz sve što manifest tvrdi, i traži to u potpisanim atestima spremišta preko GitHub API-ja.

To je ono što sprečava implementaciju da jamči za sebe: posluživanje modificiranih datoteka zajedno s odgovarajući manifest i dalje ne uspijeva, jer ponovo izračunati hash nema atest.

StatusSredstva
✓ Verificirana zvanična aplikacija (n/n)Svako sredstvo se poklapa, ponovo izračunati hash paketa je potvrđen od strane spremišta, i stranica se poslužuje sa službenog domena.
⚠ Provjerena verzija · nije zvanična aplikacijaKod je originalan i atestiran, ali ovo je ogledalo na drugom domenu. Ogledalo ne može ukloniti ovo upozorenje bez neuspjeha provjere.
✗ NeusklađenostImovina ne hashira ono što manifest kaže.
✗ Nezvanična gradnjaPonovo izračunati heš paketa nema potvrdu iz spremišta — manifest koji je sam napravio.
⚠ Porijeklo nedostižnoGitHub API nije mogao biti dostupan, tako da se potvrda nije mogla provjeriti na bilo koji način.

Provjeravate sami

Ponovo izgradite urezivanje imena dijaloga About i uporedite:

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

Odštampani heš treba da se podudara i sa onim u dijalogu About i sa onim u tom urezivanju build-provenance run sažetak. Potpis možete provjeriti i direktno sa GitHub CLI:

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

Android i iOS aplikacije

Provjera iznad je provjera web aplikacije, a razlog je vrijedan jasnog navođenja: izvorna aplikacija ne može učiniti istu stvar sebi. Ono što radi na vašem telefonu je kompajlirani mašinski kod, a ne kod izvor u spremištu, i ništa što aplikacija može izračunati na uređaju ne odnosi se na to ostalo.

Android može učiniti sljedeću najbolju stvar. Instalirani .apk je datoteka koju aplikacija može čitati i hash, a hash svakog objavljenog izdanja je već javan: objavljivanje na Zapstore potpisuje Nostr događaj koji nosi SHA-256 APK-a i SHA-256 certifikata za potpisivanje. Dakle Android O dijalog hashira APK iz kojeg se pokreće, dohvaća one potpisane događaje, zadržava samo one koje je potpisao programerski ključ i upoređuje. Pokazuje to dvoje hashovi također, tako da možete ponoviti provjeru na uređaju: 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 sa svojim ključem i gradi zaseban APK za svaki uređaj, tako da ono što sleti na vaš telefon nije datoteka koju je proizveo programer i njegov hash ne podudara se sa ničim što bi moglo biti objavljeno. Aplikacija prepoznaje Play instalaciju i kaže tako umjesto da izvještava o neuspjehu. Da biste provjerili izgradnju sami, instalirajte APK objavljen direktno.

iOS se uopće ne može provjeriti. Apple šifrira i ponovo potpisuje svako preuzimanje pojedinačno, tako da je hash izračunat na vašem iPhoneu jedinstven za vaš iPhone i ne odgovara ničemu objavljeno bilo gdje. Dijalog O tome to govori direktno, a ne umirujuće status koji ništa ne znači. Ako želite Nymchat koji možete provjeriti na Apple hardveru, koristite web aplikaciju, koja provjerava svaku datoteku koju pokreće.

Šta ništa od ovoga ne dokazuje

Provjera koju aplikacija pokreće sama ne može dokazati da je aplikacija poštena – ko god da ju je modificirao mogao bi ukloniti i ček. Ono što to dokazuje je običan slučaj: da ste kopirali instaliran je kopija koja je objavljena. To vrijedi imati jer to cijeni poređenja su javna, tako da ih može provjeriti neko drugi osim vas i ne složiti se.

Kanarinac za poternicu

Nalog kanarinca je izjava, objavljena po fiksnom rasporedu, koju ima programer ne primili tajnu vladinu naredbu koju im je zabranjeno otkriti — a Pismo o nacionalnoj sigurnosti, naredba FISA-e. Programer može biti primoran da šuti o tome takav poredak, ali se ne može natjerati da laže, tako da je kanarinac ustajao ili nestao sam signal.

Živi u canary.json u korijenu spremišta i dohvaća se direktno sa GitHub-a, tako da se njegova istorija može revidirati neovisno o tome šta raspoređena stranica kaže. Dijalog About ga označava bojama:

BojaSredstva
Zeleno — sve jasnoPotpisano, trenutno i potpis odgovara ključu programera. Tajna naredba nije primljena.
Žuta — kasni, ili nije sve jasnoNije osvježen do navedenog datuma, niti do njegovog allClear zastava je lažna. Prešućena naredba se ne može isključiti.
Crveni — nevažeći potpis ili nestaoPotpis ne odgovara ključu programera ili je datoteka u potpunosti uklonjena. Tretirajte ovo kao ozbiljno upozorenje.

Sidro svježine

Potpisani kanarinac ugrađuje najnoviju visinu Bitcoin bloka i heš u trenutku potpisivanja. Taj heš nije mogao biti poznat prije nego što je blok postojao, što dokazuje da je kanarinac bio potpisan poslije određenom trenutku, a ne unaprijed potpisanim na veliko mjesecima ranije. Dijalog About povezuje sidro sa istraživačem blokova tako da ga možete provjeriti.