Saltu al la enhavo
Reen al Nymchat

Sciobazo Sub la kapuĉo

Kontrolante la konstruon

Malferma fonto nur helpas se la kodo, kiun vi funkcias, estas la kodo, kiu estis eldonita. Nymchat estas konstruita determinisme tiel vi povas kontroli tion mem, de ene de la app aŭ de terminalo.

Reprodukteblaj konstruoj

Konstrui la apon elsendas a build-manifest.json enhavanta la fontan kommit, a SHA-256 hash de ĉiu servita HTML, JavaScript kaj CSS valoraĵo, kaj unuopa bundleHash super tiu tuta valoraĵo.

La eligo dependas nur de la fonta enhavo — eĉ la registrita konstrutempo estas la commit-tempomarko prefere ol la momento kiam la konstruo kuris — do iu ajn rekonstruanta la saman commit ricevas bajt-identajn dosierojn kaj same bundleHash.

GitHub-Ago tiam rekonstruas ĉiun devontigon sendepende kaj subskribas konstru-devenon atestoj por la haŝiŝo kaj la manifesto, do estas subskribita rekordo liganta a bundleHash al commit en la deponejo, produktita de io alia ol la deplojo.

Kion kontrolas la dialogo Pri

Pri en la kaplinio ruliĝas la kontrolo viva, en via retumilo.

La dialogo Nymchat Pri, montranta la version, konstruintegrecon kaj garantias kanarian statuson.
La dialogo Pri: versio, konstrua integreco, garantiu kanarion kaj rektan linion al la programisto.

Ĝi rekolektas ĉiun valoraĵon, kiun la paĝo efektive funkcias, haŝigas ĝin per la Web Crypto API, kaj komparas kontraŭ la manifesto. Tiam — kaj ĉi tiu estas la parto kiu gravas — ĝi rekalkulas la bundleHash el la haŝoj ĝi nur kalkulita, ne de ion ajn la manifesto asertas, kaj serĉas tion en la subskribitaj atestoj de la deponejo per la GitHub API.

Tio estas kio malhelpas deplojon garantii por si mem: servi modifitajn dosierojn kune kun kongrua manifesto ankoraŭ malsukcesas, ĉar la rekalkulita haŝiŝo havas neniun ateston.

StatusoRimedoj
✓ Kontrolita oficiala aplikaĵo (n/n)Ĉiu valoraĵo kongruas, la rekalkulita pakaĵo hash estas atestita de la deponejo, kaj la paĝo estas servata de la oficiala domajno.
⚠ Verkita konstruo · ne la oficiala aplikaĵoLa kodo estas aŭtenta kaj atestita, sed ĉi tio estas spegulo sur alia domajno. Spegulo ne povas forigi ĉi tiun averton sen malsukcesi kontrolon.
✗ MiskongruoValoraĵo ne haŝas al tio, kion diras la manifesto.
✗ Neoficiala konstruoLa rekalkulita pakaĵo hash havas neniun ateston de la deponejo - memfarita manifesto.
⚠ Deveno neatingeblaLa GitHub API ne povis esti atingita, do la atesto ne povis esti kontrolita de ajna maniero.

Kontrolante ĝin mem

Rekonstruu la enmetu la nomojn pri dialogoj pri kaj komparu:

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

La presita hash devus kongrui kaj tiu en la Pri dialogo kaj tiu en tiu kommit's konstruo-deveno kura resumo. Vi ankaŭ povas kontroli la subskribon rekte per la GitHub CLI:

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

La Android kaj iOS-aplikoj

La ĉi-supra ĉeko estas ret-aplikaĵo, kaj la kialo estas klare konstatita: denaska aplikaĵo ne povas fari la samon al si mem. Kio funkcias en via telefono estas kompilita maŝinkodo, ne la fonto en la deponejo, kaj nenio, kiun la programo povas kalkuli sur la aparato, rilatas al la aliaj.

