AES-GCM ή ChaCha20-Poly1305: επιλογή κρυπτογράφησης δεδομένων VPN
Το AES-GCM είναι η προφανής επιλογή σε διακομιστές με επιτάχυνση υλικού, και το ChaCha20-Poly1305 είναι αυτό που αποδίδει χωρίς αυτήν. Το πρωτόκολλό σας μπορεί να αποφασίσει για εσάς.
Και τα δύο ονόματα είναι κατασκευές AEAD, και τα δύο είναι τυποποιημένα, και σε έναν σύγχρονο διακομιστή x86 οποιοδήποτε από τα δύο θα κορεσει μια ζεύξη gigabit χωρίς ορατή προσπάθεια. Η επιλογή παύει να είναι αυθαίρετη όταν φύγετε από αυτόν τον διακομιστή: φθηνοί δρομολογητές, παλαιότερα τηλέφωνα και εικονικές συσκευές συχνά δεν έχουν επιτάχυνση AES, και εκεί η διαφορά είναι μεγάλη. Άρα η σύγκριση δεν είναι ποια κρυπτογράφηση είναι ταχύτερη, αλλά ποια κρυπτογράφηση εκτελείται καλά σε αυτό το σύνολο τελικών σημείων και αν το πρωτόκολλο προσφέρει καν επιλογή.
Ίδια εργασία, διαφορετικοί πυρήνες
Και οι δύο κατασκευές δίνουν εμπιστευτικότητα και ακεραιότητα σε ένα πέρασμα και επικυρώνουν συσχετισμένα δεδομένα, γι αυτό τα πρωτόκολλα VPN τις χρησιμοποιούν για το κανάλι δεδομένων. Η διαφορά είναι στο εσωτερικό: το AES-GCM είναι ο κρυπτογράφος τμήματος AES σε λειτουργία μετρητή με πολυωνυμικό επικυρωτή πάνω από GF(2^128), ενώ το ChaCha20-Poly1305 είναι κρυπτογράφος ροής με κλειδί 256 bit και ξεχωριστό επικυρωτή μίας χρήσης.
Αυτό που μετράει λειτουργικά είναι κοινό: και τα δύο αποτυγχάνουν καταστροφικά με επαναχρησιμοποίηση nonce, και τα δύο χρειάζονται διαχείριση χώρου nonce ανά κλειδί, και κανένα δεν διορθώνει έναν ομότιμο που επικυρώνει το λάθος πράγμα. Ένα προφίλ που λέει AES-256-GCM δεν είναι ασφαλέστερο από ένα που λέει CHACHA20-POLY1305· και τα δύο είναι ισχυρά όταν η υλοποίηση είναι σωστή.
Πού κερδίζει το AES-GCM
Το AES έχει ειδικές εντολές στους περισσότερους σύγχρονους επεξεργαστές: AES-NI σε x86, τις επεκτάσεις κρυπτογραφίας σε ARMv8 και αντίστοιχες σε πρόσφατα σχέδια POWER και RISC-V. Όταν υπάρχουν, το GCM εκτελεί πολλά τμήματα παράλληλα ανά κλάση κύκλων και η υλοποίηση λογισμικού γίνεται άσχετη. Αυτή είναι η συνήθης περίπτωση για διακομιστές, επιτραπέζιους υπολογιστές και τρέχοντα τηλέφωνα, και γι αυτό η συμβουλή να χρησιμοποιείτε AES είναι λογική προεπιλογή σε ένα κέντρο δεδομένων.
Το πρόβλημα είναι η περίπτωση δεύτερης τάξης. Χωρίς ειδικές εντολές το AES σε λογισμικό είναι αργό, και οι υλοποιήσεις λογισμικού που βασίζονται σε πίνακες έχουν μακρά ιστορία προβλημάτων χρονισμού cache. Ένας συγκεντρωτής VPN σε εικονική μηχανή της οποίας ο οικοδεσπότης δεν εκθέτει σημαίες AES στον φιλοξενούμενο είναι ακριβώς αυτή η περίπτωση, και παραβλέπεται εύκολα επειδή ο επεξεργαστής του οικοδεσπότη έχει τη δυνατότητα.
Ελέγξτε τι βλέπει πραγματικά η διεργασία, όχι τι υποστηρίζει ο επεξεργαστής: grep -o aes /proc/cpuinfo | head -1 σε Linux, ή την αντίστοιχη σημαία δυνατότητας στο μοντέλο επεξεργαστή του hypervisor.
Πού κερδίζει το ChaCha20-Poly1305
Το ChaCha20 είναι γρήγορο σε φορητό λογισμικό επειδή χρησιμοποιεί μόνο πρόσθεση, περιστροφή και XOR, και οι υλοποιήσεις του αποφεύγουν εκ σχεδιασμού αναζητήσεις σε πίνακες που εξαρτώνται από μυστικά. Σε συσκευή χωρίς επιτάχυνση AES αυτό είναι ουσιαστικό πλεονέκτημα, και γι αυτό το επέλεξε το WireGuard: η περιγραφή του πρωτοκόλλου WireGuard αναφέρει το ChaCha20-Poly1305 ως κρυπτογράφηση δεδομένων χωρίς εναλλακτική.
Αυτή η μία επιλογή λέει κάτι χρήσιμο: σε υλικό όπου το AES επιταχύνεται, το WireGuard παραχωρεί κάποια διεκπεραιωτικότητα σε σχέση με το AES-GCM, και οι συγγραφείς του το δέχτηκαν με αντάλλαγμα προβλέψιμη συμπεριφορά σε τηλέφωνα, οικιακούς δρομολογητές και οικοδεσπότες containers. Αν ο στόλος σας είναι κυρίως μικρά κουτιά ARM, αυτή η ανταλλαγή είναι υπέρ σας.
Η αντίθετη περίπτωση είναι ένας πολυάσχολος συγκεντρωτής x86, όπου το AES-GCM με AES-NI είναι η ταχύτερη και καλύτερα υποστηριζόμενη διαδρομή, και όπου το ChaCha20 κοστίζει μετρήσιμο επεξεργαστή ανά gigabit. Καμία από τις δύο κατασκευές δεν είναι αδυναμία· το ερώτημα είναι ποια εκτελεί φθηνά το υλικό σας.
Τι σας επιτρέπει πραγματικά να επιλέξετε το πρωτόκολλό σας
| Protocol | What you get |
|---|---|
| WireGuard | ChaCha20-Poly1305 only; no negotiation |
| OpenVPN 2.5 and later | Data channel negotiated from data-ciphers: AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 |
| IPsec / IKEv2 | AES-GCM as a combined-mode transform, or ChaCha20-Poly1305 where both peers implement it |
| OpenVPN control channel | TLS decides; TLS 1.3 offers AES-GCM and ChaCha20-Poly1305 suites |
Προσέξτε τον διαχωρισμό στο OpenVPN: το κανάλι ελέγχου και το κανάλι δεδομένων διαπραγματεύονται χωριστά, άρα η σουίτα που βλέπετε για TLS δεν λέει τίποτα για την κρυπτογράφηση που προστατεύει το φορτίο σας. Η σύνοψη συνεδρίας αναφέρει και τα δύο, και η ανάγνωση μόνο του ενός από τα δύο είναι συχνή πηγή σύγχυσης.
Στο OpenVPN η κρυπτογράφηση του καναλιού δεδομένων προέρχεται από τη λίστα data-ciphers και στα δύο άκρα. Αν η λίστα του διακομιστή και η λίστα του πελάτη δεν τέμνονται, η σύνδεση είτε υποχωρεί σε ό,τι επιτρέπει το data-ciphers-fallback είτε αποτυγχάνει εντελώς, και αυτή η αποτυχία συνήθως χρεώνεται στο λάθος επίπεδο. Βάλτε την ίδια λίστα και στις δύο πλευρές, και μετά επιβεβαιώστε το διαπραγματευμένο αποτέλεσμα στο αρχείο καταγραφής αντί να υποθέσετε ότι τηρήθηκε η σειρά της λίστας.
Αποφασίστε από τρία γεγονότα για την ανάπτυξη
Πρώτον, έχουν τα τελικά σημεία επιτάχυνση AES; Αν την έχει κάθε ομότιμος, το AES-GCM είναι η φθηνότερη επιλογή και η προεπιλογή στις περισσότερες συντηρούμενες ρυθμίσεις. Αν σημαντικό μερίδιο είναι μικροί δρομολογητές ή παλαιότερα τηλέφωνα, το ChaCha20-Poly1305 κρατά την ουρά του στόλου από το να γίνει το όριο χωρητικότητας.
Δεύτερον, προσφέρει το πρωτόκολλο καν επιλογή; Με το WireGuard η απόφαση έχει παρθεί για εσάς, και η χρήσιμη εργασία είναι να επαληθεύσετε ότι τα εργαλεία γύρω του δεν αντικαθιστούν σιωπηλά κάτι άλλο. Με το OpenVPN και το IPsec η απάντηση είναι μια γραμμή ρύθμισης και ένα διαπραγματευμένο αποτέλεσμα προς καταγραφή.
Τρίτον, μπορούν και οι δύο πλευρές να συμφωνήσουν; Μια κρυπτογράφηση που ένας ομότιμος δεν υλοποιεί δεν είναι απόφαση απόδοσης, είναι διακοπή. Γι αυτό η λίστα ομοτίμων μετράει περισσότερο από κάθε μέτρηση: ένας μικτός στόλος χρειάζεται την τομή των δυνατοτήτων, όχι την προτίμηση του ταχύτερου μηχανήματος.
Αν μετρήσετε, κρατήστε τη συσκευή, το τελικό σημείο και το φορτίο ίδια και αλλάξτε ένα πράγμα. Ένα τεστ που συγκρίνει δύο διακομιστές σε διαφορετικές περιοχές μετρά τη διαδρομή, όχι την κρυπτογράφηση, και μια μέτρηση σε φορητό δεν λέει τίποτα για έναν οικοδεσπότη containers του οποίου οι σημαίες επεξεργαστή είναι καλυμμένες. Συγκρίνετε, και μετά γράψτε ποια κρυπτογράφηση διαπραγματεύτηκε πραγματικά: αυτή η καταγραφή αξίζει περισσότερο από τη μέτρηση.