იწურება VPN-ის ენტროპია? რას აჩვენებს სინამდვილეში entropy_avail
ჩატვირთვისას გაჩერება და ნელი დამყარებული გვირაბი ორი განსხვავებული ხარვეზია. წაიკითხეთ ეტაპი, მრიცხველის ნამდვილი მნიშვნელობა და რიგი, სანამ შემთხვევითობას დაადანაშაულებთ.
ბირთვის შემთხვევითობის ამოწურვა მიმზიდველი ახსნაა ნელი VPN-ისთვის და თითქმის ყოველთვის არასწორია იმ სიმპტომისთვის, რომელსაც ადამიანები იტყობინებიან. შემთხვევით გამოსავალს მომლოდინე ჰოსტი კონკრეტულ მომენტში ჩერდება, ჩვეულებრივ ჩატვირთვის დასაწყისში ან გასაღებების დამუშავებისას. გვირაბი, რომელიც სწრაფად უკავშირდება და შემდეგ ნელა გადასცემს სინამდვილეში გამტარუნარიანობას აღწერს. გამოყავით ეს ორი დაკვირვება, სანამ დააყენებთ დემონს იმ რიცხვის გამოსასწორებლად, რომლის წაკითხვაც ჯერ არ დაგისრულებიათ.
რატომ რჩება მითი ცოცხალი
ორივე პრობლემა რეალურია და შორიდან ერთნაირად გამოიყურება. გაშვების გაჩერებები ახლად ჩატვირთულ ვირტუალურ მანქანაზე მართლაც ხდება, და ნელი დამყარებული გვირაბიც თანაბრად რეალურია. შეცდომაა ვივარაუდოთ, რომ მეორე პირველითაა გამოწვეული, რადგან კრიპტოგრაფია ორივე ისტორიაში სადღაც ჩნდება. არაფერი სიტყვაში დაშიფვრა არ ნიშნავს, რომ ყოველი გადაცემული ბაიტი მოიხმარს გარემოს ხმაურის ახალ ბაიტს.
ეს გენერატორები ასე არ მუშაობენ. კრიპტოგრაფიული ბიბლიოთეკა ინახავს თესლიან გენერატორს და მისგან იღებს გამოსავალს, ხელახლა თესავს რა საკუთარი პოლიტიკით, ამიტომ ძვირი მომენტი თესვაა და არა სტაბილური გადაცემა.
რას აკეთებს გენერატორი თითო პაკეტზე
OpenSSL 3-ში ნაგულისხმევი გენერატორის იერარქია აგებულია DRBG ეგზემპლარებისგან, რომლებიც თესავენ და ხელახლა თესავენ კონფიგურაციისა და მდგომარეობის მიხედვით. OpenVPN 2.6-ში AEAD მონაცემთა გზა თავის nonce-ს იღებს პაკეტის მიმდევრობის ნომრიდან, სესიაზე იმპლიციტურ მნიშვნელობასთან ერთად, ხოლო ძველი CBC გზა თითო პაკეტზე ფსევდოშემთხვევით IV-ს იღებს. არც ერთი ნიმუში არ უჭერს მხარს წესს, რომ გიგაბაიტის გადაადგილება მოიხმარს გიგაბაიტ ახალ ბირთვულ ხმაურს. ორივე უჭერს მხარს აზრს, რომ გასაღების გენერაცია და ხელის ჩამორთმევები ის ადგილია, სადაც თესვას მნიშვნელობა აქვს.
CBC-ის შემთხვევა დასახელებას იმსახურებს, რადგან მითს ჰგავს და არ არის: მისი თითო პაკეტის IV ბიბლიოთეკის გენერატორიდან მოდის ბიბლიოთეკის საკუთარი ხელახალი თესვის გრაფიკით, არასოდეს თითო პაკეტზე ბირთვის გამოძახებიდან. როცა ვინმე ბაიტზე ენტროპიის ღირებულებას ციტირებს, ჰკითხეთ, რომელი ბიბლიოთეკის ვერსია და რომელი კოდის გზა გაზომეს.
სად ჩანს სინამდვილეში ლოდინი
დროის ნიშნები ეტაპების ირგვლივ დადეთ და არა სესიის: გაშვება, ავთენტიფიკაცია, გასაღების შეცვლა და გადაცემა. ლოდინი მანამ, სანამ გვირაბი გამოსაყენებელი გახდება, სხვა საჩივარია, ვიდრე დაბალი სტაბილური სიჩქარე, და მხოლოდ ერთი მათგანი მიუთითებს შემთხვევითობაზე. Linux-ში ჩვეულებრივი getrandom() მოთხოვნა შეიძლება დაიბლოკოს, სანამ ბირთვის შემთხვევითი წყარო არ ინიციალიზდება, ამიტომ ამ პრობლემის ჩატვირთვის ვერსია რეალურია ვირტუალურ მანქანებსა და ჩაშენებულ დაფებზე, რომლებსაც დასაწყისში ცოტა აქვთ აუზის გამოსაკვებად.
| ეტაპი | რა უნდა გაუშვათ | ჩვენება, რომელიც ლოდინს ნიშნავს | ჩვენება, რომელიც გამტარუნარიანობას ნიშნავს |
|---|---|---|---|
| ჩატვირთვა, ნებისმიერ გვირაბამდე | systemd-analyze critical-chain | ერთეული, რომელიც წამებით ზის გვირაბის დაწყებამდე | არ ვრცელდება, ჯერ არაფერი გადადის |
| ხელის ჩამორთმევა | journalctl -u openvpn-server@server -b | გრძელი შუალედი ინიციალიზაციის მიმდევრობის დასრულებამდე | არ ვრცელდება, გვირაბი არ არის აწეული |
| დამყარებული გადაცემა | ss -tin გვერდით sar -n DEV 1 | დაბლოკილი პროცესი ცარიელი სოკეტის რიგებით | სავსე რიგები, ხელახალი გაგზავნები და ერთი დაკავებული ნაკადი |
ორი იაფი ბრძანება ეკუთვნის ამ კრებულის დასაწყისს და ისინი წყვეტენ მარტივ კითხვებს ცხრილის საჭიროებამდეც კი. მრიცხველი, რომელსაც ისინი კითხულობენ, ენტროპიის აღრიცხვაა და არა გამტარუნარიანობის საზომი, და ერთი კადრი ვერ აჩვენებს, რომ პროცესი დაბლოკილია, რამდენს ელოდა ან რომელ ინტერფეისს იძახებს მისი ბიბლიოთეკის ფუნქციები. აღდგენის შემდეგ აღებული ნიმუში ჩვეულებრივ მთლიანად გამოტოვებს გაჩერებას, ამიტომ ბირთვის ვერსია ჩვენების გვერდით შეინახეთ.
cat /proc/sys/kernel/random/entropy_avail
uname -rშეუსაბამეთ შესწორება ჩვენებას
თუ ბირთვი ნამდვილად ელოდება ინიციალიზაციას, შეხედეთ პლატფორმის მხარდაჭერილ თესვის გზას და არა გვირაბს. ვირტუალურ მანქანას შეიძლება მიეცეს ჰოსტის მიერ მოწოდებული შემთხვევითი მოწყობილობა, მაგალითად virtio-rng, და გამოსახულების მომზადებას მნიშვნელობა აქვს, რადგან ბევრ სტუმარში უცვლელად დაკოპირებული თესლი დამოუკიდებელი ინიციალიზაცია არ არის. თუ ბიბლიოთეკა ჩატვირთვის შემდეგ თესვის წარუმატებლობებს იტყობინება, შეამოწმეთ მისი კონფიგურირებული წყარო და მომწოდებლის ქცევა ბირთვის პარამეტრების შეცვლის ნაცვლად.
ss -tin dst 203.0.113.7
sar -n DEV 1 5OpenSSL-ის გენერატორის დოკუმენტაცია აღწერს, როგორ იღებს ეს იერარქია შეყვანას და როდის ხდება ხელახალი თესვა, რაც გაცილებით ვიწრო მტკიცებაა, ვიდრე მითი, და მართებულია მხოლოდ იმ იმპლემენტაციისთვის. ენტროპიის დემონი უნივერსალური სიჩქარის შეკეთება არ არის, და მისი დაყენება მრიცხველის ასაწევად ცვლის უსაფრთხოების დაშვებას დაყოვნების დემონსტრირების გარეშე. გამტარუნარიანობისთვის მიჰყევით მონაცემთა გზას: ერთი გაჯერებული ნაკადი, ხელახალი გაგზავნები, გარე დანაკარგი და რიგების ჩამოშლა თითოეულს განსხვავებული შესწორება სჭირდება, და ბუფერის ზომები სოკეტის ბუფერიზაციას საკუთარი რიგის მტკიცებულებით ეხება.