Ugrás a tartalomhoz
Vissza a Nymchathoz

Tudásbázis A motorháztető alatt

A build ellenőrzése

A nyílt forráskód csak akkor segít, ha a futtatott kód ugyanaz, mint amilyen volt megjelent. A Nymchat determinisztikusan épül fel, így ezt saját maga is ellenőrizheti, belülről alkalmazásból vagy terminálból.

Reprodukálható építmények

Az alkalmazás elkészítése a build-manifest.json tartalmazza a forrás commit, a SHA-256 hash minden kiszolgált HTML-, JavaScript- és CSS-elemről, valamint egyetlen bundleHash az egész eszközkészlet felett.

A kimenet csak a forrástartalomtól függ – még a rögzített felépítési idő is az Inkább a véglegesítés időbélyegét használja, mint a build futásának pillanatát – tehát bárki, aki újraépíti ugyanazt A commit bájt-azonos fájlokat kap, és ugyanazt bundleHash.

A GitHub-művelet ezután minden kötelezettségvállalást önállóan újraépít, és aláírja a build-eredetet tanúsítványok a hash és a manifeszt, tehát van egy aláírt jegyzőkönyv árukapcsolás a bundleHash az adattárban való commithoz, amelyet nem a bevetése.

Mit ellenőriz a Névjegy párbeszédpanel

Körülbelül a fejlécben lefut az ellenőrzés élőben, a böngészőben.

A Nymchat Névjegy párbeszédablak, amely megmutatja a verziót, a felépítés integritását és a kanári állapot garantálását.
A Névjegy párbeszédpanel: verzió, összeállítás integritása, jótállás kanári és közvetlen kapcsolat a fejlesztőhöz.

Újra lekéri az oldal ténylegesen futó összes elemét, kivonatolja azokat a Web Crypto API-val, és összehasonlítja a manifeszttel. Aztán – és ez az a rész, ami számít – ez újraszámítja a bundleHash a hash-ekből azt csak kiszámoltam, nem abból bármit, amit a jegyzék állít, és ezt megnézi az adattár aláírt tanúsítványaiban a GitHub API-n keresztül.

Ez az, ami megakadályozza, hogy a telepítés vállalja önmagát: a módosított fájlokat együtt szolgálja ki az egyező jegyzék továbbra sem sikerül, mert az újraszámított hash-nek nincs tanúsítványa.

ÁllapotEszközök
&ellenőrzés; Ellenőrzött hivatalos alkalmazás (n/n)Minden eszköz egyezik, az újraszámított köteg hash-t az adattár igazolja, és az oldalt a hivatalos domainről szolgálják ki.
⚠ Ellenőrzött build · nem a hivatalos alkalmazásA kód eredeti és tanúsított, de ez egy másik tartomány tükörképe. A tükör nem tudja eltávolítani ezt a figyelmeztetést az ellenőrzés sikertelensége nélkül.
✗ Nem megfelelőEgy tartalom nem hash a jegyzékben leírtakhoz.
✗ Nem hivatalos felépítésAz újraszámított köteg-kivonat nem rendelkezik a lerakatból származó tanúsítvánnyal – egy saját készítésű jegyzék.
⚠ A származás elérhetetlenA GitHub API-t nem sikerült elérni, így a tanúsítványt egyik módon sem lehetett ellenőrizni.

Ellenőrizd magad

Építse újra a véglegesítést a Névjegy párbeszédpanelen, és hasonlítsa össze:

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

A kinyomtatott hash-nek meg kell egyeznie a Névjegy párbeszédpanelen és a véglegesítésben szereplővel build-provenance futás összefoglalója. Az aláírást közvetlenül a GitHub CLI-vel is ellenőrizheti:

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

Android és iOS alkalmazások

A fenti ellenőrzés egy webalkalmazás-ellenőrzés, és érdemes egyértelműen kijelenteni az okot: natív alkalmazás nem teheti meg ugyanazt önmagával. Ami a telefonodon fut, az egy lefordított gépi kód, nem pedig a forrás a lerakatban, és semmi, amit az alkalmazás az eszközön ki tudja számítani, nem kapcsolódik az egyikhez egyéb.

