Reproduserbare bygg for VPN-apper: hva en match beviser
Et samsvarende gjenoppbygg knytter en distribuert binærfil til den deklarerte kildekoden og verktøyene. Det sier ingenting om VPN-tjenesten bak filen eller om loggene dens.
Reproduserbarhet er en egenskap ved forsyningskjeden: de samme deklarerte inndataene må produsere samme artefakt. For en VPN-klient binder den uttalelsen installasjonsprogrammet du lastet ned, til kildekode og verktøykjede som hvem som helst kan bygge på nytt. Den sier ingenting om tjenesten klienten kobler seg til.
Det nyttige spørsmålet er derfor smalt og besvarbart. Publiserer prosjektet en prosedyre, og passer din konkrete artefakt til den?
Hvor et bygg slutter å være deterministisk
Kompilatorer bygger inn tidsstempler, absolutte stier og navn på byggverter med mindre de får beskjed om noe annet. Arkiver registrerer filrekkefølge og endringstider, linkere varierer utdataene med verktøykjedens versjon, og parallell komprimering kan omorganisere blokker. Enhver av disse gjør at to bygg av samme kildekode avviker i byte uten at noe illevarslende skjer. Determinisme bygges inn i et bygg, det arves aldri som standard.
Et prosjekt som hevder reproduserbarhet, må navngi normaliseringen det bruker: faste tidsstempler, mappede stier, sorterte arkivoppføringer, låste versjoner av kompilator og avhengigheter. Uten den listen kan en avvikelse ikke tolkes, fordi rommet av legitim variasjon er udefinert.
De deklarerte inndataene må også være fullstendige. En depot-URL uten tag er ikke en revisjon, en låsefil uten hash er ikke et avhengighetssett, og et byggeskript som laster ned et verktøy ved kjøring, har en inndata ingen kan feste. Hver mangel blir senere til en forskjell. Fullfør listen før du sammenligner noe, fordi en ufullstendig liste ikke kan feile på en måte som betyr noe.
| 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 |
Hva sammenligningen faktisk sjekker
En uavhengig part bygger på nytt i det deklarerte miljøet og sammenligner utdataene med den publiserte artefakten. Bitidentisk er den sterke formen; et dokumentert normaliseringstrinn, der en registrert forskjell reverseres og resultatene deretter stemmer, er den svakere men fortsatt nyttige formen.
Sammenligningen handler om binærfilen. En signatur svarer på et annet spørsmål: den knytter en utgivelse til en nøkkel og en nøkkel til en identitet, og et prosjekt kan ha gyldige signaturer over artefakter ingen har bygget på nytt. De to kontrollene stables i stedet for å erstatte hverandre.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Kjør begge før du installerer, og sammenlign hashen med den som er publisert for samme utgivelse og plattform. En hash som stemmer med leverandørens side, beviser at nedlastingen kom intakt; en gjenoppbygd binærfil som stemmer med leverandørens publiserte hash, beviser noe sterkere om hvordan den ble laget.
Hvorfor en avvikelse ikke er bevis på tukling
De fleste avvikelser kommer fra en inndata ingen kontrollerte. En annen patchutgivelse av kompilatoren, en byggesti som lakk inn i debug-symboler, en lokalisering som endret sorteringsrekkefølgen, eller et pakketrinn brukt etter sammenligningen gir alle en annen hash enn ærlig arbeid.
Derfor må en avvikelse leses mot den dokumenterte prosedyren før den blir en historie. Hvis prosedyren fester alt og forskjellen forblir uforklart, er det et reelt funn som er verdt å ta opp med prosjektet. Hvis prosedyren er taus om pakking, kan forskjellen være helt forventet.
Symmetri teller også her: en match beviser ikke at kildekoden er fri for feil, bare at binærfilen svarer til den. Godt revidert kode og reproduserbar kode er forskjellige egenskaper, og et prosjekt kan ha den ene uten den andre.
Hva påstanden sier om tjenesten bak appen
Klienten er et program på enheten din; tjenesten er servere, kontosystemer og oppbevaringspolicyer andre steder. Reproduserbarhet begrenser det første og sier ingenting om det andre, uansett hvor nøye installasjonsprogrammet verifiseres.
Konfigurasjonen av endepunktet kan også endres etter installasjon, via fjerninnstillinger eller en profil leverandøren styrer. Disse endringene kommer over nettverket og dekkes ikke av noen hash du beregnet før tilkoblingen.
Les påstanden i dens faktiske omfang, og undersøk deretter det tilstøtende spørsmålet separat: hva leverandøren registrerer, og under hvilken jurisdiksjon den svarer på forespørsler. En verifisert binærfil og en uverifisert tjeneste kan eksistere side om side, og det er nettopp tilfellet en forsyningskjedekontroll er laget for å gjøre synlig, ikke for å rette.