Ga naar de inhoud
Terug naar Nymchat

Kennisbank Onder de motorkap

Het verifiëren van de constructie

Open source helpt alleen als de code die u gebruikt, de code is die was gepubliceerd. Nymchat is deterministisch gebouwd, zodat u dat zelf kunt controleren, vanuit de app of vanaf een terminal.

Reproduceerbare builds

Het bouwen van de app zendt een build-manifest.json met de broncommit, a SHA-256-hash van elk weergegeven HTML-, JavaScript- en CSS-item, en één bundleHash over die hele activaset.

De uitvoer is alleen afhankelijk van de broninhoud; zelfs de opgenomen bouwtijd is bepalend commit's tijdstempel in plaats van het moment waarop de build werd uitgevoerd - dus iedereen die hetzelfde opnieuw opbouwt commit krijgt byte-identieke bestanden en hetzelfde bundleHash.

Een GitHub-actie herbouwt vervolgens elke commit afzonderlijk en tekent de herkomst van de build attesten voor de hash en het manifest, dus er is een ondertekend record dat een koppelt bundleHash naar een commit in de repository, geproduceerd door iets anders dan de inzet.

Wat het dialoogvenster Over controleert

Over in de header wordt de controle live uitgevoerd in uw browser.

Het Nymchat About-dialoogvenster toont de versie, bouwt integriteit op en garandeert de kanariestatus.
Het Over-dialoogvenster: versie, build-integriteit, warrant canary en een directe lijn naar de ontwikkelaar.

Het haalt elk item dat de pagina daadwerkelijk gebruikt opnieuw op, hasht het met de Web Crypto API en vergelijkt met het manifest. Dan – en dit is het deel dat ertoe doet – het herberekent de bundleHash van de hasj Het gewoon berekend, niet vanaf alles wat het manifest claimt, en zoekt dat op in de ondertekende attesten van de repository via de GitHub-API.

Dat is wat een implementatie ervan weerhoudt om voor zichzelf in te staan: het aanbieden van gewijzigde bestanden samen met een overeenkomend manifest mislukt nog steeds, omdat de opnieuw berekende hash geen attest heeft.

StatusMiddelen
&rekening; Geverifieerde officiële app (n/n)Elke asset komt overeen, de opnieuw berekende bundel-hash wordt bevestigd door de repository, En de pagina wordt aangeboden vanuit het officiële domein.
⚠ Geverifieerde build · niet de officiële appDe code is echt en gecertificeerd, maar dit is een spiegel op een ander domein. Een spiegelserver kan deze waarschuwing niet verwijderen zonder dat de verificatie mislukt.
✗ MismatchEen asset komt niet overeen met wat het manifest zegt.
✗ Onofficiële constructieDe opnieuw berekende bundel-hash heeft geen attest van de repository – een zelfgemaakt manifest.
⚠ Herkomst onbereikbaarDe GitHub API kon niet worden bereikt, dus de attestatie kon op geen enkele manier worden gecontroleerd.

Zelf verifiëren

Herbouw de commit met de namen van het dialoogvenster Over en vergelijk:

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

De afgedrukte hash moet overeenkomen met die in het Over-dialoogvenster en die in die commit's samenvatting van de build-herkomst. Je kunt de handtekening ook rechtstreeks controleren met de GitHub CLI:

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

De warrantkanarie

Een warrant canary is een verklaring, gepubliceerd volgens een vast schema, die de ontwikkelaar heeft niet een geheim overheidsbevel hebben ontvangen dat zij niet openbaar mogen maken – a National Security Letter, een FISA-bevel. De ontwikkelaar kan gedwongen worden erover te zwijgen zo'n bevel, maar kan niet worden gedwongen om te liegen, dus de kanarie wordt oud of verdwijnt zelf het signaal.

Het leeft erin canary.json in de root van de repository en wordt direct opgehaald van GitHub, zodat de geschiedenis ervan controleerbaar is, onafhankelijk van wat de geïmplementeerde site zegt. Het Over-dialoogvenster geeft het een kleurcode:

KleurMiddelen
Groente – allemaal duidelijkOndertekend, actueel en de handtekening komt overeen met de sleutel van de ontwikkelaar. Er is geen geheim bevel ontvangen.
Geel – te laat, of niet allemaal duidelijkHet is niet vernieuwd op de aangegeven datum of op de aangegeven datum allClear vlag is vals. Een stilzwijgend bevel kan niet worden uitgesloten.
Rood — ongeldige handtekening, of verdwenenDe handtekening komt niet overeen met de sleutel van de ontwikkelaar, of het bestand is volledig verwijderd. Beschouw dit als een serieuze waarschuwing.

Het versheidsanker

De ondertekende kanarie bevat de nieuwste Bitcoin-blokhoogte en hash op het moment van ondertekening. Die hasj kon niet bekend zijn voordat het blok bestond, wat bewijst dat de kanarie dat wel was ondertekend na een specifiek tijdstip in plaats van maanden eerder vooraf in bulk te ondertekenen. Het dialoogvenster Info koppelt het anker aan een blokverkenner, zodat u het kunt controleren.