Android povas fari la sekvan plej bonan aferon. La instalita .apk estas dosiero, kiun la aplikaĵo povas legi kaj haŝiŝo, kaj la haŝo de ĉiu eldonita eldono jam estas publika: eldonado al la Zapstore subskribas Nostr-okazaĵon portantan SHA-256 de la APK kaj SHA-256 de ĝia subskriba atestilo. Do la Androido Pri dialoghaŝis la APK de kiu ĝi kuras, alportas tiujn subskribitajn eventoj, konservas nur tiujn subskribitajn per la ŝlosilo de la programisto, kaj komparas. Ĝi montras la du hashes ankaŭ, do vi povas ripeti la kontrolon de la aparato: elŝutu la publikigitan APK, kuru sha256sum sur ĝi, kaj vi mem rigardu la saman eventon.

Apo instalita de Google Play ne povas esti kontrolita tiel, kaj tio ne estas signo, ke io estas malĝusta. Google rensubskribas ĉian supradonon per sia propra ŝlosilo kaj kreas apartan APK por ĉiu aparato, do tio, kio atingas vian telefonon, ne estas la dosiero produktita de la programisto, kaj ĝia haŝo ne kongruas kun io ajn, kio povus esti publikigita. La aplikaĵo rekognas Play-instaladon kaj mencias tion anstataŭ raporti malsukceson. Por kontroli version mem, instalu la APK-dosieron, kiu estas publikigita rektade.

iOS tute ne povas esti kontrolita. Apple ĉifras kaj resubskribas ĉiun elŝuton individue, do hash komputita sur via iPhone estas unika al via iPhone kaj kongruas kun nenio eldonita ie ajn. La dialogo Pri diras tion rekte prefere ol montri trankviligan statuso kiu signifas nenion. Se vi volas Nymchat, kiun vi povas kontroli sur Apple-aparataro, uzu la retejon app, kiu kontrolas ĉiun dosieron, kiun ĝi funkcias.

Kion nenio el ĉi tio pruvas

Kontrolo, kiun aplikaĵo funkcias per si mem, ne povas pruvi, ke la programo estas honesta - kiu ajn modifis ĝin povus ankaŭ forigi la ĉekon. Kion ĝi pruvas estas la ordinara kazo: ke la kopiu vin instalita estas la kopio kiu estis publikigita. Tio valoras havi ĉar la taksas ĝin komparoj estas publikaj, do iu alia ol vi povas kontroli ilin, kaj malkonsenti.

La mandato kanario

Mandato-kanario estas deklaro, publikigita laŭ fiksa horaro, kiun la programisto havas ne ricevis sekretan registaran ordonon, kiun ili estas malpermesite malkaŝi - a Nacia Sekurecletero, FISA-ordo. La programisto povas esti devigita silenti pri tio tia ordo, sed ne povas esti devigita mensogi, do la kanario malfreŝa aŭ malaperanta estas mem la signalo.

Ĝi loĝas en canary.json ĉe la radiko de la deponejo kaj estas prenita rekte de GitHub, do ĝia historio estas aŭdebla sendepende de ĉio, kion diras la deplojita retejo. La dialogo Pri kolorkodoj ĝin:

KoloroRimedoj
Verda — ĉio klaraSubskribita, aktuala kaj la subskribo kongruas kun la ŝlosilo de la programisto. Neniu sekreta ordono estis ricevita.
Flava — malfruiĝinta, aŭ ne tute klaraĜi ne estis refreŝigita de ĝia deklarita dato, aŭ ĝia allClear flago estas falsa. Silentita ordo ne povas esti ekskludita.
Ruĝa — nevalida subskribo, aŭ malaperisLa subskribo ne kongruas kun la ŝlosilo de la programisto, aŭ la dosiero estis tute forigita. Traktu ĉi tion kiel seriozan averton.

La freŝeco ankro

La subskribita kanario enigas la lastan Bitcoin-blokan altecon kaj haŝiŝon en la momento de subskribo. Tiu haŝiŝo ne povus estinti konata antaŭ ol la bloko ekzistis, kio pruvas ke la kanario estis subskribita post specifa punkto en tempo prefere ol antaŭsubskribita en grandaj monatoj antaŭe. La dialogo Pri ligas la ankron al bloka esploristo por ke vi povu kontroli ĝin.