Συμμετρική κρυπτογράφηση vs. κρυπτογράφηση δημόσιου κλειδιού σε VPN: τι κάνει η καθεμία
Ένα VPN πιστοποιεί τους ομότιμους με δημόσια κλειδιά και μετά κρυπτογραφεί τα πακέτα με παράγωγα κλειδιά συνεδρίας. Αντιμετωπίστε τα πιστοποιητικά και τα κλειδιά κίνησης ως διαφορετικά αντικείμενα.
Οι άνθρωποι περιγράφουν ένα VPN ως «αυτό που χρησιμοποιεί κρυπτογράφηση δημόσιου κλειδιού» και μετά φαντάζονται κάθε πακέτο κλειδωμένο με το πιστοποιητικό του διακομιστή. Αυτή η εικόνα είναι λανθασμένη με τρόπο που μετράει όταν διαβάζετε ένα αρχείο ρυθμίσεων ή μια καταγραφή πακέτων. Το μισό του δημόσιου κλειδιού σε ένα VPN αφορά την απόδειξη ποιος είναι ο ομότιμος και τη συμφωνία για μυστικό υλικό· το συμμετρικό μισό είναι αυτό που προστατεύει πραγματικά την κίνηση, πακέτο με πακέτο, για όλη τη ζωή της συνεδρίας.
Τα δύο μισά έχουν διαφορετικές διαρκειες ζωής, διαφορετικούς τρόπους αποτυχίας και διαφορετικά πράγματα που μπορείτε να δημοσιεύσετε με ασφάλεια. Μόλις τα χωρίσετε, ερωτήσεις όπως «είναι το RSA 2048 ασθενέστερο από το AES-128» σταματούν να μπερδεύουν, γιατί ποτέ δεν ήταν συγκρίσιμα.
Τρεις λειτουργίες που συγχέονται
Η κρυπτογραφία δημόσιου κλειδιού είναι μια ομπρέλα πάνω από τουλάχιστον τρεις ξεχωριστές λειτουργίες. Μια υπογραφή αποδεικνύει ότι ο κάτοχος ενός ιδιωτικού κλειδιού ενέκρινε ένα συγκεκριμένο μήνυμα. Η συμφωνία κλειδιού επιτρέπει σε δύο ομότιμους να παράγουν ένα κοινό μυστικό από τιμές που ανταλλάσσουν δημόσια. Η κρυπτογράφηση δημόσιου κλειδιού κρύβει δεδομένα κάτω από το δημόσιο κλειδί καποιου, ώστε μόνο το ιδιωτικό κλειδί να μπορεί να τα ανοίξει.
Οι χειραψίες VPN χρησιμοποιούν κυρίως τις δύο πρώτες. Ένα πιστοποιητικό δεν είναι κλειδί κρυπτογράφησης· είναι μια υπογεγραμμένη δήλωση που δεσμεύει ένα όνομα σε ένα δημόσιο κλειδί και επιτρέπει στην άλλη πλευρά να αποφασίσει αν θα εμπιστευτεί το κλειδί που μόλις έλαβε. Η εγκαθίδρυση κλειδιών του TLS 1.3, για παράδειγμα, βασίζεται σε συμφωνία κλειδιού (EC)DHE συν υπογραφές πιστοποιητικών, όχι στην κρυπτογράφηση της συνεδρίας με το δημόσιο κλειδί του διακομιστή.
Τι παράγει πραγματικά η χειραψία
Σε μια σύγχρονη χειραψία, κάθε πλευρά δημιουργεί ένα εφήμερο ζεύγος κλειδιών, ανταλλάσσει τα δημόσια μισά και υπολογίζει ένα κοινό μυστικό που δεν περνά ποτέ από το καλώδιο. Αυτό το μυστικό περνά μετά από μια συνάρτηση παραγωγής κλειδιών για να παράγει ξεχωριστά κλειδιά για κάθε κατεύθυνση, μαζί με τα nonces και το υλικό IV που χρειάζεται το επίπεδο εγγραφών. Το WireGuard το κάνει με την κατασκευή του που βασίζεται στο Noise· το TLS 1.3 το κάνει με HKDF πάνω από το μεταγραμμένο της χειραψίας.
Το μακροπρόθεσμο διαπιστευτήριο — πιστοποιητικό και ιδιωτικό κλειδί ή ένα στατικό κλειδί WireGuard — πιστοποιεί αυτήν την ανταλλαγή. Υπογράφει ή αναμειγνύεται στο μεταγραμμένο ώστε ένας ξένος να μην μπορεί να ολοκληρώσει τη χειραψία στη θέση του ομότιμου. Μετά από αυτό, το διαπιστευτήριο δεν κάνει εργασία ανά πακέτο. Αν το έκανε, κάθε πακέτο θα χρειαζόταν μια λειτουργία ιδιωτικού κλειδιού και μια πολυάσχολη σήραγγα θα περιοριζόταν από την πιο αργή λειτουργία στη στοίβα.
Ακολουθούν δύο παρενέργειες. Πρώτον, τα κλειδιά συνεδρίας είναι φρέσκα κάθε φορά, για αυτό ένας επιτιθέμενος που κλέβει αργότερα το μακροπρόθεσμο κλειδί δεν μπορεί να αποκρυπτογραφήσει συνεδρίες που καταγράφηκαν νωρίτερα, εφόσον η συμφωνία ήταν εφήμερη. Δεύτερον, ένα διαρρευσμένο κλειδί συνεδρίας θέτει σε κίνδυνο μία συνεδρία, όχι την ταυτότητα.
Γιατί τα μαζικά δεδομένα χρησιμοποιούν συμμετρικά κλειδιά
Οι συμμετρικοί κρυπτογράφοι χειρίζονται καλά τον όγκο: το AES-GCM ή το ChaCha20-Poly1305 επεξεργάζονται κάθε πακέτο με κλειδί που βρίσκεται ήδη στη μνήμη, πιστοποιούν την κεφαλίδα και αυξάνουν έναν μετρητή. Η πλευρά λήψης ελέγχει το nonce και την ετικέτα πιστοποίησης και απορρίπτει ό, τι αποτυγχάνει ή επαναλαμβάνεται. Αυτό είναι αρκετά φθηνό για να τρέχει σε ρυθμό γραμμής σε συνηθισμένο υλικό, και η ίδια κατασκευή δίνει εμπιστευτικότητα και ακεραιότητα σε ένα πέρασμα.
Η κατασκευή είναι επίσης εκεί όπου ζουν τα περισσότερα σφάλματα υλοποίησης. Ένα επαναλαμβανόμενο nonce στο GCM σπάει την εμπιστευτικότητα και την αυθεντικότητα ταυτόχρονα, για αυτό τα πρωτόκολλα παράγουν κλειδιά ανά κατεύθυνση και τηρούν έναν ρητό μετρητή ή εποχή. Αν διαβάζετε μια καταγραφή πακέτων και το μήκος του κρυπτοκειμένου ταιριάζει με το απλό κείμενο συν ένα σταθερό πρόσθετο, τότε δουλεύει το συμμετρικό επίπεδο, όχι μια λειτουργία δημόσιου κλειδιού ανά πακέτο.
Διάρκειες ζωής, ανανέωση κλειδιών και εμπροσθοφυλακτική μυστικότητα
Τα κλειδιά συνεδρίας προορίζονται να λήγουν. Το TLS 1.3 επιτρέπει ένα μήνυμα KeyUpdate να κυλήσει τα κλειδιά κίνησης· το WireGuard ανανεώνει μια συνεδρία μετά από ρυθμισμένο χρόνο ή πλήθος μηνυμάτων και κρατά το παλιό για λίγο για πακέτα σε πτήση. Το OpenVPN επαναδιαπραγματεύεται τα κλειδιά του καναλιού δεδομένων του σε πρόγραμμα, με το reneg-sec να ελέγχει το διάστημα.
Καμία από αυτές τις περιστροφές δεν είναι το ίδιο με την ανανέωση ενός πιστοποιητικού. Ένα πιστοποιητικό μπορεί να ισχύει για ένα χρόνο ενώ τα κλειδιά συνεδρίας αλλάζουν κάθε λίγα λεπτά, και ένα πιστοποιητικό μπορεί να αντικατασταθεί χωρίς να αγγίξει τα κλειδιά της σήραγγας που τρέχει. Όταν σχεδιάζετε μια λήξη, ρωτήστε ποιο αντικείμενο περιστρέφετε· η απάντηση καθορίζει αν οι πελάτες θα επανασυνδεθούν ή απλώς θα ανανεώσουν κλειδιά.
Ανάγνωση ρυθμίσεων και διαγνωστικών χωρίς ανάμειξη αντικειμένων
Στην πράξη, επιλέγετε ένα πλήρες πρωτόκολλο και τα υποστηριζόμενα πρωτόγονα του, δεν συναρμολογείτε το δικό σας. Το κλειδί --tls-crypt του OpenVPN προστατεύει το κανάλι ελέγχου· το κανάλι δεδομένων χρησιμοποιεί διαπραγματευμένους συμμετρικούς κρυπτογράφους. Οι καταχωρήσεις PrivateKey και PublicKey του WireGuard είναι υλικό ταυτότητας, ενώ τα κλειδιά μεταφοράς του παράγονται εσωτερικά. Το να διαβάζετε αυτά τα πεδία ως το ίδιο είδος μυστικού οδηγεί σε λάθη όπως η επικόλληση δημόσιου κλειδιού εκεί όπου ανήκει ένα ιδιωτικό.
Κρατήστε το δημόσιο υλικό χωριστά από το ιδιωτικό. Ένα πιστοποιητικό, ένα δημόσιο κλειδί WireGuard και ένα αποτύπωμα είναι ασφαλή για κοινοποίηση σε ένα δελτίο. Ένα ιδιωτικό κλειδί, ένα προκοινοποιημένο κλειδί και ένα εξαγόμενο κλειδί συνεδρίας δεν είναι. Όταν συγκρίνετε ισχύ, συγκρίνετε μέσα σε έναν τύπο: ένα αναγνωριστικό ελλειπτικής καμπύλης, ένα μέγεθος μέτρου RSA και ένα μέγεθος κλειδιού AES μετρούν διαφορετικά πράγματα υπό διαφορετικές παραδοχές. Η προδιαγραφή TLS 1.3 είναι μια χρήσιμη αναφορά για το πώς ταιριάζουν τα δύο επίπεδα, ακόμη και όταν η σήραγγά σας δεν είναι TLS.