რატომ შეიძლება დაშიფრული VPN პაკეტი ნაკლები დაჯდეს, ვიდრე ფიქრობთ
კიდევ ერთი კრიპტოგრაფიული იარლიყი კიდევ ერთი სამუშაო ერთეული არ არის. შეადარეთ მთელი გზა: AEAD კონსტრუქცია, CPU-ის მხარდაჭერა, ბუფერიზაცია და შეთანხმებული მონაცემთა რეჟიმი.
ორი პროფილი იზომება ერთსა და იმავე კარიბჭეზე, ერთი დაშიფვრით და მეორე მის გარეშე, და დაშიფრული არ არის ნელა. ზოგჯერ ის უფრო სწრაფია, რაც ჩვეულებრივ იწვევს ხანგრძლივ კამათს იმაზე, სწორად ჩატარდა თუ არა ტესტი. შედეგი დამაჯერებელია, რადგან პაკეტის ღირებულება კონფიგურაციაში კრიპტოგრაფიული სიტყვების რაოდენობა არ არის. ეს არის იმ ოპერაციების ერთობლიობა, რომლებსაც იმპლემენტაცია ასრულებს, მის ხელთ არსებულ ტექნიკაზე, მის მიერ არჩეულ ბუფერის განლაგებაზე.
სიმპტომი: ნელი არ არის დაშიფრული პროფილი
დავუშვათ, ისტორიული ტესტი AEAD შიფრს ადარებს „დაშიფვრის გარეშე“ რეჟიმს, რომელიც კვლავ ითვლის ცალკე ავთენტიფიკაციის კოდს თითოეული პაკეტისთვის. მეორე პროფილი მალავს დატვირთვის შიგთავსს, მაგრამ ინახავს პაკეტისეულ ჰეშს, და პროცესორზე, რომელსაც ამ ჰეშისთვის აჩქარება არ აქვს, ის შეიძლება უფრო ძვირი დაჯდეს, ვიდრე ინტეგრირებული კონსტრუქცია, რომელიც უნდა დაემარცხებინა.
კონფიგურაციაში იარლიყი ამბობს „დაშიფვრა“, და იარლიყი არის ყველაფერი, რასაც შედარებების უმეტესობა უყურებს. პაკეტის გზა სხვა რამეს ამბობს: ერთი პროფილი ასრულებს კომბინირებულ ოპერაციას, რომლისთვისაც CPU-ს ინსტრუქციები აქვს, ხოლო მეორე ცალკე ოპერაციას, რომლისთვისაც არ აქვს. მხოლოდ კონფიგურაციის ფაილის კითხვა ვერასდროს გამოააშკარავებს ამ განსხვავებას, რადგან ორივე ჩანაწერი ერთი ხაზივით გამოიყურება. შედეგს მხოლოდ შეთანხმებული რეჟიმი და მის უკან არსებული კოდის გზა ხსნის.
ეს არის მთელი ახსნა, და ის არ მოითხოვს რაიმე მტკიცებას იმის შესახებ, თუ რომელი პრიმიტივია უნივერსალურად უფრო სწრაფი. ორივე შეიძლება იყოს სწრაფი, ორივე შეიძლება იყოს ნელი, და რიგი დამოკიდებულია მანქანასა და კოდზე.
დაითვალეთ ოპერაციები, არა იარლიყები
AEAD კონსტრუქცია, როგორც RFC 5116 აღწერს, იმპლემენტაციას აძლევს ერთ ინტერფეისს, რომელიც შიფრტექსტსა და ტეგს ერთად აბრუნებს. AES-GCM ერთი მაგალითია: მრიცხველის რეჟიმის დაშიფვრა Galois-ის ავთენტიფიკატორთან კომბინაციაში. ინტერფეისი მთლიანობას უფასოს არ ხდის; ის კომბინაციას კარგად განსაზღვრულს ხდის, და სწორედ ეს აძლევს იმპლემენტაციას საშუალებას, წყვილი ერთ ერთეულად ოპტიმიზოს.
Separate authentication path: payload -> independent HMAC -> framed packet AEAD path: payload -> authenticated encryption with tag -> framed packet
ეს გადამუშავების ჩანახატებია და არა კონფიგურაციის რჩევები. პირველს კონფიდენციალობა არ აქვს, მაგრამ მაინც ხარჯავს CPU-ს ავთენტიფიკაციაზე, და სწორედ ამიტომ „გამორთე დაშიფვრა“ არ არის „გამორთე კრიპტოგრაფიული სამუშაო“-ს სინონიმი.
მეორე შეიძლება იყოს იაფი, რადგან პროცესორები ორივე ნახევრისთვის იძლევიან ინსტრუქციებს: AES-ის რაუნდები და გადატანის გარეშე გამრავლება, რომელსაც Galois-ის ველი იყენებს. ბიბლიოთეკები დამოუკიდებელ ბუფერებს პარალელურადაც ამუშავებენ, რაც ამ ინსტრუქციებს მეხსიერების ლოდინის ნაცვლად დაკავებულად ინახავს.
რას აძლევს სინამდვილეში საშუალებას შეთანხმებული რეჟიმი
Community OpenVPN-ში AEAD მონაცემთა შიფრი ნიშნავს, რომ auth პარამეტრი აღარ ამატებს საკუთარ ცალკე მონაცემთა არხის HMAC-ს. დაშიფვრის პარამეტრის ცნობარი აღწერს ამ ფარგლებს, და სწორედ ამიტომ ტექსტურ ფაილში მსგავსად დანახული ორი კონფიგურაცია შეიძლება განსხვავდებოდეს პაკეტისეულ სამუშაოში.
წაიკითხეთ შეთანხმებული რეჟიმი და არა სურვილების სია. დაშვებული შიფრების სია და TLS პაკეტის სახელი არ გეტყვიან, რა ოპერაციები მიდის დატვირთვაზე, და ძველმა cipher ხაზმა შეიძლება არ აღწეროს, რა აირჩია მიმდინარე კავშირმა.
openvpn --show-ciphers | head -20 sudo grep -E 'cipher|auth' /etc/openvpn/server.conf
პირველი ბრძანება ჩამოთვლის შიფრებს, რომლებსაც ბინარული ფაილი უჭერს მხარს, რაც შესაძლებლობების სიაა და არა შეთანხმებული შედეგი. მეორე აჩვენებს, რას ითხოვს სერვერი სინამდვილეში. კავშირის ჟურნალი არის ადგილი, სადაც საბოლოო არჩევანი მოწმდება, რადგან კლიენტი შეიძლება დაეცეს იმას, რასაც სერვერი უშვებს, მაგრამ არავის ჰქონია მხედველობაში.
გაზომეთ ის დატვირთვა, რომელსაც რეალურად ატარებთ
კრიპტოგრაფიული მიკროგაზომვა ზომავს პრიმიტივს მისივე პირობებში. VPN გადაცემა ასევე აკოპირებს ბუფერებს, გეგმავს ნაკადებს ან წყვეტებს, ამოწმებს პოლიტიკას და კვეთს ქსელს. ეს ნაწილები ხშირად დომინირებენ, და ამიტომ უფრო სწრაფი პრიმიტივი ყოველთვის არ იძლევა უფრო სწრაფ გვირაბს.
openssl speed -evp aes-256-gcm openssl speed -evp sha1
ეს ორი ბრძანება გაძლევთ პრიმიტივების უხეშ ლოკალურ შედარებას თქვენს წინ მდგარ მანქანაზე, და ისინი პატიოსნად ამბობენ, რომ მიკროგაზომვებია. ისინი არაფერს ამბობენ თქვენი გვირაბის გამტარობაზე, და არასოდეს უნდა იყოს ციტირებული როგორც ასეთი.
შემდეგ გაზომეთ ის დატვირთვა, რომელსაც მნიშვნელობა აქვს, დანარჩენი ყველაფერი უცვლელად შენარჩუნებით: იგივე საბოლოო წერტილი, იგივე პაკეტის ზომები, იგივე ტრანსპორტი, იგივე შეკუმშვის პოლიტიკა. თუ პროფილის ცვლილებამ ტრანსპორტიც ან დამუშავების ადგილიც შეცვალა, შედეგი აღწერს ამ კრებულს და არა კრიპტოგრაფიას.
მიზანიც თვალწინ გქონდეთ. მონაცემთა გზა თავისუფალი კრიპტოგრაფიული სიმძლავრით შეიძლება მაინც დაყოვნებით იყოს შეზღუდული, რადგან აპლიკაცია ორმხრივ მგზავრობებს ელოდება, და მასიური სიმძლავრის მოგება მოლაპარაკე პროტოკოლს არ ასწორებს. გაზომეთ მხარდაჭერილი და პოლიტიკით დამტკიცებული კონფიგურაცია მთლიანად, და მოეპყარით „ნაკლები ყუთი აუცილებლად უფრო სწრაფია“-ს, როგორც იმ ჰიპოთეზას, რაც არის. სასარგებლო კითხვა არ არის, ღირს თუ არა დაშიფვრა რაღაც, არამედ ის, ჩანს თუ არა ღირებულება იმ გაზომვაში, რომელიც ნამდვილად გაღელვებთ.