Οι κρυπτογραφημένες συνδέσεις είναι πλέον ασφαλέστερες και ταχύτερες από ποτέ
Παρά το στόχο για τη διατήρηση της ιδιωτικότητας στην επικοινωνία μέσω του διαδικτύου, οι αδυναμίες στο σχεδιασμό και στην εφαρμογή της ασφάλειας επιπέδου μεταφοράς TLS (Transport Layer Security) έχουν οδηγήσει σε σημαντικές παραβιάσεις. Η τελευταία όμως έκδοση TLS 1.3 περιλαμβάνει σημαντικές βελτιώσεις, οι οποίες ενισχύουν και απλοποιούν το πρωτόκολλο κρυπτογράφησης.
Η ασφαλή αποστολή πληροφοριών μέσω του διαδικτύου αποτελεί θεμελιώδη αρχή για το ηλεκτρονικό εμπόριο, την ιατρική και άλλες ευαίσθητες συναλλαγές. Για αυτές και πολλές ακόμα άλλες χρήσεις, θεωρείται κρίσιμο ζήτημα οι μεταδιδόμενες πληροφορίες να μην παραβιάζονται, αλλά και να μη διαβάζονται από οποιονδήποτε άλλον εκτός από τον αποστολέα και τον παραλήπτη. Τα χαρακτηριστικά αυτά αποτελούν βασικό κομμάτι της ανάπτυξης του διαδικτύου και είναι εξαιρετικά κρίσιμα για πολλές καινοτόμες χρήσεις. Αν και η προέλευση της ευρύτατα χρησιμοποιούμενης τεχνολογίας που παρέχει ασφάλεια επιπέδου μεταφοράς για το διαδίκτυο εντοπίζεται πάνω από 20 χρόνια πίσω στο SSL, η τελευταία ολοκληρωμένη έκδοση TLS 1.3 είναι μια σημαντική αναθεώρηση που σχεδιάστηκε για το σύγχρονο Internet. Το πρωτόκολλο αυτό φέρνει σημαντικές βελτιώσεις στους τομείς της ασφάλειας, των επιδόσεων και της ιδιωτικότητας.
Τι είναι το TLS και ποια η ιστορία του;
Το TLS (Transport Layer Security) αποτελεί το διάδοχο του SSL (Secure Sockets Layer) και παρέχει ασφαλή επικοινωνία μεταξύ των προγραμμάτων περιήγησης (web browsers) και των διακομιστών, χρησιμοποιώντας συμμετρική κρυπτογράφηση για τα μεταδιδόμενα δεδομένα. Τα κλειδιά δημιουργούνται αποκλειστικά για κάθε διαφορετική σύνδεση και βασίζονται σε κοινό απόρρητο που διαπραγματεύεται στην αρχή της περιόδου κάθε σύνδεσης, μια διαδικασία που είναι γνωστή και ως TLS handshake (χειραψία). Η χρήση του TLS για την κρυπτογράφηση δεδομένων υποστηρίζεται από πολλά πρωτόκολλα σύνδεσης που βασίζονται σε IP, όπως τα HTTPS, SMTP, POP3 και FTP.
Το TLS είναι ένα κρυπτογραφικό πρωτόκολλο που προστατεύει τα δεδομένα που ανταλλάσσονται μέσω ενός δικτύου υπολογιστών, ενώ έχει γίνει διάσημο από την ύπαρξη του γράμματος S στο HTTPS. Ειδικότερα, το TLS χρησιμοποιείται για να προστατεύει τα δεδομένα των χρηστών του web από διαδικτυακές επιθέσεις, αποτρέποντας την υποκλοπή, παραποίηση και πλαστογράφηση μηνυμάτων. Το TLS σχεδιάστηκε ως ασφαλέστερη εναλλακτική λύση από τον προκάτοχό του SSL ή Secure Sockets Layer, το οποίο αποτελούσε το αρχικό πρωτόκολλο κρυπτογράφησης που είχε σκοπό να παρέχει ένα ασφαλές επίπεδο υποδοχής στο internet. Το SSL αναπτύχθηκε από τη Netscape το 1995, ενώ οι πρώτες εκδόσεις SSL 1.0 και 2.0 περιείχαν πολλές αδυναμίες ασφαλείας που προκάλεσαν τον πλήρη επανασχεδιασμό του πρωτοκόλλου. Το 1996 η Netscape κυκλοφόρησε την έκδοση SSL 3.0, η οποία αποτέλεσε και τη βάση για το TLS 1.0. Αυτό συνέβη επειδή με την πάροδο των ετών ερευνητές στον τομέα της ασφάλειας ανακάλυψαν πλήθος τρωτών σημείων που επηρεάζουν το SSL, γεγονός που ώθησε την Επιχειρησιακή Ομάδα Μηχανικών Διαδικτύου IETF (Internet Engineering Task Force) να σχεδιάσει το TLS σε μια προσπάθεια να τα μετριάσει. Κατά έναν ειρωνικό τρόπο όμως, οι αρχικές εκδόσεις του TLS επηρεάστηκαν επίσης από επικίνδυνες ευπάθειες, κάτι που οδήγησε τελικά στο TLS 1.2, την προεπιλεγμένη δηλαδή έκδοση που συνιστούσαν οι επαγγελματίες του κλάδου. Η πλειοψηφία των γνωστών τρωτών σημείων του πρωτοκόλλου μετριάστηκε στο TLS 1.2, όμως αυτό το επίπεδο ασφάλειας εξακολουθούσε να αποτελεί το αποτέλεσμα μιας σειράς επιδιορθώσεων πάνω σε ένα εξαρχής ελαττωματικό σχέδιο. Ως απάντηση στα προβλήματα αυτά η IETF σχεδίασε το TLS 1.3 από το μηδέν, σε μια προσπάθειά της να παρέχει ξεκάθαρα ένα σύγχρονο και ασφαλές πρωτόκολλο TLS. Η έγκριση της τελευταίας έκδοσης TLS 1.3 ολοκληρώθηκε μετά από πέντε χρόνια δοκιμών, αποτελώντας πλέον το προεπιλεγμένο πρότυπο ασφαλείας για το διαδίκτυο. Όλες οι εκδόσεις TLS και τα σχετικά RFC (Request For Comments) έγγραφά τους περιλαμβάνονται στην παρακάτω λίστα:
Το TLS 1.0 δημοσιεύθηκε ως RFC 2246 το 1999.
Το TLS 1.1 δημοσιεύθηκε ως RFC 4346 το 2006.
Το TLS 1.2 δημοσιεύθηκε ως RFC 5246 το 2008.
Το TLS 1.3 δημοσιεύθηκε ως προτεινόμενο πρότυπο στο RFC 8446 το 2018.
Πλεονεκτήματα του TLS σε σχέση με το SSL
Το TLS είναι πιο αποτελεσματικό και πιο ασφαλές από το SSL, καθώς εκτελεί ισχυρότερο έλεγχο ταυτότητας μηνυμάτων και χρησιμοποιεί διαφορετικούς αλγόριθμους κρυπτογράφησης. Για παράδειγμα, το TLS υποστηρίζει προ-κοινόχρηστα κλειδιά, ασφαλείς απομακρυσμένους κωδικούς πρόσβασης και ταυτοποίηση τύπου Kerberos, χαρακτηριστικά που απουσιάζουν από το SSL. Επιπλέον, το TLS διαθέτει συμβατότητα προς τα πίσω για παλαιότερες συσκευές που εξακολουθούν να χρησιμοποιούν το SSL. Τα χαρακτηριστικά του πρωτοκόλλου TLS περιλαμβάνουν δύο διαφορετικά επίπεδα. Το πρωτόκολλο εγγραφής TLS που παρέχει ασφάλεια στη σύνδεση και το πρωτόκολλο TLS handshake που επιτρέπει στον πελάτη και τον διακομιστή να ταυτοποιούνται μεταξύ τους και να διαπραγματεύονται τα κλειδιά ασφαλείας πριν από τη μετάδοση οποιωνδήποτε δεδομένων. Το TLS handshake είναι μια διαδικασία που εκτελείται μέσα από πολλαπλά βήματα. Μια βασική χειραψία TLS περιλαμβάνει την αποστολή μηνυμάτων “hello” μεταξύ πελάτη και διακομιστή, καθώς και την ανταλλαγή κλειδιών, κρυπτογραφικού μηνύματος και μηνύματος τερματισμού. Η διαδικασία πολλαπλών βημάτων είναι τέτοια που καθιστά το TLS αρκετά ευέλικτο, ώστε να χρησιμοποιείται σε διαφορετικές εφαρμογές, καθώς μπορεί να τροποποιηθεί η μορφή και η σειρά ανταλλαγής.
Πώς λειτουργούν οι παλαιότερες εκδόσεις TLS;
Για να γίνουν κατανοητά τα οφέλη που προσφέρει το TLS 1.3, θα πρέπει πρώτα να εξηγήσουμε τον τρόπο με τον οποίο δουλεύουν οι παλαιότερες εκδόσεις TLS. Το TLS είναι ένα υβριδικό κρυπτοσύστημα, κάτι που σημαίνει ότι χρησιμοποιεί τόσο ασύμμετρη (δημόσιο κλειδί), όσο και συμμετρική (κωδικό/φράση) κρυπτογράφηση, με την ασύμμετρη κρυπτογραφία να εκτελεί σημαντικά βραδύτερα βήματα από τα συμμετρικά ισοδύναμά της. Συνεπώς, το TLS χρησιμοποιεί μόνο δημόσια κλειδιά, έτσι ώστε οι πελάτες και οι διακομιστές να μπορούν να ανταλλάσσουν με ασφάλεια ένα συμμετρικό κλειδί. Το κλειδί αυτό μπορεί στη συνέχεια να χρησιμοποιηθεί για την κρυπτογράφηση όλων των επακόλουθων επικοινωνιών, αποφεύγοντας τις υπερβολικές επιδόσεις που επιβάλλονται από την ασύμμετρη κρυπτογράφηση. Το TLS 1.2 υποστηρίζει πολλαπλούς αλγόριθμους ανταλλαγής κλειδιών (π.χ. RSA, DH κ.λπ.), μαζί με διάφορους άλλους κρυπτογραφικούς αλγόριθμους που χρησιμοποιούνται για την κρυπτογράφηση και αποκρυπτογράφηση μηνυμάτων. Ο μεγάλος αυτός αριθμός εναλλακτικών επιλογών απαιτεί από τους πελάτες και τους διακομιστές να διαπραγματεύονται, έτσι ώστε όλα τα μέρη να χρησιμοποιούν τις ίδιες παραμέτρους TLS. Η διαπραγμάτευση αυτή είναι τυποποιημένη σε ένα πρωτόκολλο, που όπως αναφέραμε και πιο πάνω αποκαλείται handshake.
Θέματα ασφαλείας του TLS 1.2
Αν και το TLS 1.2 λειτουργεί πολύ καλά στις περισσότερες περιπτώσεις, υπάρχουν ερωτηματικά σχετικά με το συνολικό επίπεδο ασφάλειας και προστασίας της ιδιωτικότητας που παρέχει, ενώ επιβάλλει επιπλέον και περιττές επιδόσεις στην κατανάλωση του δικτύου. Με την πάροδο των χρόνων, οι ερευνητές (αλλά και οι επιτιθέμενοι) ανακάλυψαν μεγάλο αριθμό ευπαθειών σε πολλά συστατικά του TLS 1.2, συμπεριλαμβανομένων των αλγορίθμων ανταλλαγής κλειδιών, της κρυπτογράφησης και των ψηφιακών υπογραφών. Σε αυτές ανήκουν τα γνωστά Heartbleed και BERserk, ωστόσο υπήρχαν και ευπάθειες του ίδιου του πρωτοκόλλου που αφορούσαν κακές αποφάσεις σχεδιασμού σε προηγούμενες εκδόσεις TLS, δηλαδή πριν από το TLS 1.2. Παρόλο που η πλειονότητα των σφαλμάτων διορθώθηκε στο TLS 1.2, τα τρωτά σημεία του σχεδιασμού του πρωτοκόλλου δεν μπορούσαν δυστυχώς να διορθωθούν με τη χρήση μόνο μιας ενημερωμένης έκδοσης κώδικα λογισμικού. Και όπως αποδείχτηκε τελικά, για την πλήρη λύση των προβλημάτων χρειάστηκε η IETF να επανασχεδιάσει πλήρως το πρωτόκολλο handshake στην έκδοση TLS 1.3. Υπήρξαν πολλές ανησυχίες για την ασφάλεια του TLS, όμως μία από τις σημαντικότερες ήταν η συνειδητοποίηση ότι το TLS 1.2 (όπως και όλες οι παλαιότερες εκδόσεις) ήταν ευάλωτο σε επιθέσεις υποβάθμισής του, εξαιτίας ενός ελλείμματος στο σχεδιασμό του πρωτοκόλλου handshake. Ειδικότερα, το TLS 1.2 δεν χρησιμοποιούσε ψηφιακές υπογραφές για την προστασία της ακεραιότητας της χειραψίας. Οι υπογραφές προστάτευαν ένα μέρος της χειραψίας, μόνο μετά τη διαπραγμάτευση με κρυπτογράφηση. Έτσι, οι επιτιθέμενοι μπορούσαν να χειραγωγήσουν τυχόν διαπραγματεύσεις κρυπτογράφησης τρίτων μερών που συμβαίνουν στο ίδιο δίκτυο υπολογιστών και να αναγκάσουν τη χρήση ενός ανασφαλούς κρυπτογράφου. Στη συνέχεια, θα μπορούσαν να σπάσουν αυτή την ευάλωτη κρυπτογράφηση και να αποκτήσουν αδικαιολόγητη πρόσβαση σε ολόκληρη τη συζήτηση.
Θέματα απόδοσης του TLS 1.2
Εκτός από τα θέματα ασφάλειας, η ανάγκη του TLS 1.2 να διαπραγματεύεται πολυάριθμες παραμέτρους TLS μπορεί να επιβάλει αυξημένες επιδόσεις στις HTTPS συνδέσεις, ή σε άλλες προστατευμένες από το TLS επικοινωνίες. Η χειραψία τεσσάρων βημάτων στο TLS 1.2 απαιτεί δύο ανταλλαγές κυκλικής εκκίνησης, με επιλογή αρχικά της κρυπτογραφικής σουίτας και την ανταλλαγή στη συνέχεια των πιστοποιητικών και των συμμετρικών κλειδιών. Αυτό σημαίνει ότι για κάθε σύνδεση TLS απαιτούνται δύο πρόσθετες συναλλαγές με το διακομιστή. Ως αποτέλεσμα αυτών των λειτουργιών, οι συνδέσεις TLS απαιτούν περισσότερο εύρος ζώνης και μεγαλύτερη ισχύ από το (μη κρυπτογραφημένο) HTTP, το οποίο μπορεί να είναι ιδιαίτερα δαπανηρό για εφαρμογές IoT, όπου η κατανάλωση μικρής ισχύος και εύρους ζώνης αποτελούν αυστηρούς περιορισμούς.
Θέματα ιδιωτικότητας του TLS 1.2
Το TLS 1.2 διαθέτει επίσης ευπάθειες που σχετίζονται με θέματα του ιδιωτικού απόρρητου των χρηστών. Ειδικότερα, το TLS προσφέρει μια επέκταση που είναι γνωστή ως Ένδειξη Ονόματος Διακομιστή ή SNI (Server Name Indication). Το SNI επιτρέπει στο όνομα του διακομιστή να περιλαμβάνεται στην αρχική χειραψία SSL. Η επέκταση αυτή χρησιμοποιείται για εικονική φιλοξενία, όπου οι διακομιστές μπορούν να εξυπηρετούν πολλούς τομείς στην ίδια IP διεύθυνση και θύρα (port), ενώ παρουσιάζουν ένα διαφορετικό πιστοποιητικό για κάθε τομέα. Στο TLS 1.2 τα SNI αποστέλλονται χωρίς κρυπτογράφηση και επομένως παρά τη χρήση του HTTPS, ένας εισβολέας δικτύου μπορεί να προκαλέσει διαρροή αυτών των πληροφοριών και να παρακολουθήσει τις ιστοσελίδες που επισκέπτεται ένας χρήστης.
Πώς διορθώνονται όλα αυτά τα προβλήματα με το TLS 1.3;
Το TLS 1.2 (όπως και οι παλαιότερες εκδόσεις) επικεντρώθηκε στη διατήρηση της συμβατότητας προς τα πίσω. Κάθε νεότερη έκδοση βασίστηκε στις προηγούμενες, με μικρές αναθεωρήσεις που προσπαθούσαν να εξαλείψουν τα τρωτά σημεία των προηγούμενων. Δυστυχώς όμως, αυτό σήμαινε ότι οι αποφάσεις του κακού σχεδιασμού των πρωτοκόλλων (όπως η μη προστατευμένη χειραψία) κληρονομούνταν και στις νεότερες εκδόσεις. Το TLS 1.3 εγκατέλειψε τη συμβατότητα προς τα πίσω υπέρ ενός κατάλληλου σχεδίου ασφαλείας. Έτσι λοιπόν, το TLS 1.3 σχεδιάστηκε από το μηδέν για να παρέχει λειτουργικότητα παρόμοια (αλλά όχι και συμβατή) με το TLS 1.2, με σημαντικά όμως βελτιωμένη ασφάλεια, απόδοση και ιδιωτικότητα.
Ασφάλεια του TLS 1.3
Βασική αρχή του TLS 1.3 είναι η απλότητα και στην έκδοση αυτή έχουν αφαιρεθεί όλοι οι αλγόριθμοι ανταλλαγής κλειδιών, εκτός από την ανταλλαγή κλειδιού Diffie-Hellman (DH). Το TLS 1.3 έχει οριοθετήσει τη χρήση ενός συνόλου δοκιμασμένων παραμέτρων DH, καταργώντας την ανάγκη παραμέτρων διαπραγμάτευσης με το διακομιστή. Επιπλέον, το TLS 1.3 δεν υποστηρίζει πλέον περιττές ή ευάλωτες κρυφές μνήμες, όπως τον τύπο CBC και τον κωδικό RC4. Οι κρυπτογράφοι αυτοί είναι γνωστό ότι είναι επιρρεπείς σε επιθέσεις, εξακολουθούσαν όμως να υποστηρίζονται στις περισσότερες εφαρμογές TLS για συμβατότητα παλαιού τύπου. Ευτυχώς όμως, η βιασύνη της εκδήλωσης επιθέσεων υποβάθμισης που επηρέασαν τις πρώτες εκδόσεις του TLS ώθησε την IETF να αφαιρέσει εντελώς τέτοιους κρυπτογράφους από το TLS 1.3. Επιπλέον, το TLS 1.3 απαιτεί από τους διακομιστές να υπογράφουν κρυπτογραφικά ολόκληρη τη χειραψία, συμπεριλαμβανομένης της διαπραγμάτευσης κρυπτογράφησης, κάτι που εμποδίζει τους επιτιθέμενους να τροποποιήσουν τις παραμέτρους χειραψίας. Αυτό σημαίνει πρακτικά ότι το TLS 1.3 είναι αρχιτεκτονικά αδιαπέραστο στις επιθέσεις υποβάθμισης που επηρέασαν προηγούμενες εκδόσεις του TLS. Τέλος, οι υπογραφές έχουν επίσης βελτιωθεί με την εφαρμογή ενός νέου προτύπου που ονομάζεται RSA-PSS. Οι υπογραφές του RSA-PSS είναι απρόσβλητες από κρυπτογραφικές επιθέσεις που επηρεάζουν τα συστήματα υπογραφής προηγούμενων εκδόσεων του TLS.
Απόδοση του TLS 1.3
Εκτός από τη βελτιωμένη ασφάλεια, το μειωμένο σύνολο παραμέτρων και η απλοποιημένη χειραψία στο TLS 1.3 συμβάλλουν επίσης στη βελτίωση της συνολικής απόδοσης. Δεδομένου ότι υπάρχει ένας μόνο αλγόριθμος εναλλαγής κλειδιών και ελάχιστοι υποστηριζόμενοι κρυπτογράφοι, το πλήρες εύρος ζώνης που απαιτείται για τη δημιουργία ενός TLS 1.3 καναλιού είναι σημαντικά μικρότερο σε σχέση με τις προηγούμενες εκδόσεις. Επιπλέον, το TLS 1.3 υποστηρίζει ένα νέο πρωτόκολλο χειραψίας που ονομάζεται λειτουργία 1-RTT. Με το 1-RTT ο πελάτης μπορεί να στείλει κοινόχρηστα κλειδιά DH στο πρώτο μήνυμα χειραψίας, καθώς μπορεί να είναι αρκετά σίγουρος από τις παραμέτρους που θα χρησιμοποιήσει ο διακομιστής. Σε σπάνια περίπτωση που ο διακομιστής δεν τα υποστηρίζει προκαλείται σφάλμα, έτσι ώστε ο πελάτης να στείλει διαφορετική διαμόρφωση. Αντί να διαπραγματεύεται πρώτα τις παραμέτρους και στη συνέχεια να ανταλλάσσει κλειδιά, το TLS 1.3 επιτρέπει σε έναν πελάτη να δημιουργήσει ένα κανάλι TLS με μία μόνο ανταλλαγή κυκλικής εκκίνησης, αντί για δύο που απαιτούνταν στις προηγούμενες εκδόσεις. Αυτό είναι κάτι που μπορεί να έχει μεγάλο θετικά σωρευτικό αποτέλεσμα για την επεξεργασία, την ισχύ και τους πόρους του δικτύου που απαιτούνται για να επικοινωνεί ένας πελάτης με ένα διακομιστή μέσω του TLS 1.3. Ωστόσο, οι βελτιστοποιήσεις της απόδοσης δεν σταματούν εδώ, καθώς το 0-RTT ή Zero Round Trip Time Resumption (μηδενικός χρόνος επανάληψης επανόδου) είναι ένα χαρακτηριστικό που προσφέρει μια ακόμα βελτίωση στο TLS 1.3. Όταν ένα πρόγραμμα περιήγησης επισκέπτεται έναν διακομιστή για πρώτη φορά και ολοκληρώνει επιτυχώς μια χειραψία TLS, τόσο ο πελάτης, όσο και ο διακομιστής μπορούν να αποθηκεύσουν τοπικά ένα κλειδί κρυπτογράφησης που είναι κοινόχρηστο. Όταν το πρόγραμμα περιήγησης επισκεφτεί ξανά τον ίδιο διακομιστή, μπορεί να χρησιμοποιήσει αυτό το κλειδί επανάληψης για να στείλει κρυπτογραφημένα δεδομένα με το πρώτο μήνυμά του προς το διακομιστή. Το κλειδί αυτό έχει την ίδια λανθάνουσα κατάσταση με το μη κρυπτογραφημένο HTTP, καθώς δεν απαιτούνται πλέον οι αρχικές χειραψίες, με αποτέλεσμα να έχουμε βελτιωμένους χρόνους φόρτωσης των ιστοσελίδων.
Ιδιωτικότητα του TLS 1.3
Διαθέτοντας σχεδιασμό που έλαβε υπόψη του όλα τα παρελθόντα λάθη, το TLS 1.3 προσφέρει πλέον μια ολοκληρωμένη επέκταση που κρυπτογραφεί τις πληροφορίες SNI. H σωστή χρήση της επέκτασης αυτής αποτρέπει τους εισβολείς από τη διαρροή του ονόματος τομέα του απομακρυσμένου εξυπηρετητή, κάτι που δεν τους επιτρέπει να διαθέτουν μέθοδο ανίχνευσης του ιστορικού του χρήστη στο HTTPS. Η λειτουργία αυτή παρέχει μεγαλύτερη προστασία του ιδιωτικού απορρήτου στους χρήστες του διαδικτύου, σε σχέση με όλες τις προηγούμενες εκδόσεις του TLS.
Γράφει ο Χάρης Ματθαίου
Join the Conversation →