Toistettavuus on toimitusketjun ominaisuus: samojen ilmoitettujen syötteiden on tuotettava sama artefakti. VPN-asiakasohjelman kohdalla tuo väite sitoo lataamasi asennusohjelman lähdekoodiin ja työkaluketjuun, jonka kuka tahansa voi koota uudelleen. Se ei kerro mitään palvelusta, johon asiakasohjelma yhdistää.

Hyödyllinen kysymys on siksi kapea ja vastattavissa. Julkaiseeko projekti menettelytavan, ja vastaako juuri sinun artefaktisi sitä?

Missä koontiversio lakkaa olemasta deterministinen

Kääntäjät upottavat aikaleimoja, absoluuttisia polkuja ja koontipalvelimien nimiä, ellei niitä erikseen kielletä. Arkistot tallentavat tiedostojen järjestyksen ja muokkausajat, linkittimet muuttavat tulostaan työkaluketjun version mukaan, ja rinnakkainen pakkaus voi järjestää lohkot uudelleen. Mikä tahansa näistä saa kaksi saman lähdekoodin koontiversiota eroamaan tavuissa ilman, että mitään synkkää tapahtuu. Deterministisyys rakennetaan koontiversioon, sitä ei koskaan peritä oletuksena.

Projektin, joka väittää toistettavuutta, on nimettävä soveltamansa normalisointi: kiinteät aikaleimat, kartoitetut polut, lajitellut arkistomerkinnät, kiinnitetyt kääntäjän ja riippuvuuksien versiot. Ilman tuota luetteloa poikkeamaa ei voi tulkita, koska laillisen vaihtelun avaruus on määrittelemätön.

Myös ilmoitettujen syötteiden on oltava täydellisiä. Repositorion URL ilman tagia ei ole revisio, lukitustiedosto ilman hashia ei ole riippuvuusjoukko, ja koontiskripti, joka lataa työkalun ajon aikana, sisältää syötteen, jota kukaan ei voi kiinnittää. Jokainen aukko muuttuu myöhemmin eroksi. Täydennä luettelo ennen kuin vertaat mitään, sillä puutteellinen luettelo ei voi epäonnistua tavalla, joka tarkoittaa jotain.

InputHow it driftsWhat pins it
SourceBranch moves after releaseCommit hash in the build metadata
ToolchainCompiler patch level differsContainer image digest
PackagingArchive order and mtimes varyNormalised archive settings

Mitä vertailu itse asiassa tarkistaa

Riippumaton osapuoli kokoaa uudelleen ilmoitetussa ympäristössä ja vertaa tulosta julkaistuun artefaktiin. Bittitasoinen yhtenevyys on vahva muoto; dokumentoitu normalisointivaihe, jossa kirjattu ero kumotaan ja tulokset sitten täsmäävät, on heikompi mutta silti hyödyllinen muoto.

Vertailu koskee binaaritiedostoa. Allekirjoitus vastaa toiseen kysymykseen: se yhdistää julkaisun avaimeen ja avaimen identiteettiin, ja projektilla voi olla kelvollisia allekirjoituksia artefakteille, joita kukaan ei ole koonnut uudelleen. Kaksi tarkistusta kerrostuvat sen sijaan, että korvaisivat toisensa.

sha256sum wireguard-installer.msi
gpg --verify wireguard-installer.msi.sig wireguard-installer.msi

Suorita molemmat ennen asennusta ja vertaa hashia samalle julkaisulle ja alustalle julkaistuun. Toimittajan sivun kanssa täsmäävä hash todistaa, että lataus saapui ehjänä; uudelleen koottu binaaritiedosto, joka täsmää toimittajan julkaisemaan hashiin, todistaa jotain vahvempaa siitä, miten se tehtiin.

Miksi poikkeama ei ole todiste peukaloinnista

Useimmat poikkeamat tulevat syötteestä, jota kukaan ei valvonut. Toinen kääntäjän päivitysjulkaisu, virheenkorjaussymboleihin vuotanut koontipolku, lajittelujärjestyksen muuttanut maa-asetus tai vertailun jälkeen sovellettu pakkausvaihe tuottavat kaikki erilaisen hashin kuin rehellinen työ.

Siksi poikkeama on luettava dokumentoitua menettelytapaa vasten ennen kuin siitä tulee tarina. Jos menettelytapa kiinnittää kaiken ja ero jää selittämättä, se on todellinen löydös, joka kannattaa nostaa esiin projektin kanssa. Jos menettelytapa vaikenee pakkauksesta, ero voi olla täysin odotettu.

Symmetrialla on merkitystä myös tässä: vastaavuus ei todista, että lähdekoodi on virheetön, vain että binaaritiedosto vastaa sitä. Hyvin auditoitu koodi ja toistettava koodi ovat eri ominaisuuksia, ja projekti voi omata toisen ilman toista.

Mitä väite kertoo sovelluksen takana olevasta palvelusta

Asiakasohjelma on laiteessasi oleva ohjelma; palvelu on palvelimia, tilijärjestelmiä ja säilytyskäytäntöjä muualla. Toistettavuus rajoittaa ensimmäistä eikä kerro toisesta mitään, riippumatta siitä, kuinka huolellisesti asennusohjelma varmennetaan.

Päätepisteen kokoonpano voi myös muuttua asennuksen jälkeen etäasetuksilla tai palveluntarjoajan hallitsemalla profiililla. Ne muutokset saapuvat verkon yli, eikä niitä kata mikään hash, jonka laskit ennen yhteyden muodostamista.

Lue väite sen todellisessa laajuudessa ja tarkista sitten viereinen kysymys erikseen: mitä palveluntarjoaja tallentaa ja minkä lainkäyttövallan alaisena se vastaa pyyntöihin. Varmennettu binaaritiedosto ja varmistamaton palvelu voivat olla olemassa rinnakkain, ja juuri se on tapaus, jonka toimitusketjun tarkistus on tarkoitettu tekemään näkyväksi, ei korjaamaan.

Aiheeseen liittyvät artikkelit