Прайгравальнасць — уласцівасць ланцуга паставак: адны і тыя ж абвешчаныя ўваходы павінны ствараць адзін і той жа артэфакт. Для VPN-кліента гэтае сцвярджэнне звязвае ўсталёўнік, які вы спампавалі, з зыходнікамі і інструментамі, якія можа перасабраць любы ахвотны. Пра сэрвіс, да якога падключаецца кліент, яно не кажа нічога.

Карыснае пытанне таму вузкае і мае адказ. Ці публікуе праект працэдуру, і ці адпавядае ёй менавіта ваш артэфакт?

Дзе зборка перастае быць дэтэрмінаванай

Кампілятары ўбудоўваюць часовыя меткі, абсалютныя шляхі і імёны зборачных хастоў, калі ім не забараніць гэта рабіць. Архівы запісваюць парадак файлаў і час іх змянення, лінкеры змяняюць вынік у залежнасці ад версіі інструментаў, а паралельнае сцісканне можа пераўпарадкаваць блокі. Любое з гэтага прыводзіць да таго, што дзве зборкі аднаго і таго ж зыходніка адрозніваюцца па байтах, і нічога злавеснага пры гэтым не адбываецца. Дэтэрмінаванасць убудоўваюць у зборку, а не атрымліваюць яе па змаўчанні.

Праект, які заяўляе прайгравальнасць, павінен назваць прымяняемую нармалізацыю: фіксаваныя часовыя меткі, адлюстраваныя шляхі, адсартаваныя запісы архіва, замацаваныя версіі кампілятара і залежнасцей. Без гэтага спісу разыходжанне немагчыма інтэрпрэтаваць, бо прастора дапушчальных варыяцый не вызначана.

Абвешчаныя ўваходы таксама павінны быць поўнымі. URL рэпазіторыя без тэга — не рэвізія, файл блакіроўкі без хэша — не набор залежнасцей, а зборачны скрыпт, які спампоўвае інструмент падчас выканання, мае ўваход, які ніхто не можа замацаваць. Кожная прага пазней ператвараецца ў адрозненне. Дапаўніце спіс, перш чым нешта параўноўваць, бо няпоўны спіс не можа праваліцца так, каб гэта нешта значыла.

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

Што параўнанне насамрэч правярае

Незалежны бок перабудоўвае ў абвешчаным асяроддзі і параўноўвае вынік з апублікаваным артэфактам. Бітавая тоеснасць — гэта моцная форма; дакументаваны крок нармалізацыі, калі зафіксаванае адрозненне адмяняюць і вынікі тады супадаюць, — больш слабая, але ўсё яшчэ карысная форма.

Параўнанне датычыцца бінарнага файла. Подпіс адказвае на іншае пытанне: ён звязвае выпуск з ключом, а ключ — з асобай, і праект можа мець сапраўдныя подпісы над артэфактамі, якія ніхто не перабіраў. Дзве праверкі дапаўняюць адна адну, а не замяняюць.

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

Выканайце абедзве перад усталяваннем і параўнайце хэш з апублікаваным для таго ж выпуску і платформы. Хэш, які супадае са старонкай пастаўшчыка, даказвае, што спампоўка прыйшла цэлай; перасабраны бінарны файл, які супадае з апублікаваным хэшам пастаўшчыка, даказвае нешта мацнейшае пра тое, як ён быў зроблены.

Чаму разыходжанне не даказвае ўмяшання

Большасць разыходжанняў паходзіць з уваходу, які ніхто не кантраляваў. Іншы выпуск патча кампілятара, шлях зборкі, які прасачыўся ў сімвалы адладкі, мова, што змяніла парадак сартавання, або крок упакоўкі, ужыты пасля параўнання, — усё гэта дае іншы хэш, чым сумленная праца.

Таму разыходжанне трэба чытаць супраць дакументаванай працэдуры, перш чым яно стане гісторыяй. Калі працэдура фіксуе ўсё, а розніца застаецца невытлумачанай, гэта сапраўдная знаходка, якую варта паведаміць праекту. Калі працэдура маўчыць пра ўпакоўку, розніца можа быць цалкам чаканай.

Сіметрыя тут таксама важная: супадзенне не даказвае, што зыходнікі без дэфектаў, а толькі што бінарны файл ім адпавядае. Добра правераны код і прайгравальны код — розныя ўласцівасці, і праект можа мець адну без другой.

Што заява кажа пра сэрвіс за праграмай

Кліент — гэта праграма на вашай прыладзе; сэрвіс — гэта серверы, сістэмы ўліковых запісаў і палітыкі захавання ў іншым месцы. Прайгравальнасць абмяжоўвае першае і нічога не кажа пра другое, як бы старанна ні правяраўся ўсталёўнік.

Канфігурацыя канчатковай кропкі таксама можа змяніцца пасля ўсталявання — праз аддаленыя налады або профіль, які кантралюе пастаўшчык. Гэтыя змены прыходзяць па сетцы і не пакрываюцца ніводным хэшам, які вы вылічылі перад падключэннем.

Чытайце заяву ў яе сапраўдным аб'ёме, затым асобна праверце суседняе пытанне: што пастаўшчык запісвае і ў якой юрысдыкцыі адказвае на запыты. Правераны бінарны файл і неправераны сэрвіс могуць існаваць разам, і менавіта гэты выпадак праверка ланцуга паставак прызначана зрабіць бачным, а не выправіць.

Падобныя артыкулы