Վերարտադրելի կառուցումներ 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-ով, որը հաշվարկել եք միանալուց առաջ։
Կարդացեք պնդումը իրական ծավալով, ապա առանձին ստուգեք հարևան հարցը․ ինչ է գրանցում մատակարարը, և որ իրավազորության ներքո է պատասխանում հարցումներին։ Ստուգված բինար ֆայլը և չստուգված ծառայությունը կարող են գոյակցել, և հենց այդ դեպքն է, որ մատակարարման շղթայի ստուգումը նախատեսված է տեսանելի դարձնելու, ոչ թե ուղղելու համար։