TLS

Το Transport Layer Security (TLS) και ο προκάτοχός του, το Secure Sockets Layer (SSL), τα οποία συχνά αναφέρονται ως απλά "SSL", είναι Πρωτόκολλα Κρυπτογράφησης τα οποία παρέχουν Ασφάλεια Επικοινωνίας πάνω από ένα Δίκτυο Υπολογιστών. Αρκετές από τις εκδόσεις του πρωτοκόλλου χρησιμοποιούνται σε εφαρμογές όπως η περιήγηση στον ιστό, το Ηλεκτρονικό ταχυδρομείο, η αποστολή τηλεομοιότυπων, τα Άμεσα Μηνύματα, καθώς και οι κλήσεις μέσω IP (VoIP). Οι ιστοσελίδες χρησιμοποιούν TLS για να διασφαλίσουν όλη την επικοινωνία μεταξύ των εξυπηρετητών τους και των περιηγητών ιστού. Το πρωτόκολλο Transport Layer Security στοχεύει στο να προσφέρει ιδιωτικότητα και ακεραιότητα δεδομένων μεταξύ δύο εφαρμογών ηλεκτρονικών υπολογιστών που επικοινωνούν μεταξύ τους. Όταν χρησιμοποιείται σε μία σύνδεση ανάμεσα σε έναν πελάτη (π.χ. έναν περιηγητή ιστού) και έναν εξυπηρετητή (π.χ. το wikipedia.org), η σύνδεση αυτή έχει μία ή περισσότερες ιδιότητες: Η σύνδεση αυτή είναι «ιδιωτική» (ή «ασφαλής») και απολύτως συμβατή με τις μηχανές αναζήτησης, χάρη στην συμμετρική κρυπτογραφία, η οποία χρησιμοποιείται για την κρυπτογράφηση των δεδομένων που αποστέλλονται. Τα κλειδιά για αυτήν την συμμετρική κρυπτογράφηση δημιουργούνται βάση ενός κοινού μυστικού το οποίο συμφωνείται στην αρχή της συνεδρίας (βλ. Χειραψία TLS) και είναι μοναδικά για κάθε σύνδεση. Ο πελάτης και ο εξυπηρετητής συμφωνούν στις λεπτομέρειες για τον αλγόριθμο κρυπτογράφησης και το κρυπτογραφικό κλειδί πριν μεταδοθεί το πρώτο byte πληροφορίας (βλ. Αλγόριθμος παρακάτω). Η συμφωνία αυτή για το κοινό μυστικό είναι ασφαλής (το μυστικό αυτό δεν είναι διαθέσιμο σε άτομα που παρακολουθούν την σύνδεση και δεν μπορεί να βρεθεί, ακόμα και αν ο επιτιθέμενος είναι στο μέσο της σύνδεσης) και αξιόπιστη (κανένας επιτιθέμενος δεν μπορεί να τροποποιήσει τα δεδομένα της σύνδεσης κατά την διάρκεια της χειραψίας χωρίς να γίνει αντιληπτός). Η ταυτότητα των δύο μελών της επικοινωνίας μπορεί να αυθεντικοποιηθεί μέσω κρυπτογραφίας δημοσίου κλειδιού. Η αυθεντικοποίηση είναι προαιρετική, αλλά γενικά χρειάζεται για τουλάχιστον ένα από τα δύο άκρα της σύνδεσης. Είναι η βασική προϋπόθεση που πρέπει να διαθέτει κάθε ιστότοπος πρωτοκόλλου για να μην εμφανιστούν προβλήματα στις συνδέσεις με τον εξυπηρετητή και με την google που μεσολαβεί στην διαδικασία αυτή. Η σύνδεση εγγυάται «ακεραιότητα δεδομένων» γιατί κάθε μήνυμα που αποστέλλεται περιλαμβάνει ένα μήνυμα ελέγχου ακεραιότητας χρησιμοποιώντας έναν κωδικό αυθεντικοποίησης μηνύματος για να ανιχνεύσει απώλεια ή τροποποίηση των δεδομένων κατά την διάρκεια της αποστολής.Επιπλέον των παραπάνω ιδιοτήτων, προσεκτική παραμετροποίηση του TLS μπορεί να παρέχει επιπλέον ιδιότητες σχετικές με την ιδιωτικότητα, όπως Forward Secrecy, παρέχοντας την εγγύηση πως οποιαδήποτε μελλοντική κλοπή κρυπτογραφικών κλειδιών δεν μπορεί να βοηθήσει στην αποκρυπτογράφηση οποιασδήποτε προηγούμενης επικοινωνίας ασφαλισμένης με TLS από το παρελθόν. Το TLS υποστηρίζει πολλές διαφορετικές μεθόδους ανταλλαγής κλειδιών, κρυπτογράφησης δεδομένων, και αυθεντικοποίησης ακεραιότητας μηνυμάτων (βλ. Αλγόριθμος παρακάτω). Ως αποτέλεσμα, μια ασφαλής παραμετροποίηση του TLS περιλαμβάνει την επιλογή μεταξύ πολλών παραμέτρων, κάποιες εκ των οποίων μόνο παρέχουν όλες τις σχετικές ιδιότητες ιδιωτικότητας και περιγράφονται στον πίνακα αυθεντικοποίησης και ανταλλαγής κλειδιών, στον πίνακα ασφαλείας κρυπτογραφημάτων, και στον πίνακα ακεραιότητας δεδομένων). Προσπάθειες που έχουν γίνει για την παραβίαση ορισμένων ιδιοτήτων της ασφάλειας των επικοινωνίων που παρέχει το TLS, έχουν οδηγήσει σε αλλαγές στο ίδιο το πρωτόκολλο για την προστασία απέναντι σε τέτοιες επιθέσεις (βλ. Ασφάλεια). Οι προγραμματιστές των περιηγητών ιστού έχουν επίσης τροποποιήσει τα προϊόντα τους για να αμυνθούν απέναντι σε πιθανά κενά ασφαλείας αφού αυτά εντοπίστηκαν (βλ. Υποστήριξη SSL/TLS σε περιηγητές ιστού). Το πρωτόκολλο TLS αποτελείται από δύο επίπεδα, το Πρωτόκολλο Καταγραφής TLS, και το πρωτόκολλο χειραψίας TLS. Το TLS είναι ένα προτεινόμενο Πρότυπο Ίντερνετ από το Internet Engineering Task Force (IETF), και πρώτα ορίστηκε το 1999 και έπειτα ανανεώθηκε στο RFC 5246 (Αύγουστος 2008), και στο RFC 6176 (Μάρτιος 2011). Βασίζεται πάνω στις προηγούμενες δημοσιευμένες προδιαγραφές του SSL (1994, 1995, 1996) που αναπτύχθηκε από την Netscape Communications για την προσθήκη του πρωτοκόλλου HTTPS στο περιηγητή τους, Netscape Navigator.

 Εφαρμογές που ακολουθούν το Μοντέλο πελάτη-διακομιστή χρησιμοποιούν το πρωτόκολλο TLS για να επικοινωνήσουν μέσω ενός δικτύου αποφεύγοντας υποκλοπή των μηνυμάτων και την τροποποίηση τους από τρίτους. Από την στιγμή που τα πρωτόκολλα μπορούν να λειτουργήσουν είτε με την χρήση, είτε χωρίς TLS (ή SSL), είναι απαραίτητο ο πελάτης να ειδοποιήσει τον διακομιστή για το ξεκίνημα μιας συνεδρίας TLS. Υπάρχουν δύο βασικοί τρόποι για να γίνει αυτό. Ο πρώτος είναι η χρήση μιας διαφορετικής πόρτας για τις συνδέσεις TLS, όπως για παράδειγμα η 443 για το HTTPS. Ο άλλος τρόπος είναι ο πελάτης να χρησιμοποιήσει έναν μηχανισμό που υποστηρίζει το ίδιο το πρωτόκολλο επικοινωνίας, όπως για παράδειγμα το STARTTLS στο ηλεκτρονικό ταχυδρομείο, και να ζητήσει από τον διακομιστή να μεταχειριστεί την σύνδεση ως TLS. Μόλις ο πελάτης και ο διακομιστής συμφωνήσουν να χρησιμοποιήσουν TLS, συμφωνούν σε μία σύνδεση με πολλαπλές καταστάσεις, χρησιμοποιώντας την διαδικασία χειραψίας. Κατά την διάρκεια της χειραψίας, ο πελάτης και ο διακομιστής συμφωνούν σε διάφορες παραμέτρους που θα χρησιμοποιηθούν για να επιβεβαιωθεί η ασφάλεια της σύνδεσης: Η χειραψία ξεκινάει όταν ένας πελάτης συνδέεται σε έναν διακομιστή που υποστηρίζει TLS και αιτείται μια ασφαλή σύνδεση, παρουσιάζοντας μια λίστα με κρυπτογραφήματα, καθώς και μία λίστα με κρυπτογραφικές συναρτήσεις κατακερματισμού που ο ίδιος υποστηρίζει. Από αυτήν την λίστα, ο διακομιστής επιλέγει έναν αλγόριθμο κρυπτογράφισης και μια κρυπτογραφική συνάρτηση κατακερματισμού που και ο ίδιος υποστηρίζει και ενημερώνει τον πελάτη για αυτήν την απόφαση. Ο διακομιστής συνήθως στέλνει πίσω και κάποιο στοιχείο για να επιβεβαιώσει την ταυτότητα του, συνήθως στην μορφή ενός ψηφιακού πιστοποιητικού. Το πιστοποιητικό αυτό περιέχει το όνομα του διακομιστή, την έμπιστη Αρχή Πιστοποίησης (CA), καθώς και το δημόσιο κλειδί του για χρήση σε πράξεις με κρυπτογράφηση δημόσιου κλειδιού. Ο πελάτης στην συνέχεια επιβεβαιώνει την εγκυρότητα του ψηφιακού πιστοποιητικού πριν προχωρήσει. Για την δημιουργία του κλειδιού συνεδρίας που θα χρησιμοποιηθεί για την ασφάλιση της σύνδεσης, ο πελάτης είτε: κρυπτογραφεί έναν τυχαίο αριθμό με το δημόσιο κλειδί του διακομιστή και στέλνει το αποτέλεσμα στον διακομιστή (το οποίο μπορεί πλέον να δει μόνο ο διακομιστής, χάρη στο ιδιωτικό κλειδί). Έτσι, και τα δύο μέρη της σύνδεσης χρησιμοποιούν έπειτα αυτόν τον τυχαίο αριθμό για να δημιουργήσουν ένα μοναδικό κλειδί συνεδρίας το οποίο θα χρησιμοποιήσουν αργότερα για κρυπτογράφηση και αποκρυπτογράφηση των δεδομένων σε αυτήν την συνεδρία. χρησιμοποιεί ανταλλαγή κλειδιών Diffie-Hellman για να δημιουργήσει με ασφάλεια ένα τυχαίο και μοναδικό κλειδί συνεδρίας για την κρυπτογράφηση και αποκρυπτογράφηση δεδομένων το οποίο έχει επίσης την ιδιότητα του forward secrecy: αν το ιδιωτικό κλειδί του διακομιστή κλαπεί στο μέλλον, δεν μπορεί να χρησιμοποιηθεί για να αποκρυπτογραφηθεί η τρέχουσα συνεδρία, ακόμα και αν αυτή καταγραφεί πλήρως από κάποιον τρίτο.Σε αυτό το σημείο τελειώνει η χειραψία και αρχίζει η ασφαλής σύνδεση, της οποίας τα δεδομένα κρυπτογραφούνται και αποκρυπτογραφούνται με το κλειδί συνεδρίας μέχρι να τερματιστεί η σύνδεση. Αν οποιοδήποτε από τα παραπάνω βήματα αποτύχει, η χειραψία TLS αποτυγχάνει, και η σύνδεση δεν δημιουργείται. Αρχικές έρευνες σχετικά με την ασφάλεια συνδέσεων δικτύου περιείχαν το API για Ασφαλή Προγραμματισμό Δικτύου (Secure Network Programming / SNP), και το 1993 εξερεύνησαν την πιθανότητα να υπάρχει ένα API για ασφαλείς μεταφορές μέσω δικτύου, πολύ κοντινό με αυτό των Berkeley sockets, με σκοπό την ευκολότερη χρήση του σε ήδη υπάρχουσες εφαρμογές με ανάγκες σε ασφάλεια. Η Netscape Communications ανέπτυξε την αρχική έκδοση των πρωτοκόλλων SSL. Η έκδοση 1.0 δεν δημοσιεύτηκε ποτέ λόγω πολύ μεγάλων κενών ασφαλείας στο πρωτόκολλο. Η έκδοση 2.0 όμως, δημοσιεύτηκε τον Φεβρουάριο του 1995, και "περιείχε πληθώρα κενών ασφαλείας που εν τέλη οδήγησαν στον σχεδιασμό του SSL 3.0". Δημοσιευμένο το 1996, το SSLv3 ήταν το επανασχεδιασμένο πρωτόκολλο του μηχανικού Paul Kocher, ο οποίος δούλεψε μαζί με του μηχανικούς της Netscape Communications Phil Karlton και Alan Freier, και είχε μια πρώτυπη υλοποίηση από τον Christopher Allen και τον Tim Dierks της Consensus Development. Οι νεότερες εκδόσεις του SSL/TLS είναι βασισμένες στο SSL v3.0. Το πρόχειρο προσδιοριστικό έγγραφο του 1996, δημοσιεύτηκε από το IETF σαν ιστορικό ντοκουμέντο στο RFC 6101. Ο Δρ. Taher Elgamal, επικεφαλής επιστήμονας στην Netscape Communications από το 1995 μέχρι το 1998, είναι γνωστός ως ο "πατέρας του SSL". Από το 2014, η έκδοση 3.0 του SSL δεν θεωρείται ασφαλής καθώς είναι ευπαθής στην επίθεση POODLE που επηρεάζει όλους τους Κρυπτογραφικούς Αλγόριθμους Δέσμης στο SSL, και το RC4, τον μόνο μη κρυπτογραφικό αλγόριθμο δέσμης που υποστηρίζει το SSL 3.0. Το SSL 2.0 απαγορεύτηκε και θεωρήθηκε μη-ασφαλές το 2011, στο RFC 6176. Το SSL 3.0 θεωρήθηκε μη-ασφαλές τον Ιούνιο του 2015, με το RFC 7568. Το TLS 1.0 πρώτα ορίστηκε στο RFC 2246 τον Ιανουάριο του 1999 ως μια αναβάθμιση του SSL 3.0, και γράφτηκε από τον Christopher Allen και τον Tim Dierks της Consensus Development. Σύμφωνα με τον ορισμό του στο RFC, "οι διαφορές μεταξύ αυτού του πρωτοκόλλου και του SSL 3.0 δεν είναι πολύ μεγάλες, αλλά είναι αρκετά σημαντικές για να σταματήσει η διαλειτουργικότητα μεταξύ του TLS 1.0 και του SSL 3.0". Το TLS 1.0 περιλαμβάνει έναν μηχανισμό με τον οποίο μια σύνδεση μπορεί να υποβαθμιστεί σε SSL 3.0, μειώνοντας έτσι την ασφάλεια που παρέχει. Το TLS 1.1 ορίστηκε στο RFC 4346 τον Απρίλιο του 2006. Είναι η αναβάθμιση της έκδοσης 1.0 του TLS. Οι μεγαλύτερες αλλαγές σε αυτήν την έκδοση περιλαμβάνουν: Προστασία έναντι επιθέσεων Cipher-block Chaining (CBC). Το προαιρετικό αρχικοποιητικό διάνυσμα είναι πλέον υποχρεωτικό. Έγιναν αλλαγές στην διαχείριση των χαρακτήρων συμπλήρωσης. Υποστήριξη για καταχώρηση παραμέτρων IANA. Το TLS 1.2 ορίστηκε με το RFC 5246 τον Αύγουστο του 2008. Βασίζεται στην προηγούμενη έκδοση, TLS 1.1. Οι μεγαλύτερες διαφορές περιλαμβάνουν: Ο συνδυασμός MD5-SHA-1 στην γεννήτρια ψευδοτυχαίων αριθμών αντικαταστάθηκε με τον αλγόριθμο SHA-256, με την δυνατότητα να χρησιμοποιηθούν και αλγόριθμοι κρυπτογράφησης για αυτόν τον σκοπό.