Kunskapsbas Under huven
Verifierar konstruktionen
Öppen källkod hjälper bara om koden du kör är den som var publiceras. Nymchat är byggt deterministiskt så att du kan kontrollera det själv, inifrån app eller från en terminal.
Den här sidan är maskinöversatt för enkelhetens skull. Det engelska originalet är den version som gäller.
Reproducerbara konstruktioner
Att bygga appen avger en build-manifest.json som innehåller källans commit, a
SHA-256-hash för varje serverad HTML-, JavaScript- och CSS-tillgång, och en singel
bundleHash över hela tillgångsuppsättningen.
Utdata beror bara på källinnehållet - även den inspelade byggtiden är den
commits tidsstämpel snarare än det ögonblick då bygget kördes - så alla som bygger om detsamma
commit får byte-identiska filer och detsamma bundleHash.
En GitHub Action bygger sedan om varje commit oberoende och undertecknar bygghärkomst
intyg för hashen och manifestet, så det finns en signerad post som knyter a
bundleHash till en commit i förvaret, producerad av något annat än
utplacering.
Vad kontrollerar dialogen Om
Om i rubriken körs kontrollen live, i din webbläsare.
Den återhämtar varje tillgång som sidan faktiskt kör, hashas den med Web Crypto API och
jämför med manifestet. Sedan - och det här är den del som betyder något - det
räknar om bundleHash från hasharna det bara beräknat, inte från
allt som manifestet hävdar, och letar upp det i förvarets undertecknade intyg
genom GitHub API.
Det är det som hindrar en distribution från att garantera sig själv: servera modifierade filer tillsammans med ett matchande manifest misslyckas fortfarande, eftersom den omräknade hashen inte har något attestation.
| Status | Medel |
|---|---|
| &kontrollera; Verifierad officiell app (n/n) | Varje tillgång matchar, den omräknade pakethashen intygas av förvaret, och sidan serveras från den officiella domänen. |
| ⚠ Verifierad konstruktion · inte den officiella appen | Koden är äkta och bestyrkt, men det här är en spegel på en annan domän. En spegel kan inte ta bort denna varning utan att verifieringen misslyckas. |
| ✗ Missmatch | En tillgång hash inte till vad manifestet säger. |
| ✗ Inofficiell konstruktion | Den omräknade pakethashen har inget intyg från förvaret – ett självgjort manifest. |
| ⚠ Ursprung oåtkomligt | GitHub API kunde inte nås, så attestationen kunde inte kontrolleras på något sätt. |
Verifierar det själv
Bygg om commit the About-dialognamnen och jämför:
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 utskrivna hashen bör matcha både den i Om-dialogrutan och den i den commitens bygg-härkomst kör sammanfattning. Du kan också kontrollera signaturen direkt med GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Android- och iOS-apparna
Checken ovan är en webbapp-kontroll, och anledningen är värd att tydligt säga: en inbyggd app kan inte göra samma sak mot sig själv. Det som körs på din telefon är kompilerad maskinkod, inte källa i förvaret, och ingenting som appen kan beräkna på enheten relaterar en till annat.
Android kan göra det näst bästa. Den installerade .apk är en fil som appen kan läsa
och hash, och hashen för varje publicerad utgåva är redan offentlig: publicering till
Zapstore
signerar en Nostr-händelse som bär APK:s SHA-256 och dess signeringscertifikats SHA-256. Så den
Android Om dialog hashar APK-filen den körs från, hämtar de signerade
händelser, behåller endast de som är signerade av utvecklarens nyckel och jämför. Det visar de två
hash också, så att du kan upprepa bockningen av enheten: ladda ner den publicerade APK-filen, kör
sha256sum på den och titta på samma händelse själv.
En app installerad från Google Play kan inte kontrolleras på detta sätt, och det är inte ett tecken på att något är fel. Google skriver varje uppladdning med sin egen nyckel och bygger en separat APK för varje enhet, så vad som landar på din telefon är inte den fil som utvecklaren producerade och dess hash matchar ingenting som kunde publiceras. Appen känner igen en Play-installation och säger så snarare än att rapportera ett misslyckande.
iOS kan inte kontrolleras alls. Apple krypterar och signerar om varje nedladdning individuellt, så en hash som beräknas på din iPhone är unik för din iPhone och matchar ingenting publiceras var som helst. Dialogen Om säger detta rakt ut snarare än att visa ett lugnande status som inte betyder något. Om du vill ha en Nymchat kan du verifiera på Apples hårdvara, använd webben app, som kontrollerar varje fil den körs.
En kontroll som en app kör på sig själv kan inte bevisa att appen är ärlig - vem som än ändrade den skulle kunna ta bort kontrollen också. Vad det bevisar är det vanliga fallet: att kopian du installerad är kopian som publicerades. Det är värt att ha eftersom de värdesätter det jämförelser är offentliga, så någon annan än du kan kontrollera dem och inte hålla med.
Den beordrade kanariefågeln
En warrant canary är ett uttalande, publicerat enligt ett fast schema, som byggherren har inte fått en hemlig regeringsorder som de är förbjudna att avslöja — a National Security Letter, en FISA-order. Utvecklaren kan tvingas vara tyst om en sådan order, men kan inte tvingas att ljuga, så kanariefågeln försvinner eller försvinner själv signalen.
Den bor i canary.json i roten av förvaret och hämtas direkt
från GitHub, så dess historik kan granskas oberoende av vad den distribuerade webbplatsen säger.
Dialogrutan Om färgkodar det:
| Färg | Medel |
|---|---|
| Grön – allt klart | Signerad, aktuell och signaturen matchar utvecklarens nyckel. Ingen hemlig order har mottagits. |
| Gul — försenad, eller inte helt klart | Den uppdaterades inte av det angivna datumet eller dess allClear flaggan är falsk. En nedtystad order kan inte uteslutas. |
| Röd — ogiltig signatur, eller borta | Signaturen matchar inte utvecklarens nyckel, eller så har filen tagits bort helt. Behandla detta som en allvarlig varning. |
Friskhetsankaret
Den signerade kanariefågeln bäddar in den senaste Bitcoin-blockhöjden och hashen vid undertecknandet. Den haschen kunde inte ha varit känd innan blocket existerade, vilket bevisar att kanariefågeln var det undertecknad efter en specifik tidpunkt snarare än förhandstecknad i bulk månader tidigare. Dialogrutan Om länkar ankaret till en blockutforskare så att du kan kontrollera det.