სიმეტრიული და საჯარო გასაღების დაშიფვრა 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 არ არის.