Սիմետրիկ և հանրային բանալիով գաղտնագրում VPN-ում՝ ինչ է անում յուրաքանչյուրը
VPN-ը նույնականացնում է կողմերին հանրային բանալիներով, ապա գաղտնագրում փաթեթները ածանցյալ սեսիոն բանալիներով։ Դիտարկեք վկայագրերն և երթևեկության բանալիները որպես տարբեր օբյեկտներ։
Մարդիկ VPN-ը նկարագրում են որպես «հանրային բանալիով գաղտնագրում օգտագործող» համակարգ և հետո պատկերացնում, որ յուրաքանչյուր փաթեթ կողպվում է սերվերի վկայագրով։ Այդ պատկերը սխալ է այնպես, ինչ նշանակություն ունի կոնֆիգուրացիայի ֆայլ կամ փաթեթների գրառում կարդալու ժամանակ։ VPN-ի հանրային բանալու կեսը վերաբերում է, թե ով է գործընկերը, և գաղտնի նյութի շուրջ համաձայնությանը՝ սիմետրիկ կեսն այն է, ինչ իրականում պաշտպանում է երթևեկությունը՝ փաթեթ առ փաթեթ, սեսիայի ողջ կյանքի ընթացքում։
Երկու կեսերն ունեն տարբեր կյանքի տևողություն, տարբեր ձախողության եղանակներ և տարբեր բաներ, որոնւ կարելի է ապահով հրապարակել։ Երբ դրանք բաժանեք, «RSA 2048-ը թույլ է AES-128-ից» նման հարցերը դադարում են շինթրել, որովհետև դրանք երբեք համեմատելի չեն եղել։
Երեք գործողություն, որոնք միասին են խառնվում
Հանրային բանալիով գաղտնագրությունը հովանոց է առնվազն երեք տարբեր գործողությունների վրա։ Ստորագրությունը ապացուցում է, որ մասնավոր բանալու տերը հավանություն է տվել որոշակի հաղորդագրության։ Բանալու պայմանավորությունը թույլ է տալիս երկու գործընկերին հանրային բանալներից համաձայն գաղտնից հանել։ Հանրային բանալիով գաղտնագրումը թաքցնում է տվյալները ինչ-որի հանրային բանալու տակ, որ միայն մասնավոր բանալն կարող է բացել դրանք։
VPN-ի ձեռքսեղումները հիմնականում օգտագործում են առաջին երկունը։ Վկայագիրը գաղտնագրման բանալի չէ՝ այն ստորագրված հայտարարություն է, որը անունը կապում է հանրային բանալուն և թույլ է տալիս մյուս կողմին որոշել՝ վստահել հենց նոր ստացած բանալուն, թե ոչ։ Օրինակ, TLS 1.3-ի բանալիների հաստատումը հիմնված է (EC)DHE բանալու պայմանավորության և վկայագրերի ստորագրությունների վրա, ոչ թե սեսիան սերվերի հանրային բանալով գաղտնագրելու վրա։
Ինչ է իրականում արտադրում ձեռքսեղմումը
Ժամանակակից ձեռքսեղման ժամանակ յուրաքանչյուր կողմ ստեղծում է ժամանակավոր բանալիների զույգ, փոխանակում հանրային կեսերը և հաշվում ընդհանուր գաղտնիր, որը երբեք չի անցնում լարից։ Այդ գաղտնիրը հետո անցնում է բանալի ացանցման ֆունկցիայով՝ յուրաքանչյուր ուղղության համար առանձին բանալիներ ստեղծելու համար, գումարած nonce-ները և IV նյութը, որն անհրաժեշտ է գրառման շերտին։ WireGuard-ը դա անում է Noise-ի վրա հիմնված կառուցվածքով՝ TLS 1.3-ը դա անում է HKDF-ով ձեռքսեղման արձանագրության վրա։
Երկարաժամկետ նույնականացուցը՝ վկայագիր և մասնավոր բանալի, կամ ստատիկ WireGuard բանալի՝ նույնականացնում է այդ փոխանակումը։ Այն ստորագրում է կամ խառնվում արձանագրության մեջ, որպեսզի օտարը չկարողանա ավարտել ձեռքսեղումը գործընկերի փոխարեն։ Դրանից հետո նույնականացուցը յուրաքանչյուր փաթեթի համար աշխատանք չի կատարում։ Եթե կատարեր, յուրաքանչյուր փաթեթի համար անհրաժեշտ կլիներ մասնավոր բանալով գործողություն, և զբաղված թունելը կսահմանփակվեր կույտի ամենադանդաղ գործողությամբ։
Դրանից բխում են երկու կողմնակի ազդեցություններ։ Առաջին՝ սեսիոն բանալիները ամեն անգամ թարմ են, ինչի հետև շատ ուշ երկարաժամկետ բանալը գողացող հարձակվողը չի կարողանա վերածել ավելի վաղ գրառված սեսիաները, պայմանավորված որ համաձայնությունը ժամանակավոր է եղել։ Երկրորդ՝ արտահոսած սեսիոն բանալը վտանգում է մեկ սեսիա, ոչ ինքնությունը։
Ինչու մեծ ծավալի տվյալները օգտագործում են սիմետրիկ բանալիներ
Սիմետրիկ գաղտնագրերը լավ են դիմանում ծավալին՝ AES-GCM-ը կամ ChaCha20-Poly1305-ը յուրաքանչյուր փաթեթ մշակում են արդեն հիշողության մեջ եղլած բանալով, նույնականացնում են վերնագիրը և ավելացնում հաշիչը։ Ընդունող կողմը ստուգում է nonce-ն և նույնականացման պիտակը, և մերժատում ամեն ինչ, ինչ ձախողվում է կամ կրկնվում։ Դա բավական էժան է սովորական սարքավորման վրա գծի արագությամբ աշխատելու համար, և նոյն կառուցվածքը մեկ անցումով տալիս է գաղտնիություն և ամբողջականություն։
Կառուցվածքն այն տեղն էլ, որտեղ ապրում է իրականացման սխալների մեծ մասը։ GCM-ում կրկնվող nonce-ն միանգամից կոտրում է գաղտնիությունը և ինքնությունը, ուստի արձանագրությունները յուրաքանչյուր ուղղության համար բանալիներ են ացանցում և պահում հստակ հաշիչ կամ դարաշրջան։ Եթե դուք կարդում եք փաթեթների գրառում և գաղտնագրված տեքստի երկարությունը համընկնում է բաց տեքստին գումար հաստատ ավելացության հետ, ապա աշխատում է սիմետրիկ շերտը, ոչ թե հանրային բանալով գործողություն յուրաքանչյուր փաթեթի համար։
Կյանքի տևողություն, բանալիների թարմացում և առաջ նայող գաղտնիություն
Սեսիոն բանալիները նախատեսված են ժամկետի դնելու համար։ TLS 1.3-ը թույլ է տալիս KeyUpdate հաղորդագրությանը պտտել երթևեկության բանալիները՝ WireGuard-ը վերաթարմացնում է սեսիան կարգավորված ժամանից կամ հաղորդագրությունների քանակից հետո և հինը կրճակ պահում ճանապարհին գտնվող փաթեթների համար։ OpenVPN ըստ ժամանացուցի վերաբանակցում է իր տվյալների ալիքի բանալիները, իսկ reneg-sec-ը կառավարում է ընդմիջումը։
Այդ պտույտներից ոչ մեկը նույնը չէ, ինչ վկայագրի թարմացումը։ Վկայագիրը կարող է վավեր լինել մեկ տարի, մինչ սեսիոն բանալիները փոխվում են յուրաքանչյուր մի քանի րոպեում, և վկայագիրը կարելի է փոխարինել չդիպչելով աշխատող թունելի բանալիներին։ Երբ պլանավորում եք ժամկետ, հարցրեք՝ որ օբյեկտն եք պտտում՝ պատասխանը որոշում է՝ հաղորդները նորից կմիանա՞ն, թե պարզապես կթարմացնեն բանալիները։
Կոնֆիգուրացիաների և ախտորոշման ընթերցում առանց օբյեկտների խառնման
Գործնականում դուք ընտրում եք ամբողջական արձանագրություն և դրա աջակցվող պրիմիտիվները, այլ ոչ ինքներդ եք հավաքում։ OpenVPN-ի --tls-crypt բանալը պաշտպանում է կառավարման ալիքը՝ տվյալների ալիքը օգտագործում է համաձայնեցված սիմետրիկ գաղտնագրեր։ WireGuard-ի PrivateKey և PublicKey գրառումները ինքնության նյութ են, մինչ դրա տրանսպորտային բանալիները ացանցվում են ներքին։ Այդ դաշտերը նույն տեսակի գաղտնից կարդալը հանգեցնում է սխալների, ինչպես հանրային բանալի տեղադրումը այնտեղ, որտեղ մասնավորն է։
Պահեք հանրային նյութը առանձին մասնավորից։ Վկայագիրը, WireGuard-ի հանրային բանալը և մատնահետը ապահով են տոմսում կիսելու համար։ Մասնավոր բանալը, նախապես կիսված բանալը և արտահանված սեսիոն բանալը այդպիսին չեն։ Երբ համեմատում եք ուժը, համեմատեք նույն տիպի մեջ՝ էլիպտիկ կորի նույնացուցը, RSA մոդուլի չափը և AES բանալի չափը տարբեր բաներ են չափում տարբեր ենթադրություններով։ TLS 1.3 մանրամասները օգտակար հղում է այն մասին, թե ինչպես են երկու շերտերը համատեւմ, նույնիսկ երբ ձեր թունելը TLS չէ։