Hoppa till innehållet
Tillbaka till Nymchat

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.

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.

Dialogrutan Nymchat Om, som visar versionen, byggintegritet och garanterar kanariefågelstatus.
Dialogrutan Om: version, byggintegritet, garanterar kanariefågel och en direktlinje till utvecklaren.

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.

StatusMedel
&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 appenKoden ä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.
✗ MissmatchEn tillgång hash inte till vad manifestet säger.
✗ Inofficiell konstruktionDen omräknade pakethashen har inget intyg från förvaret – ett självgjort manifest.
⚠ Ursprung oåtkomligtGitHub 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.

Vad inget av detta bevisar

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ärgMedel
Grön – allt klartSignerad, aktuell och signaturen matchar utvecklarens nyckel. Ingen hemlig order har mottagits.
Gul — försenad, eller inte helt klartDen uppdaterades inte av det angivna datumet eller dess allClear flaggan är falsk. En nedtystad order kan inte uteslutas.
Röd — ogiltig signatur, eller bortaSignaturen 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.