Atkuriami VPN programų rinkiniai: ką įrodo sutapimas
Sutampantis perrinkimas susieja platinamą dvejetainį failą su deklaruotu šaltiniu ir įrankiais. Jis nieko nesako apie VPN paslaugą, esančią už to failo, arba apie jos žurnalus.
Atkuriamumas yra tiekimo grandinės savybė: tie patys deklaruoti įėjimai turi sukurti tą patį artefaktą. VPN klientui šis teiginys susieja atsisiųstą diegėją su šaltiniu ir įrankių grandine, kurią kiekvienas gali perrinkti. Jis nieko nesako apie paslaugą, prie kurios jungiasi klientas.
Naudingas klausimas todėl siauras ir atsakomas. Ar projektas skelbia procedūrą, ir ar jūsų konkretus artefaktas ją atitinka?
Kur rinkinys nustoja būti deterministinis
Kompiliatoriai įterpia laiko žymes, absoliučius kelius ir rinkimo hostų vardus, nebent jiems tai uždraudžiama. Archyvai įrašo failų tvarką ir modifikavimo laikus, ryšio kūrėjai keičia išvestį pagal įrankių grandinės versiją, o lygiagretus glaudinimas gali perrikiuoti blokus. Bet kuris iš to daro du to paties šaltinio rinkinius skirtingus baitais, nieko grėsmingo nevykstant. Determinizmas į rinkinį įtraukiamas inžineriškai, jis niekada nepaveldimas pagal nutylėjimą.
Projektas, teigiantis atkuriamumą, turi įvardyti taikomą normalizavimą: fiksuotos laiko žymės, susieti keliai, surikiuoti archyvo įrašai, užfiksuotos kompiliatoriaus ir priklausomybių versijos. Be šio sąrašo neatitikimo neįmanoma interpretuoti, nes teisėtos variacijos erdvė neapibrėžta.
Deklaruoti įėjimai taip pat turi būti išsamūs. Saugyklos URL be žymos nėra revizija, užrakinimo failas be hash nėra priklausomybių rinkinys, o rinkimo scenarijus, kuris vykdymo metu atsisiunčia įrankį, turi įėjimą, kurio niekas negali užfiksuoti. Kiekviena spraga vėliau tampa skirtumu. Užbaikite sąrašą prieš ką nors lygindami, nes nepilnas sąrašas negali nepavykti taip, kad tai ką nors reikštų.
| 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 |
Ką iš tikrųjų tikrina palyginimas
Nepriklausoma šalis perrenka deklaruotoje aplinkoje ir palygina išvestį su paskelbtu artefaktu. Bitas į bitą tapatumas yra stiprioji forma; dokumentuotas normalizavimo žingsnis, kai užfiksuotas skirtumas atvirkščiai pakeičiamas ir rezultatai tada sutampa, yra silpnesnė, bet vis dar naudinga forma.
Palyginimas susijęs su dvejetainiu failu. Parašas atsako į kitą klausimą: jis susieja leidimą su raktu, o raktą su tapatybe, ir projektas gali turėti galiojančius parašus ant artefaktų, kurių niekas neperrinko. Abi patikros sumuojasi, o ne pakeičia viena kitą.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Paleiskite abi prieš diegdami ir palyginkite hash su paskelbtu tam pačiam leidimui ir platformai. Hash, atitinkantis tiekėjo puslapį, įrodo, kad atsisiuntimas atkeliavo nepakitęs; perrinktas dvejetainis failas, atitinkantis tiekėjo paskelbtą hash, įrodo ką nors stipresnio apie tai, kaip jis buvo pagamintas.
Kodėl neatitikimas nėra klastojimo įrodymas
Dauguma neatitikimų kyla iš įėjimo, kurio niekas nekontroliavo. Kita kompiliatoriaus pataisos versija, į derinimo simbolius nutekėjęs rinkimo kelias, lokalė, pakeitusi rūšiavimo tvarką, arba po palyginimo pritaikytas pakavimo žingsnis – visi duoda kitokį hash nei sąžiningas darbas.
Todėl neatitikimą reikia skaityti prieš dokumentuotą procedūrą, kol jis netapo istorija. Jei procedūra viską užfiksuoja, o skirtumas lieka nepaaiškintas, tai tikras radinys, kurį verta pateikti projektui. Jei procedūra tyli apie pakavimą, skirtumas gali būti visiškai laukiamas.
Simetrija čia taip pat svarbi: sutapimas neįrodo, kad šaltinis neturi defektų, tik kad dvejetainis failas jį atitinka. Gerai audituotas kodas ir atkuriamas kodas yra skirtingos savybės, ir projektas gali turėti vieną be kitos.
Ką teiginys sako apie paslaugą už programos
Klientas yra programa jūsų įrenginyje; paslauga yra serveriai, paskyrų sistemos ir saugojimo politika kitur. Atkuriamumas riboja pirmąjį ir nieko nesako apie antrąjį, kad ir kaip kruopščiai būtų tikrinamas diegėjas.
Galinių taškų konfigūracija taip pat gali pasikeisti po diegimo – per nuotolinius nustatymus ar tiekėjo valdomą profilį. Tie pakeitimai ateina per tinklą ir jų neapima joks hash, kurį apskaičiavote prieš prisijungdami.
Skaitykite teiginį jo tikroje apimtyje, tada atskirai patikrinkite gretimą klausimą: ką tiekėjas įrašo ir pagal kokią jurisdikciją atsako į užklausas. Patikrintas dvejetainis failas ir nepatikrinta paslauga gali egzistuoti drauge, ir būtent tai yra atvejis, kurį tiekimo grandinės patikra sukurta padaryti matomą, o ne ištaisyti.