Riprodukteblaj konstruoj por VPN-aplikoj: kion pruvas kongruo
Kongrua rekonstruo ligas distribuitan binaran dosieron al la deklarita fontkodo kaj iloj. Ĝi diras nenion pri la VPN-servo malantaŭ tiu dosiero aŭ pri ĝia protokolo.
Riproduktebleco estas eco de la provizoĉeno: la samaj deklaritaj enigoj devas produkti la saman artefakton. Por VPN-kliento tiu aserto ligas la instalilon, kiun vi elŝutis, al fontkodo kaj ilaro, kiujn iu ajn povas rekonstrui. Ĝi diras nenion pri la servo, al kiu la kliento konektiĝas.
La utila demando estas do mallarĝa kaj respondebla. Ĉu la projekto publikigas proceduron, kaj ĉu via konkreta artefakto kongruas kun ĝi?
Kie konstruo ĉesas esti determinisma
Kompililoj enigas tempindikojn, absolutajn vojojn kaj nomojn de konstruaj gastigantoj, se oni ne malpermesas tion. Arkivoj registras dosierordon kaj modifajn tempojn, ligiloj varias sian eligon laŭ la versio de la ilaro, kaj paralela kunpremado povas reordigi blokojn. Iu ajn el tiuj igas du konstruojn de la sama fontkodo malsami en bajtoj, sen ke io malbona okazas. Deterministeco estas enkonstruata en konstruon, neniam heredata defaŭlte.
Projekto, kiu asertas ripoduhteblecon, devas nomi la normaligon, kiun ĝi aplikas: fiksaj tempindikoj, mapitaj vojoj, ordigitaj arkivaj eroj, fiksitaj versioj de kompililo kaj dependaĵoj. Sen tiu listo, diferenco ne povas esti interpretata, ĉar la spaco de laŭleĝa variado estas nedifinita.
La deklaritaj enigoj ankaŭ devas esti kompletaj. Deponeja URL sen etikedo ne estas revizio, ŝlosildosiero sen haŝo ne estas dependaĵaro, kaj konstrua skripto, kiu elŝutas ilon dum plenumo, havas enigon, kiun neniu povas fiksi. Ĉiu manko fariĝas poste diferenco. Kompletigu la liston antaŭ ol kompari ion ajn, ĉar nekompleta listo ne povas malsukcesi tiel, ke tio signifu ion.
| Input | How it drifts | What pins it |
|---|---|---|
| Source | Branch moves after release | Commit hash in the build metadata |
| Toolchain | Compiler patch level differs | Container image digest |
| Packaging | Archive order and mtimes vary | Normalised archive settings |
Kion la komparo efektive kontrolas
Sendependa partio rekonstruas en la deklarita medio kaj komparas la eligon kun la publikigita artefakto. Bit-identeco estas la forta formo; dokumentita normaliga paŝo, en kiu registrita diferenco estas inversigata kaj la rezultoj poste kongruas, estas la pli malforta sed ankoraŭ utila formo.
La komparo temas pri la binara dosiero. Subskribo respondas al alia demando: ĝi ligas eldonon al ŝlosilo kaj ŝlosilon al identeco, kaj projekto povas havi validajn subskribojn super artefaktoj, kiujn neniu rekonstruis. La du kontroloj stakiĝas anstataŭ anstataŭigi unu la alian.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Rulu ambaŭ antaŭ ol instali, kaj komparu la haŝon kun tiu publikigita por la sama eldono kaj platformo. Haŝo kongrua kun la paĝo de la vendanto pruvas, ke la elŝuto alvenis sendifekte; rekonstruita binara dosiero kongrua kun la publikigita haŝo de la vendanto pruvas ion pli fortan pri tio, kiel ĝi estis farita.
Kial diferenco ne estas pruvo de manipulado
Plej multaj diferencoj venas de enigo, kiun neniu kontrolis. Alia flika eldono de la kompililo, konstrua vojo, kiu likis en sencimigajn simbolojn, lokaĵo, kiu ŝanĝis la ordigan ordon, aŭ pakada paŝo aplikita post la komparo ĉiuj produktas alian haŝon ol honesta laboro.
Tial diferenco devas esti legata kontraŭ la dokumentita proceduro antaŭ ol ĝi fariĝos rakonto. Se la proceduro fiksas ĉion kaj la diferenco restas neklarigita, tio estas reala trovajo, kiun indas prezenti al la projekto. Se la proceduro silentas pri pakado, la diferenco povas esti tute atendita.
Simetrio gravas ankaŭ ĉi tie: kongruo ne pruvas, ke la fontkodo estas sen difektoj, nur ke la binara dosiero respondas al ĝi. Bone reviziita kodo kaj ripoduktebla kodo estas malsamaj ecoj, kaj projekto povas havi unu sen la alia.
Kion la aserto diras pri la servo malantaŭ la aplikaĵo
La kliento estas programo sur via aparato; la servo estas serviloj, kontaj sistemoj kaj konservaj politikoj aliloke. Riproduktebleco limigas la unuan kaj diras nenion pri la dua, kiom ajn zorge la instalilo estas kontrolata.
La agordo de la finpunkto ankaŭ povas ŝanĝiĝi post la instalado, per foraj agordoj aŭ profilo kontrolata de la provizanto. Tiuj ŝanĝoj alvenas tra la reto kaj ne estas kovritaj de iu haŝo, kiun vi kalkulis antaŭ la konekto.
Legu la aserton laŭ ĝia reala amplekso, poste kontrolu aparte la apudan demandon: kion la provizanto registras, kaj sub kiu jurisdikcio ĝi respondas al petoj. Kontrolita binara dosiero kaj nekontrolita servo povas kunekzisti, kaj ĝuste tiu estas la kazo, kiun provizaĉena kontrolo celas igi videbla, ne ripari.