Spring til indholdet
Tilbage til Nymchat

Vidensgrundlag Under hætten

Bekræftelse af bygningen

Open source hjælper kun, hvis den kode, du kører, er den kode, der var offentliggjort. Nymchat er bygget deterministisk, så du selv kan tjekke det inde fra app eller fra en terminal.

Reproducerbare opbygninger

Opbygning af appen udsender en build-manifest.json indeholdende kilden begå, en SHA-256 hash af hver serveret HTML, JavaScript og CSS aktiv, og en enkelt bundleHash over hele det aktivsæt.

Outputtet afhænger kun af kildeindholdet - selv den registrerede byggetid er den commits tidsstempel snarere end det øjeblik, hvor builden kørte - så enhver, der genopbygger det samme commit får byte-identiske filer og det samme bundleHash.

En GitHub Action genopbygger derefter hver commit uafhængigt og underskriver build-herkomst attester for hashen og manifestet, så der er en underskrevet post, der binder en bundleHash til en commit i depotet, produceret af noget andet end indsættelse.

Hvad kontrollerer dialogen Om

Om i overskriften kører kontrollen live, i din browser.

Nymchat Om-dialogen, der viser versionen, build-integritet og garanterer kanarie-status.
Dialogen Om: version, bygningsintegritet, garanterer canary og en direkte linje til udvikleren.

Det genhenter hvert aktiv, siden faktisk kører, hash det med Web Crypto API og sammenligner med manifestet. Så - og det er den del, der betyder noget - det genberegner bundleHash fra hasherne det bare beregnet, ikke fra alt, hvad manifestet hævder, og slår det op i depotets underskrevne attester gennem GitHub API.

Det er det, der forhindrer en implementering i at stå inde for sig selv: servere modificerede filer sammen med et matchende manifest mislykkes stadig, fordi den genberegnede hash ikke har nogen attest.

StatusMidler
✓ Verificeret officiel app (n/n)Hvert aktiv matcher, den genberegnet bundle-hash attesteres af depotet, og siden serveres fra det officielle domæne.
⚠ Verificeret build · ikke den officielle appKoden er ægte og attesteret, men dette er et spejl på et andet domæne. Et spejl kan ikke fjerne denne advarsel uden at fejle bekræftelsen.
✗ UoverensstemmelseEt aktiv hash ikke til, hvad manifestet siger.
✗ Uofficiel konstruktionDen genberegnede bundle-hash har ingen attest fra lageret - et selvfremstillet manifest.
⚠ Herkomst uopnåeligGitHub API kunne ikke nås, så attestationen kunne ikke kontrolleres på nogen måde.

Bekræfter det selv

Genopbyg commit the About-dialognavnene og sammenlign:

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

Den udskrevne hash skal matche både den i Om-dialogen og den i den commit's opsummering af bygge-herkomstkørsel. Du kan også tjekke signaturen direkte med GitHub CLI:

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

Android- og iOS-apps

Checken ovenfor er et web-app-tjek, og årsagen er værd at sige klart: en indbygget app kan ikke gøre det samme ved sig selv. Det, der kører på din telefon, er kompileret maskinkode, ikke kilde i depotet, og intet, som appen kan beregne på enheden, relaterer en til andet.

Android kan gøre det næstbedste. Den installerede .apk er en fil, som appen kan læse og hash, og hashen for hver publiceret udgivelse er allerede offentlig: udgivelse til Zapstore underskriver en Nostr-begivenhed, der bærer APK'ens SHA-256 og dens signeringscertifikats SHA-256. Så den Android Om dialog hashes den APK, den kører fra, henter de signerede begivenheder, beholder kun dem, der er underskrevet af udviklerens nøgle, og sammenligner. Det viser de to hashes også, så du kan gentage markeringen af enheden: download den offentliggjorte APK, kør sha256sum på den, og se selv på den samme begivenhed.

En app installeret fra Google Play kan ikke kontrolleres på denne måde, og det er ikke et tegn på, at noget er forkert. Google gensigner hver upload med sin egen nøgle og bygger en separat APK til hver enhed, så hvad der lander på din telefon, er ikke den fil, udvikleren producerede, og dens hash matcher ikke noget, der kunne offentliggøres. appen genkender en Play-installation og siger det i stedet for at rapportere en fejl.

iOS kan slet ikke kontrolleres. Apple krypterer og gensignerer hver download individuelt, så en hash beregnet på din iPhone er unik for din iPhone og matcher intet udgivet hvor som helst. Dialogen Om siger dette direkte i stedet for at vise en beroligende status, der ikke betyder noget. Hvis du vil have en Nymchat, kan du verificere på Apple-hardware, så brug internettet app, som kontrollerer hver fil, den kører.

Hvad intet af dette beviser

Et tjek, som en app kører på sig selv, kan ikke bevise, at appen er ærlig - hvem end har ændret den kunne også fjerne checken. Hvad det beviser er det almindelige tilfælde: at kopien dig installeret er den kopi, der blev offentliggjort. Det er værd at have, fordi de værdsætter det sammenligninger er offentlige, så andre end dig kan tjekke dem og være uenige.

Den berettigede kanariefugl

En garanti kanariefugl er en erklæring, offentliggjort efter en fast tidsplan, som bygherren har ikke modtaget en hemmelig regeringsordre, som de er forbudt at afsløre - en National Security Letter, en FISA-ordre. Udvikleren kan tvinges til at tie om sådan en ordre, men kan ikke tvinges til at lyve, så kanariefuglen bliver forældet eller forsvinder er sig selv signalet.

Den bor i canary.json i roden af depotet og hentes direkte fra GitHub, så dens historie kan revideres uafhængigt af, hvad den installerede side siger. Dialogen Om farvekoder det:

FarveMidler
Grøn - alt klartSigneret, aktuel og signaturen matcher udviklerens nøgle. Der er ikke modtaget nogen hemmelig ordre.
Gul — forsinket, eller ikke helt klartDen blev ikke opdateret af dens angivne dato eller dens allClear flag er falsk. En forstummet ordre kan ikke udelukkes.
Rød — ugyldig underskrift, eller vækSignaturen matcher ikke udviklerens nøgle, eller filen er blevet fjernet helt. Behandl dette som en alvorlig advarsel.

Friskhedsankeret

Den signerede kanariefugl indlejrer den seneste Bitcoin-blokhøjde og hash i underskrivelsesøjeblikket. Den hash kunne ikke have været kendt, før blokken eksisterede, hvilket beviser, at kanariefuglen var det underskrevet efter et specifikt tidspunkt i stedet for forhåndsunderskrevet i bulk måneder tidligere. Dialogen Om linker ankeret til en blokudforsker, så du kan tjekke det.