OpenVPN EC έναντι ED: γιατί τα ονόματα δεν είναι σκάλα ισχύος
Τα EC, ED, ECDHE και auth απαντούν σε διαφορετικές ερωτήσεις. Ταξινομήστε ένα προφίλ OpenVPN κατά την εργασία που κάνει κάθε όνομα πριν συγκρίνετε ή επεξεργαστείτε οτιδήποτε.
Βάλτε τα ec, ed, ecdh, ecdsa, auth και μια λίστα κρυπτογραφικών TLS δίπλα-δίπλα σε ένα προφίλ και το αρχείο αρχίζει να μοιάζει με ένα κουμπί ισχύος με έξι θέσεις. Δεν είναι. Κάθε όνομα απαντά σε διαφορετική ερώτηση, και δύο προφίλ που διαφέρουν σε ένα από αυτά δεν είναι απαραίτητα ισχυρότερα ή ασθενέστερα το ένα από το άλλο. Η ταξινόμηση των ονομάτων κατά την εργασία που κάνουν παίρνει περίπου πέντε λεπτά και αποτρέπει τις περισσότερες κακές αλλαγές που κάνουν οι άνθρωποι σε μια διαμόρφωση που δουλεύει.
Η παρακάτω ταξινόμηση ξεκινά από την ίδια τη σύγχυση και στη συνέχεια ανοίγεται προς τα έξω, στα μέρη ενός προφίλ που πραγματικά καθορίζουν τι προστατεύει την κίνησή σας. Κάθε ενότητα παίρνει με τη σειρά μία παρερμηνεία και δείχνει σε τι είναι πραγματικά δεμένο το όνομα.
Δύο γράμματα, δύο διαφορετικές ερωτήσεις
Το ζευγάρι που προκαλεί τις περισσότερες συζητήσεις είναι το EC και το ED, και η συζήτηση συνήθως υποθέτει ότι είναι ανταγωνιστικές απαντήσεις σε μία ερώτηση. Δεν βρίσκονται καν στον ίδιο άξονα. Το EC περιγράφει μια οικογένεια μαθηματικών: κρυπτογραφία ελλειπτικών καμπυλών, όπου η ασφάλεια προέρχεται από τη δυσκολία ενός διακριτού λογάριθμου σε μια καμπύλη και όχι σε ένα μεγάλο πεπερασμένο σώμα.
Το ED περιγράφει ένα σχήμα καμπύλης μέσα σε αυτή την οικογένεια. Οι καμπύλες Twisted Edwards είναι μια αναπαράσταση που επιλέχθηκε για ταχύτητα και για αντοχή σε αρκετά λάθη υλοποίησης, και το Ed25519 είναι το όνομα που συνήθως εννοούν οι άνθρωποι. Η καμπύλη δεν είναι ανταγωνιστής της κρυπτογραφίας ελλειπτικών καμπυλών· είναι ένας τρόπος να γράψεις μια ελλειπτική καμπύλη. Το να διαβάζεις το ED ως «το νεότερο, ισχυρότερο EC» είναι η πρώτη λάθος στροφή, και ό,τι ακολουθεί τείνει να είναι λάθος στην ίδια κατεύθυνση.
Η υπογραφή και η ανταλλαγή είναι ξεχωριστές εργασίες
Μόλις λυθεί το ζήτημα της οικογένειας, τα υπόλοιπα ονόματα χωρίζονται σε δύο στήλες που δεν αντικαθιστούν ποτέ η μία την άλλη. Η μία στήλη υπογράφει, η άλλη συμφωνεί σε ένα κοινό μυστικό.
| Name in the profile | Job it does | What it is not |
|---|---|---|
ecdsa | Signature scheme using elliptic-curve keys | Not a key-exchange method |
eddsa, Ed25519 | Signature scheme for twisted Edwards curves | Not interchangeable with ECDSA |
ecdh, X25519 | Ephemeral key agreement | Not a signature and not a cipher |
auth | HMAC digest for packet authentication | Not the data cipher |
Και το EdDSA και το ECDSA υπογράφουν, αλλά είναι διαφορετικά σχήματα με διαφορετικές μορφές κλειδιών, επομένως ένα πιστοποιητικό που εκδόθηκε για το ένα δεν μπορεί να χρησιμοποιηθεί ως το άλλο. Το EdDSA ορίζεται για ένα μικρό σύνολο καμπυλών· το P-256 δεν είναι μία από αυτές, γι’ αυτό ένα πιστοποιητικό P-256 επαληθεύεται με ECDSA και ποτέ με Ed25519.
Η στήλη της ανταλλαγής δεν έχει αντίστοιχο που να λέγεται EdDH. Η εφήμερη συμφωνία σε ένα κλειδί Curve25519 είναι X25519, και αυτό είναι ECDH με μια συγκεκριμένη καμπύλη, ακριβώς όπως με το P-256. Το Ed25519 σημαίνει αυστηρά το σχήμα υπογραφής, αν και το όνομα χρησιμοποιείται χαλαρά για την ανταλλαγή, επειδή οι δύο καμπύλες σχετίζονται: η μορφή Edwards για την υπογραφή και η μορφή Montgomery για το X25519 περιγράφουν την ίδια υποκείμενη ομάδα.
Γιατί ένα προφίλ EC δεν έχει αρχείο dh
Ένα αρχείο dh περιέχει προ-δημιουργημένες παραμέτρους για Diffie-Hellman πεπερασμένου σώματος, και αυτές οι παράμετροι υπάρχουν επειδή ένας μεγάλος πρώτος αριθμός και ένας γεννήτορας πρέπει να έρθουν από κάπου. Μια ανταλλαγή ελλειπτικής καμπύλης δεν τα χρειάζεται: η ονομασμένη καμπύλη είναι το σύνολο παραμέτρων και οι δύο πλευρές το γνωρίζουν ήδη. Αυτός είναι ο λόγος που ένα προφίλ EC μπορεί να παραλείψει την οδηγία.
Δύο καταστάσεις εξακολουθούν να παράγουν μια γραμμή dh σε ένα προφίλ που κατά τα άλλα φαίνεται σύγχρονο. Η πρώτη είναι ένας δεύτερος ακροατής ή ένας παλαιότερος ομότιμος που διαπραγματεύεται πραγματικά ομάδες πεπερασμένου σώματος. Η δεύτερη είναι κείμενο που περίσσεψε, αντιγράφηκε από πρότυπο της εποχής RSA και δεν αφαιρέθηκε ποτέ. Ένα προφίλ που ονομάζει καμπύλη για την ανταλλαγή και φορτώνει ακόμη αρχείο dh 2048 bit δεν είναι ασφαλέστερο επειδή το έκανε· κουβαλά ένα αχρησιμοποίητο τεχνούργημα.
Το TLS 1.3 αφαίρεσε την ανταλλαγή κλειδιών από το όνομα
Συγκρίνετε το TLS_AES_256_GCM_SHA384 με το TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384 και το συντομότερο όνομα μοιάζει με υποβάθμιση. Είναι μετονομασία, και ο λόγος είναι δομικός: το TLS 1.3 αφαίρεσε το στατικό RSA και την ανταλλαγή κλειδιών Diffie-Hellman πεπερασμένου σώματος, οπότε μια εφήμερη ανταλλαγή ελλειπτικής καμπύλης είναι η μόνη επιλογή χωρίς PSK που απομένει. Το να την ονομάζεις σε κάθε σουίτα θα επαναλάμβανε το ίδιο γεγονός δώδεκα φορές.
Ο τύπος πιστοποιητικού εξαφανίστηκε από το όνομα για έναν σχετικό λόγο. Στο 1.3 το πιστοποιητικό επαληθεύει την υπογραφή της χειραψίας, όχι τη συμφωνία κλειδιών, οπότε δεν επιλέγει πλέον τη σουίτα. Γι’ αυτό υπάρχει και ξεχωριστή λίστα κρυπτογραφικών για το 1.3 στη διαμόρφωση: οι σουίτες μετονομάστηκαν και αναδιοργανώθηκαν, δεν αποδυναμώθηκαν.
Μια συνέπεια αξίζει να ειπωθεί καθαρά. Το ECDHE είναι αλγόριθμος ανταλλαγής κλειδιών και ποτέ κρυπτογράφηση. Μια σουίτα που περιγράφεται ως «ελλειπτική» λέει κάτι για το πώς οι δύο ομότιμοι έφτασαν σε ένα κοινό κλειδί και τίποτα για το τι κρυπτογραφεί στη συνέχεια το φορτίο.
Το auth επαληθεύει πακέτα, όχι φορτία
Η οδηγία auth επιλέγει τη σύνοψη HMAC που επαληθεύει τα πακέτα, και η ιστορική προεπιλογή της είναι SHA1. Με κρυπτογράφηση δεδομένων που δεν είναι AEAD, το OpenVPN υπολογίζει τη σύνοψη πάνω στο κρυπτοκείμενο και την προσθέτει, μια διάταξη κρυπτογράφηση-και-μετά-MAC που κάνει τη χειραγώγηση της επένδυσης μη πρακτική.
Ο μύθος εδώ είναι ότι η αύξηση του auth σε SHA512 θωρακίζει τη σήραγγα. Δεν αυξάνει την ισχύ της κρυπτογράφησης, και αν η διαπραγματευμένη κρυπτογράφηση δεδομένων είναι λειτουργία AEAD όπως το AES-256-GCM, η σύνοψη δεν εφαρμόζεται καθόλου στα πακέτα δεδομένων. Η ετικέτα GCM τα επαληθεύει ήδη, και η τιμή auth μένει για το HMAC του καναλιού ελέγχου και για κάθε κρυπτογράφηση χωρίς AEAD που χρησιμοποιείται ακόμη.
Άρα η οδηγία έχει σημασία, αλλά έχει σημασία σε στενότερο σημείο απ’ ό,τι υποδηλώνει η θέση της στο αρχείο. Το να ελέγξετε ποια κρυπτογράφηση διαπραγματεύτηκε πραγματικά σας λέει αν εφαρμόζεται καθόλου.
Διαβάστε το προφίλ κατά στήλη, όχι κατά κατάταξη
Τρεις ερωτήσεις χωρίζουν καθαρά τα στρώματα, και σε καθεμία απαντά διαφορετικό μέρος της διαπραγματευμένης συνεδρίας. Ποια κρυπτογράφηση προστατεύει το φορτίο; Ποια ετικέτα ή σύνοψη εγγυάται για κάθε πακέτο, και χρειάζεται καθόλου μία η κρυπτογράφηση που χρησιμοποιείται; Ποιο πιστοποιητικό έκλεισε τη χειραψία, και το κανάλι ελέγχου προστατεύεται επιπλέον από tls-auth ή tls-crypt;
Τίποτα στην ένδειξη EC ή ED δεν λύνει καμία από αυτές τις τρεις, και ένα όνομα σουίτας μόνο του δεν λύνει επίσης καμία από αυτές. Το διαπραγματευμένο αποτέλεσμα είναι η μόνη απόδειξη, οπότε διαβάστε το αντί να συμπεραίνετε την ισχύ από το λεξιλόγιο:
openssl x509 -in client.crt -noout -text | grep -E 'Signature Algorithm|Public Key Algorithm'
grep -i 'control channel' /var/log/openvpn.log
Η πρώτη εντολή σας λέει ποιο σχήμα υπογραφής χρησιμοποιεί πραγματικά το πιστοποιητικό σας, και αυτός είναι ο μόνος αξιόπιστος τρόπος να ξέρετε αν τρέχετε ECDSA ή Ed25519. Η δεύτερη δείχνει τη γραμμή του καναλιού ελέγχου που κατέγραψε ο πελάτης για τη συνεδρία, μαζί με την έκδοση TLS και τη σουίτα στην οποία κατέληξε. Αν μια αλλαγή στο προφίλ δεν μπορεί να δικαιολογηθεί από μία από αυτές τις δύο εξόδους, μάλλον είναι αλλαγή σε όνομα και όχι σε ιδιότητα.