Reproduserbare bygg for VPN-appar: kva ein match provar
Eit samsvarande gjenoppbygg knyter ein distribuert binærfil til den deklarerte kjeldekoden og verktøya. Det seier ingenting om VPN-tenesta bak fila eller om loggane hennar.
Reproduserbarheit er ein eigenskap ved forsyningskjeda: dei same deklarerte inndataa må produsere same artefakten. For ein VPN-klient bind den utsegna installasjonsprogrammet du lasta ned, til kjeldekode og verktøykjede som kven som helst kan byggje på nytt. Ho seier ingenting om tenesta klienten koplar seg til.
Det nyttige spørsmålet er difor smalt og svarande. Publiserer prosjektet ei prosedyre, og passar din konkrete artefakt til ho?
Kvar eit bygg sluttar å vere deterministisk
Kompilatorar byggjer inn tidsstempel, absolutte stiar og namn på byggvertar med mindre dei får beskjed om noko anna. Arkiv registrerer filrekkjefølgje og endringstider, lenkjarar varierer utdataa med versjonen av verktøykjeda, og parallell komprimering kan omorganisere blokker. Kvar av desse gjer at to bygg av same kjeldekode avvik i byte utan at noko illevarslande skjer. Determinisme blir bygd inn i eit bygg, det blir aldri arva som standard.
Eit prosjekt som hevdar reproduserbarheit, må namngje normaliseringa det brukar: faste tidsstempel, mappa stiar, sorterte arkivoppføringar, låste versjonar av kompilator og avhengnader. Utan den lista kan eit avvik ikkje tolkast, fordi rommet for legitim variasjon er udefinert.
Dei deklarerte inndataa må også vere fullstendige. Ein depot-URL utan tag er ikkje ein revisjon, ei låsefil utan hash er ikkje eit avhengnadssett, og eit byggjeskript som lastar ned eit verktøy ved køyring, har ei inndata ingen kan feste. Kvar mangel blir seinare til ein skilnad. Fullfør lista før du samanliknar noko, fordi ei ufullstendig liste kan ikkje feile på ein måte som betyr noko.
| 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 |
Kva samanlikninga faktisk sjekkar
Ein uavhengig part byggjer på nytt i det deklarerte miljøet og samanliknar utdataa med den publiserte artefakten. Bitidentisk er den sterke forma; eit dokumentert normaliseringstrinn, der ein registrert skilnad blir reversert og resultata deretter stemmer, er den svakare men framleis nyttige forma.
Samanlikninga handlar om binærfilen. Ein signatur svarar på eit anna spørsmål: han knyter ei utgjeving til ein nøkkel og ein nøkkel til ein identitet, og eit prosjekt kan ha gyldige signaturar over artefaktar ingen har bygd på nytt. Dei to kontrollane stablar seg i staden for å erstatte kvarandre.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Køyr begge før du installerer, og samanlikn hashen med den som er publisert for same utgjeving og plattform. Ein hash som stemmer med leverandøren si side, provar at nedlastinga kom intakt; ein gjenoppbygd binærfil som stemmer med leverandøren sin publiserte hash, provar noko sterkare om korleis han vart laga.
Kvifor eit avvik ikkje er bevis på tukling
Dei fleste avvik kjem frå ei inndata ingen kontrollerte. Ei anna patchutgjeving av kompilatoren, ein byggjestig som lak inn i debug-symbol, ein lokalisasjon som endra sorteringsrekkjefølgja, eller eit pakketrinn brukt etter samanlikninga gjev alle ein annan hash enn ærleg arbeid.
Difor må eit avvik lesast mot den dokumenterte prosedyren før det blir ei historie. Viss prosedyren festar alt og skilnaden blir verande uforklart, er det eit reelt funn som er verdt å ta opp med prosjektet. Viss prosedyren er taus om pakking, kan skilnaden vere heilt venta.
Symmetri tel også her: ein match provar ikkje at kjeldekoden er fri for feil, berre at binærfilen svarar til han. Godt revidert kode og reproduserbar kode er ulike eigenskapar, og eit prosjekt kan ha den eine utan den andre.
Kva påstanden seier om tenesta bak appen
Klienten er eit program på eininga di; tenesta er tenarar, kontosystem og oppbevaringspolitikk andre stader. Reproduserbarheit avgrensar det første og seier ingenting om det andre, same kor nøye installasjonsprogrammet blir verifisert.
Konfigurasjonen av endepunktet kan også endre seg etter installasjon, via fjerninnstillingar eller ein profil leverandøren styrer. Desse endringane kjem over nettverket og blir ikkje dekte av nokon hash du rekna ut før tilkoplinga.
Les påstanden i det faktiske omfanget sitt, og undersøk deretter det tilstøytande spørsmålet separat: kva leverandøren registrerer, og under kva jurisdiksjon han svarar på førespurnader. Ein verifisert binærfil og ei uverifisert teneste kan eksistere side om side, og det er nettopp tilfellet ein forsyningskjederutine er laga for å gjere synleg, ikkje for å rette.