Ξεμένει ένα VPN από εντροπία; Τι δείχνει πραγματικά το entropy_avail
Μια καθυστέρηση κατά την εκκίνηση και μια αργή εδραιωμένη σήραγγα είναι διαφορετικές βλάβες. Διαβάστε το στάδιο, την πραγματική σημασία του μετρητή και την ουρά πριν κατηγορήσετε την τυχαιότητα.
Η εξάντληση της τυχαιότητας του πυρήνα είναι μια ελκυστική εξήγηση για ένα αργό VPN και σχεδόν πάντα η λάθος για το σύμπτωμα που αναφέρουν οι άνθρωποι. Ένας κόμβος που περιμένει τυχαία έξοδο κολλάει σε μια συγκεκριμένη στιγμή, συνήθως νωρίς στην εκκίνηση ή κατά τον χειρισμό κλειδιών. Μια σήραγγα που συνδέεται γρήγορα και στη συνέχεια μεταφέρει αργά περιγράφει αντίθετα τη ρυθμαπόδοση. Διαχωρίστε αυτές τις δύο παρατηρήσεις πριν εγκαταστήσετε έναν δαίμονα για να διορθώσετε έναν αριθμό που δεν έχετε τελειώσει να διαβάζετε.
Γιατί ο μύθος επιβιώνει
Και τα δύο προβλήματα είναι πραγματικά και μοιάζουν από απόσταση. Οι καθυστερήσεις εκκίνησης σε ένα φρεσκοξεκινημένο εικονικό μηχάνημα συμβαίνουν πράγματι, και μια αργή εδραιωμένη σήραγγα είναι εξίσου πραγματική. Το λάθος είναι να υποθέσουμε ότι το δεύτερο προκαλείται από το πρώτο επειδή η κρυπτογραφία εμφανίζεται κάπου και στις δύο ιστορίες. Τίποτα στη λέξη κρυπτογράφηση δεν υπονοεί ότι κάθε byte που μεταφέρεται καταναλώνει ένα φρέσκο byte θορύβου περιβάλλοντος.
Έτσι δεν λειτουργούν αυτές οι γεννήτριες. Μια κρυπτογραφική βιβλιοθήκη κρατά μια γεννήτρια με σπόρο και αντλεί έξοδο από αυτήν, επανασπέρνοντας σύμφωνα με τη δική της πολιτική, οπότε η ακριβή στιγμή είναι η σπορά και όχι η σταθερή μεταφορά.
Τι κάνει μια γεννήτρια ανά πακέτο
Στο OpenSSL 3 η προεπιλεγμένη ιεραρχία γεννητριών χτίζεται από περιπτώσεις DRBG που σπέρνουν και επανασπέρνουν ανάλογα με τη διαμόρφωση και την κατάσταση. Στο OpenVPN 2.6 η διαδρομή δεδομένων AEAD παράγει το nonce από τον αύξοντα αριθμό του πακέτου σε συνδυασμό με μια σιωπηρή τιμή ανά συνεδρία, ενώ η παλαιότερη διαδρομή CBC αντλεί ένα ψευδοτυχαίο IV ανά πακέτο. Κανένα από τα δύο μοτίβα δεν υποστηρίζει τον κανόνα ότι η μετακίνηση ενός γιγαμπάιτ καταναλώνει ένα γιγαμπάιτ φρέσκου θορύβου πυρήνα. Και τα δύο υποστηρίζουν την ιδέα ότι η παραγωγή κλειδιών και οι χειραψίες είναι το σημείο όπου η σπορά μετράει.
Η περίπτωση CBC αξίζει να ονομαστεί γιατί μοιάζει με τον μύθο και δεν είναι: το IV ανά πακέτο προέρχεται από τη γεννήτρια της βιβλιοθήκης σύμφωνα με το δικό της χρονοδιάγραμμα επανασποράς, ποτέ από κλήση του πυρήνα ανά πακέτο. Όταν κάποιος επικαλείται κόστος εντροπίας ανά byte, ρωτήστε ποια έκδοση βιβλιοθήκης και ποια διαδρομή κώδικα μέτρησαν.
Πού φαίνεται στην πραγματικότητα η αναμονή
Βάλτε χρονικές σφραγίδες γύρω από τα στάδια και όχι γύρω από τη συνεδρία: εκκίνηση, έλεγχος ταυτότητας, αλλαγή κλειδιού και μεταφορά. Η αναμονή πριν η σήραγγα γίνει χρησιμοποιήσιμη είναι διαφορετικό παράπονο από έναν χαμηλό σταθερό ρυθμό, και μόνο ένα από τα δύο δείχνει προς την τυχαιότητα. Στο 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 5Η τεκμηρίωση της γεννήτριας OpenSSL περιγράφει πώς αυτή η ιεραρχία αποκτά είσοδο και πότε γίνεται η επανασπορά, που είναι ένας πολύ στενότερος ισχυρισμός από τον μύθο και ισχύει μόνο για αυτή την υλοποίηση. Ένας δαίμονας εντροπίας δεν είναι καθολική επισκευή ταχύτητας, και η εγκατάστασή του για να ανέβει ένας μετρητής αλλάζει μια παραδοχή ασφαλείας χωρίς να αποδεικνύει καθυστέρηση. Για τη ρυθμαπόδοση, ακολουθήστε τη διαδρομή δεδομένων: ένα κορεσμένο νήμα, οι επαναμεταδόσεις, η εξωτερική απώλεια και οι σταγόνες ουράς χρειάζονται το καθένα διαφορετική διόρθωση, και τα μεγέθη buffer αντιμετωπίζουν την προσωρινή αποθήκευση υποδοχών με τα δικά τους στοιχεία ουράς.