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.
Ĉi tiu paĝo estas maŝintradukita por komforto. La angla originalo estas la versio kiu validas.
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.
Ĝ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.
| Statuso | Rimedoj |
|---|---|
| ✓ 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ĵo | La kodo estas aŭtenta kaj atestita, sed ĉi tio estas spegulo sur alia domajno. Spegulo ne povas forigi ĉi tiun averton sen malsukcesi kontrolon. |
| ✗ Miskongruo | Valoraĵo ne haŝas al tio, kion diras la manifesto. |
| ✗ Neoficiala konstruo | La rekalkulita pakaĵo hash havas neniun ateston de la deponejo - memfarita manifesto. |
| ⚠ Deveno neatingebla | La 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.
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:
| Koloro | Rimedoj |
|---|---|
| Verda — ĉio klara | Subskribita, 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ŭ malaperis | La 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.