Reprodusearbere builds foar VPN-apps: wat in oerienkomst bewiist
In oerienkommende werbou ferbynt in ferspriede binêr bestân mei de ferklearre boarncode en ark. It seit neat oer de VPN-tsjinst efter dat bestân of oer de logs dêrfan.
Reprodusearberens is in eigenskip fan de leveringsketen: deselde ferklearre ynfier moat deselde artefakt opleverje. Foar in VPN-klant ferbynt dy útspraak de ynstallearder dy't jo downloade hawwe oan boarncode en ark dy't elkenien werbouwe kin. It seit neat oer de tsjinst dêr't de klant him mei ferbynt.
De nuttige fraach is dêrom smel en te beäntwurdzjen. Publisearret it projekt in proseduere, en past jo spesifike artefakt dêrby?
Wêr't in build ophâldt deterministysk te wêzen
Kompilators bouwe tiidstimpels, absolute paden en nammen fan build-hosts yn, útsein as har dat ferbean wurdt. Argiven registrearje bestânsfolchoarder en wizigingsfacetten, linkers feroarje har útfier mei de ferzje fan 'e arkkaai, en parallelle kompresje kin blokken omskikke. Elk fan dy dingen soarget derfoar dat twa builds fan deselde boarncode yn bytes ferskille sûnder dat der eat kweadaardichs bart. Determinisme wurdt yn in build ynekocht, it wurdt nea standert erfd.
In projekt dat reprodusearberens beweart, moat de tapaste normalisaasje neame: fêste tiidstimpels, mappte paden, sortearre argyfynfier, fêstleine ferzjes fan kompilator en ôfhinklikens. Sûnder dy list kin in ôfwiking net ynterpretearre wurde, om't de romte fan legitime fariaasje net definiearre is.
De ferklearre ynfier moat ek folslein wêze. In repository-URL sûnder tag is gjin revyzje, in lockbestân sûnder hash is gjin set fan ôfhinklikens, en in build-skript dat by it útfieren in ark downloadt hat in ynfier dy't nimmen fêstlizze kin. Elk gat wurdt letter in ferskil. Meitsje de list kompleet foardat jo eat ferlykje, want in ûnfolsleine list kin net mislearje op in manier dy't eat betsjut.
| 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 |
Wat de ferliking eins kontrolearret
In ûnôfhinklike partij bout op 'e nij yn 'e ferklearre omjouwing en ferliket de útfier mei de publisearre artefakt. Bit-identyk is de sterke foarm; in dokumintearre normalisaasjestap, wêrby't in registrearre ferskil weromdraaid wurdt en de resultaten dan oerienkomme, is de swakkere mar noch nuttige foarm.
De ferliking giet oer it binêre bestân. In hantekening beäntwurdet in oare fraach: it ferbynt in útjefte oan in kaai en in kaai oan in identiteit, en in projekt kin jildige hantekeningen hawwe oer artefakten dy't nimmen werboud hat. De twa kontrôles steapelje ynstee fan inoar te ferfangen.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Rin beide foar it ynstallearjen en ferlykje de hash mei dy't publisearre is foar deselde útjefte en platfoarm. In hash dy't mei de side fan 'e leveransier oerienkomt, bewiist dat de download yntakt oankaam; in werboud binêr bestân dat mei de publisearre hash fan 'e leveransier oerienkomt, bewiist eat sterkers oer hoe't it makke is.
Wêrom't in ôfwiking gjin bewiis fan manipulaasje is
De measte ôfwikings komme fan in ynfier dy't nimmen kontrolearre. In oare patchútjefte fan 'e kompilator, in build-pad dat yn debug-symbolen lekte, in locale dy't de sortearfolchoarder feroare, of in ferpakkingsstap nei de ferliking jouwe allegear in oare hash as earlik wurk.
Dêrom moat in ôfwiking tsjin 'e dokumintearre proseduere lêzen wurde foardat it in ferhaal wurdt. As de proseduere alles fêstleit en it ferskil bliuwt ûnferklearre, dan is dat in echte befinning dy't it wurdich is om by it projekt oan te kaartsjen. As de proseduere stil is oer ferpakking, kin it ferskil hielendal ferwachte wêze.
Symmetry telt hjir ek: in oerienkomst bewiist net dat de boarncode frij fan flaters is, allinnich dat it binêre bestân derby past. Goed auditsje koad en reprodusearbere koad binne ferskillende eigenskippen, en in projekt kin de iene hawwe sûnder de oare.
Wat de bewearing seit oer de tsjinst efter de app
De klant is in programma op jo apparaat; de tsjinst is servers, akkountsystemen en bewaringsbelied earne oars. Reprodusearberens beheint it earste en seit neat oer it twadde, hoe soarchfâldich de ynstallearder ek ferifiearre wurdt.
De konfiguraasje fan it einpunt kin nei it ynstallearjen ek feroarje, fia ôfstânsynstellingen of in profyl dat de oanbieder kontrolearret. Dy feroarings komme oer it netwurk en wurde net dekt troch in hash dy't jo foar it ferbinen berekkene hawwe.
Lês de bewearing yn har werklike omfang en kontrolearje dan apart de neistlizzende fraach: wat de oanbieder registrearret, en ûnder hokker jurisdiksje hy op fersiken antwurdet. In ferifiearre binêr bestân en in net-ferifiearre tsjinst kinne njonken inoar bestean, en dat is krekt it gefal dat in leveringsketenkontrôle ûntwurpen is om sichtber te meitsjen, net om it te reparearjen.