Kennisbasis Under de motorkap
Ferifiearje de bou
Iepen boarne helpt allinich as de koade dy't jo útfiere de koade is dy't wie publisearre. Nymchat is boud deterministysk sadat jo kontrolearje dat sels, fan binnen de app of fan in terminal.
Dizze side is masine-oerset foar it gemak. It Ingelske orizjineel is de ferzje dy't jildt.
Reproducible builds
It bouwen fan de app stjoert in build-manifest.json befettet de boarne commit, a
SHA-256 hash fan elke tsjinne HTML, JavaScript en CSS asset, en ien
bundleHash oer dy hiele asset set.
De útfier hinget allinich ôf fan 'e boarne ynhâld - sels de opnommen boutiid is de
commit's timestamp yn stee fan it momint dat de build rûn - dus elkenien dy't itselde werbout
commit krijt byte-identike bestannen en itselde bundleHash.
In GitHub-aksje bout dan elke commit selsstannich op en tekenet build-herkomst
attestaasjes foar de hash en it manifest, dus der is in tekene record tying a
bundleHash ta in commit yn de repository, produsearre troch wat oars as de
ynset.
Wat it dialoochfinster Oer kontrolearret
Oer yn de kop rint de kontrôle live, yn jo blêder.
It werhellet elke asset op 'e side dy't eins rint, hashes it mei de Web Crypto API, en
fergelike mei it manifest. Dan - en dit is it diel dat fan belang is - it
recomputes de bundleHash fan de hasj it krekt berekkene, net út
alles wat it manifest beweart, en sjocht dat op yn 'e ûndertekene attestaasjes fan it repository
fia de GitHub API.
Dat is wat stopet in ynset fan vouching foar himsels: tsjinjen feroare triemmen tegearre mei in oerienkommende manifest mislearret noch, om't de opnij berekkene hash gjin attest hat.
| Status | Middels |
|---|---|
| &kontrôle; Ferifiearre offisjele app (n/n) | Elke asset komt oerien, de opnij berekkene bondelhash wurdt attest troch it repository, en de side wurdt betsjinne fan it offisjele domein. |
| ⚠ Ferifiearre bou · net de offisjele app | De koade is echt en attestearre, mar dit is in spegel op in oar domein. In spegel kin dizze warskôging net fuortsmite sûnder mislearre ferifikaasje. |
| ✗ Mismatch | In asset hash net oan wat it manifest seit. |
| ✗ Unoffisjele bou | De opnij berekkene bondelhash hat gjin attest fan 'e repository - in selsmakke manifest. |
| ⚠ Herkomst net te berikken | De GitHub API koe net berikt wurde, sadat de attestaasje op beide manieren net kontrolearre wurde koe. |
Ferifiearje it sels
Bou de commit de nammen fan it dialoochfinster opnij op en fergelykje:
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 printe hash moat oerienkomme mei sawol de iene yn it dialoochfinster Oer as dy yn dy commit build-herkomst run gearfetting. Jo kinne de hantekening ek direkt kontrolearje mei de GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
De Android- en iOS-apps
De kontrôle hjirboppe is in web-app-kontrôle, en de reden is it wurdich om dúdlik te sizzen: in native app kin itselde ding sels net dwaan. Wat rint op jo telefoan wurdt gearstald masine koade, net de boarne yn de repository, en neat de app kin berekkenje op it apparaat relatearret ien oan de oar.
Android kin it folgjende bêste ding dwaan. De ynstallearre .apk is in bestân dat de app kin lêze
en hash, en de hash fan elke publisearre release is al iepenbier: publisearjen oan de
Zapstore
tekenet in Nostr-evenemint mei de SHA-256 fan de APK en de SHA-256 fan it ûndertekeningssertifikaat. Dus de
Android Oer dialooch hashes de APK dêr't it fan rint, hellet de ûndertekene op
eveneminten, hâldt allinich dejingen dy't tekene binne troch de kaai fan 'e ûntwikkelder, en fergeliket. It toant de twa
hashes ek, sadat jo de kontrôle fan it apparaat kinne werhelje: download de publisearre APK, útfiere
sha256sum derop, en sjoch op itselde evenemint sels.
In app ynstalleare fan Google Play kin net op dizze manier kontrolearre wurde, en dat is net in teken dat alles fout is. Google re-signs elke upload mei syn eigen sleutel en bouwe in ferskate APK foar elk apparaat, dus wat lâns op jo telefoan is net it lêst de ûntwikkelaar produsearre en syn hash matches niks dat kin publisearre wurde. De app erkent in Play ynstallearjen en sjoch dat ynstee as it rapportearjen fan in mislukking. Om te kontrolearjen in build sels, ynstallearje de APK publisearre direkte.
iOS kin hielendal net kontrolearre wurde. Apple fersiferet en tekenet elke download opnij yndividueel, sadat in hash berekkene op dyn iPhone is unyk foar dyn iPhone en komt oerien mei neat publisearre oeral. It dialoochfinster Oer seit dit direkt ynstee fan in gerêststellend te toanen status dat betsjut neat. As jo wolle in Nymchat kinne jo ferifiearje op Apple hardware, brûk it web app, dy't elk bestân kontrolearret dat it rint.
In kontrôle dy't in app op himsels rint, kin net bewize dat de app earlik is - wa't it feroare hat koe de kontrôle ek fuortsmite. Wat it bewiist is it gewoane gefal: dat de kopy jo ynstallearre is de kopy dy't publisearre is. Dat is de muoite wurdich om't de wearden it fergelikingen binne iepenbier, dus immen oars as jo kinne kontrolearje se, en net iens.
De warrant kanarie
In warrant canary is in ferklearring, publisearre op in fêst skema, dat de ûntwikkelder hat net krigen in geheime regear oarder se binne ferbean te iepenbierjen - a National Security Letter, in FISA oarder. De ûntwikkelder kin twongen wurde om stil te bliuwen sa'n oarder, mar kin net twongen wurde om te lizzen, sa't de kanarie giet mâle of ferdwine is sels it sinjaal.
It wennet yn canary.json by de woartel fan it repository en wurdt direkt ophelle
fan GitHub, dus syn skiednis is auditable ûnôfhinklik fan wat de ynset side seit.
It dialoochfinster Oer kleurkodeart it:
| Kleur | Middels |
|---|---|
| Grien - alles dúdlik | Undertekene, aktueel en de hantekening komt oerien mei de kaai fan 'e ûntwikkelder. Gjin geheime oarder is ûntfongen. |
| Giel - efterstallich, of net allegear dúdlik | It waard net ferfarske troch syn oantsjutte datum, of syn allClear flagge is falsk. In stille oarder kin net útsletten wurde. |
| Read - ûnjildige hantekening, of fuort | De hantekening komt net oerien mei de kaai fan de ûntwikkelder, of it bestân is hielendal fuortsmiten. Behannelje dit as in serieuze warskôging. |
De frisheid anker
De ûndertekene kanaryske embeds de lêste Bitcoin-blokhichte en hash op it momint fan ûndertekening. Dat hasj koe net bekend wêze foardat it blok bestie, wat bewiist dat de kanarie wie ûndertekene nei in spesifyk punt yn 'e tiid ynstee fan foarôf ûndertekene yn bulk moannen earder. It dialoochfinster Oer ferbynt it anker oan in blokferkenner, sadat jo it kinne kontrolearje.