Репродуктивни градби за VPN апликации: што докажува совпаѓањето
Совпаѓачката повторна градба го поврзува дистрибуираниот бинарен фајл со декларираниот изворен код и алатки. Таа не кажува ништо за VPN услугата зад тој фајл или за нејзините дневници.
Репродуктивноста е својство на синџирот на снабдување: истите декларирани влезови мора да го произведат истиот артефакт. За VPN клиент, таа изјава го поврзува инсталаторот што го превзедовте со изворниот код и алатниот синџир што секој може повторно да го изгради. Таа не кажува ништо за услугата на која се поврзува клиентот.
Заради тоа корисното прашање е тесно и има одговор. Дали проектот објавува постапка, и дали вашиот конкретен артефакт одговара на неа?
Каде градбата престанува да биде детерминистичка
Компајлерите вградуваат временски ознаки, апсолутни патеки и имиња на хостовите за градба, освен ако тоа не им се забрани. Архивите го запишуваат редоследот на фајловите и времињата на промена, поврзувачите го менуваат излезот со верзијата на алатниот синџир, а паралелната компресија може да ги пререди блоковите. Секое од тоа прави две градби од истиот изворен код да се разликуваат во бајти без ништо застрашувачко да се случи. Детерминизмот се вградува во градбата со инженерство, никогаш не се наследува по дифолт.
Проектот што тврди репродуктивност мора да ја именува нормализацијата што ја применува: фиксни временски ознаки, мапирани патеки, подредени архивски записи, закачени верзии на компајлерот и зависностите. Без тој список, несовпаѓањето не може да се протолкува, бидејќи просторот на легитимна варијација е недефиниран.
Декларираните влезови исто така мора да бидат целосни. URL на складиште без ознака не е ревизија, датотека за заклучување без hash не е множество зависности, а скриптата за градба што презема алатка за време на извршување има влез што никој не може да го закачи. Секоја празнина подоцна станува разлика. Дополнете го списокот пред да споредувате нешто, бидејќи нецелосниот список не може да пропадне на начин што значи нешто.
| 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 |
Што всушност проверува споредбата
Независна страна повторно гради во декларираната околина и го споредува излезот со објавениот артефакт. Бит-идентичноста е силната форма; документиран чекор на нормализација, каде запишаната разлика се превртува и резултатите потоа се совпаѓаат, е послабата но уште корисна форма.
Споредбата се однесува на бинарниот фајл. Потписот одговара на друго прашање: го поврзува изданието со клуч и клучот со идентитет, а проектот може да има важечки потписи врз артефакти што никој не ги изградил повторно. Двете проверки се натрупуваат наместо да се заменуваат.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Извршете ги двете пред инсталација и споредете го hash со оној објавен за истото издание и платформа. Hash што се совпаѓа со страницата на добавувачот докажува дека преземањето пристигнало недопрено; повторно изградениот бинарен фајл што се совпаѓа со објавениот hash на добавувачот докажува нешто посилно за тоа како е направен.
Зошто несовпаѓањето не е доказ за манипулација
Повеќето несовпаѓања доаѓаат од влез што никој не го контролирал. Друго издание на закрпа на компајлерот, пат на градба што протекол во симболите за отстранување грешки, локал што го сменил редоследот на подредување или чекор на пакување применет по споредбата — сите даваат различен hash од чесната работа.
Заради тоа несовпаѓањето мора да се чита наспроти документираната постапка пред да стане приказна. Ако постапката закачува с, а разликата останува необјаснета, тоа е вистинско откритие што вреди да се изнесе пред проектот. Ако постапката молчи за пакувањето, разликата може да е сосема очекувана.
Симетријата е важна и тука: совпаѓањето не докажува дека изворниот код е без дефекти, туку само дека бинарниот фајл одговара на него. Добро ревидиран код и репродуктивен код се различни својства, и проектот може да има едното без другото.
Што вели тврдењето за услугата зад апликацијата
Клиентот е програма на вашиот уред; услугата се сервери, сметководни системи и политики за чување на друго место. Репродуктивноста го ограничува првото и не кажува ништо за второто, колку и внимателно да се проверува инсталаторот.
Конфигурацијата на крајната точка може да се смени и по инсталацијата, преку далечински поставки или профил контролиран од добавувачот. Тие промени доаѓаат преку мрежата и не се опфатени со ниту еден hash што сте го пресметале пред поврзувањето.
Прочитајте го тврдењето во неговиот вистински обем, потоа одделно проверете го соседното прашање: што евидентира добавувачот и под која јурисдикција одговара на барањата. Проверен бинарен фајл и непроверена услуга можат да постојат заедно, и тоа е токму случајот што проверката на синџирот на снабдување е создадена да го направи видлив, а не да го поправи.