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.
Denne side er maskinoversat for nemheds skyld. Den engelske original er den version, der gælder.
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.
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.
| Status | Midler |
|---|---|
| ✓ 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 app | Koden 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. |
| ✗ Uoverensstemmelse | Et aktiv hash ikke til, hvad manifestet siger. |
| ✗ Uofficiel konstruktion | Den genberegnede bundle-hash har ingen attest fra lageret - et selvfremstillet manifest. |
| ⚠ Herkomst uopnåelig | GitHub 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.
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:
| Farve | Midler |
|---|---|
| Grøn - alt klart | Signeret, aktuel og signaturen matcher udviklerens nøgle. Der er ikke modtaget nogen hemmelig ordre. |
| Gul — forsinket, eller ikke helt klart | Den 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æk | Signaturen 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.