Reproducerbare builds til VPN-apps: hvad en overensstemmelse beviser
En overensstemmende genopbygning knytter en distribueret binærfil til den deklarerede kildekode og de deklarerede værktøjer. Den siger intet om VPN-tjenesten bag filen eller om dens logfiler.
Reproducerbarhed er en egenskab ved forsyningskæden: de samme deklarerede input skal frembringe det samme artefakt. For en VPN-klient binder den udtalelse det installationsprogram, du hentede, til kildekode og værktøjskæde, som enhver kan genopbygge. Den siger intet om den tjeneste, klienten opretter forbindelse til.
Det nyttige spørgsmål er derfor snævert og kan besvares. Offentliggør projektet en procedure, og passer din konkrete artefakt til den?
Hvor en build holder op med at være deterministisk
Kompilere indlejrer tidsstempler, absolutte stier og værtsnavne for bygget, medmindre de får besked om at lade være. Arkiver registrerer filrækkefølge og ændringstider, linkere varierer deres output med værktøjskædens version, og parallel komprimering kan omordne blokke. Hvilken som helst af disse ting får to builds af den samme kildekode til at afvige i bytes, uden at der sker noget ildevarslende. Determinisme konstrueres ind i en build, den nedarves aldrig som standard.
Et projekt, der hævder reproducerbarhed, skal navngive den normalisering, det anvender: faste tidsstempler, afbildede stier, sorterede arkivposter, fastlåste versioner af kompiler og afhængigheder. Uden den liste kan en afvigelse ikke fortolkes, fordi rummet af legitim variation er udefineret.
De deklarerede input skal også være fuldstændige. En lager-URL uden tag er ikke en revision, en låsefil uden hash er ikke et afhængighedssæt, og et build-script, der henter et værktøj under kørslen, har et input, som ingen kan fastlåse. Hvert hul bliver senere til en forskel. Færdiggør listen, før du sammenligner noget, for en ufuldstændig liste kan ikke fejle på en måde, der betyder noget.
| 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 |
Hvad sammenligningen faktisk kontrollerer
En uafhængig part genopbygger i det deklarerede miljø og sammenligner output med det offentliggjorte artefakt. Bitidentisk er den stærke form; et dokumenteret normaliseringstrin, hvor en registreret forskel tilbageføres, og resultaterne derefter stemmer overens, er den svagere, men stadig nyttige form.
Sammenligningen handler om binærfilen. En signatur besvarer et andet spørgsmål: den knytter en udgivelse til en nøgle og en nøgle til en identitet, og et projekt kan have gyldige signaturer over artefakter, som ingen har genopbygget. De to kontroller lægges oven på hinanden i stedet for at erstatte hinanden.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Kør begge, før du installerer, og sammenlign hashen med den, der er offentliggjort for samme udgivelse og platform. En hash, der matcher leverandørens side, beviser, at downloadet ankom intakt; en genopbygget binærfil, der matcher leverandørens offentliggjorte hash, beviser noget stærkere om, hvordan den blev lavet.
Hvorfor en afvigelse ikke er bevis på manipulation
De fleste afvigelser kommer fra et input, som ingen havde kontrol over. En anden patchudgivelse af kompilieren, en build-sti, der lækkede ind i debug-symboler, en locale, der ændrede sorteringsrækkefølgen, eller et pakketrin anvendt efter sammenligningen giver alle en anden hash end ærligt arbejde.
Derfor skal en afvigelse læses op imod den dokumenterede procedure, før den bliver til en historie. Hvis proceduren fastlåser alt, og forskellen forbliver uforklaret, er det en reel iagttagelse, der er værd at rejse over for projektet. Hvis proceduren er tavs om pakning, kan forskellen være helt forventet.
Symmetri tæller også her: en overensstemmelse beviser ikke, at kildekoden er fri for fejl, kun at binærfilen svarer til den. Godt revideret kode og reproducerbar kode er forskellige egenskaber, og et projekt kan have den ene uden den anden.
Hvad påstanden siger om tjenesten bag appen
Klienten er et program på din enhed; tjenesten er servere, kontosystemer og opbevaringspolitikker andre steder. Reproducerbarhed begrænser det første og siger intet om det andet, uanset hvor omhyggeligt installationsprogrammet verificeres.
Konfigurationen af slutpunktet kan også ændre sig efter installationen, via fjernindstillinger eller en profil, som udbyderen styrer. De ændringer ankommer over netværket og dækkes ikke af nogen hash, du beregnede før forbindelsen.
Læs påstanden for dens faktiske omfang, og undersøg derefter det tilstødende spørgsmål separat: hvad udbyderen registrerer, og under hvilken jurisdiktion den besvarer anmodninger. En verificeret binærfil og en uverificeret tjeneste kan eksistere side om side, og det er præcis det tilfælde, en forsyningskædekontrol er designet til at gøre synligt, ikke til at rette.