Az Android a következő legjobb dologra képes. A telepített .apk egy olyan fájl, amelyet az alkalmazás képes olvasni és hash, és minden közzétett kiadás hash-je már nyilvános: közzététel a Zapstore aláír egy Nostr eseményt, amely az APK SHA-256 azonosítóját és az aláíró tanúsítványát SHA-256 tartalmazza. Tehát a Android Körülbelül párbeszédablak kivonatolja azt az APK-t, amelyről fut, és lekéri az aláírtakat eseményeket, csak a fejlesztői kulcs által aláírt eseményeket tartja meg, és összehasonlítja. A kettőt mutatja hasheket is, így megismételheti az ellenőrzést az eszközről: töltse le a közzétett APK-t, futtassa sha256sum rajta, és nézze meg maga is ugyanazt az eseményt.

A Google Playről telepített alkalmazásokat nem lehet így ellenőrizni, és ez nem jelzi, hogy semmi nincs rendben. A Google minden feltöltést saját kulccsal aláír, és minden eszközre külön APK-t hoz létre, így ami a telefonon leszáll, nem a fejlesztő által előállított fájl, és a hash nem felel meg semmit, ami közzé lehetne tenni. Az alkalmazás felismeri a Play telepítést, és így mondja, ahelyett, hogy hibát jelentene. Ahhoz, hogy ellenőrizze a build-et, telepítse a közvetlenül közzétett APK-t.

Az iOS egyáltalán nem ellenőrizhető. Az Apple minden letöltést titkosít és újra aláír külön-külön, így az iPhone-on kiszámított hash egyedi az iPhone-jára, és semmivel sem egyezik bárhol megjelent. A Névjegy párbeszédpanel ezt egyenesen mondja, nem pedig megnyugtató állapot, ami nem jelent semmit. Ha Nymchatet szeretne, amelyet az Apple hardverén ellenőrizhet, használja az internetet alkalmazást, amely minden futó fájlt ellenőriz.

Amit ezek közül semmi nem bizonyít

Egy alkalmazás önmagán futó ellenőrzése nem bizonyítja, hogy az alkalmazás őszinte – akárki módosította is eltávolíthatja a csekket is. Amit ez bizonyít, az a hétköznapi eset: hogy téged másol telepítve a közzétett példány. Ezt megéri, mert az ember értékeli az összehasonlítások nyilvánosak, így valaki más is ellenőrizheti őket, és nem ért egyet.

A szavatos kanári

A jótállási nyilatkozat egy rögzített ütemezéssel közzétett nyilatkozat, amellyel a fejlesztő rendelkezik nem titkos kormányparancsot kapott, amelyet tilos nyilvánosságra hozni - a Nemzetbiztonsági levél, a FISA végzése. A fejlesztő hallgatásra kényszeríthető ilyen rend, de hazugságra kényszeríteni nem lehet, tehát a kanári elhalványul vagy eltűnik maga a jel.

Benne él canary.json az adattár gyökerében, és közvetlenül lekérésre kerül a GitHubból, így előzményei a telepített webhelytől függetlenül auditálhatók. A Névjegy párbeszédablak színkódolja:

SzínEszközök
Zöld - minden világosAláírt, aktuális és az aláírás megegyezik a fejlesztő kulcsával. Titkos parancs nem érkezett.
Sárga — lejárt, vagy nem minden világosNem frissült a megadott dátumig vagy annak allClear zászló hamis. Nem zárható ki az elhallgatott rend.
Piros — érvénytelen aláírás, vagy eltűntAz aláírás nem egyezik a fejlesztő kulcsával, vagy a fájlt teljesen eltávolították. Kezelje ezt komoly figyelmeztetésként.

A frissesség horgonya

Az aláírt kanári beágyazza a legújabb Bitcoin blokk magasságot és hash-t az aláírás pillanatában. Ezt a hash-t nem lehetett tudni a blokk létezése előtt, ami azt bizonyítja, hogy a kanári az volt aláírva után egy adott időpontban, nem pedig hónapokkal korábban tömegesen írták alá. A Névjegy párbeszédpanel összekapcsolja a horgonyt egy blokkböngészővel, így ellenőrizheti.