TLS

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Το Transport Layer Security (TLS) και ο προκάτοχος του, το Secure Sockets Layer (SSL), τα οποία συχνά αναφέρονται ως απλά "SSL", είναι Πρωτόκολλα Κρυπτογράφισης τα οποία παρέχουν Ασφάλεια Επικοινωνίας πάνω από ένα Δίκτυο Υπολογιστών[1]. Αρκετές από τις εκδόσεις του πρωτοκόλλου χρησιμοποιούνται σε εφαρμογές όπως η περιήγηση στον ιστό, το Ηλεκτρονικό ταχυδρομείο, η αποστολή τηλεομοιότυπων, τα Άμεσα Μηνύματα, καθώς και οι κλήσεις μέσω IP (VoIP). Οι ιστοσελίδες χρησιμοποιούν TLS για να διασφαλίσουν όλη την επικοινωνία μεταξή των εξυπηρετητών τους και τους περιηγητές ιστού.

Το πρωτόκολλο Transport Layer Security στοχεύει στο να προσφέρει ιδιωτικότητα και ακεραιότητα δεδομένων μεταξύ δύο εφαρμογών ηλεκτρονικών υπολογιστών που επικοινωνούν μεταξύ τους[1]. Όταν χρησιμοποιείται σε μία σύνδεση ανάμεσα σε έναν πελάτη (π.χ. έναν περιηγητή ιστού) και έναν εξυπηρετητή (π.χ. το wikipedia.org), η σύνδεση αυτή έχει μία ή περισσότερες ιδιότητες:

  • Η σύνδεση αυτή είναι "ιδιωτική" (ή "ασφαλής") χάρη στην συμμετρική κρυπτογραφία, η οποία χρησιμοποιείται για την κρυπτογράφηση των δεδομένων που αποστέλλονται. Τα κλειδιά για αυτήν την συμμετρική κρυπτογράφιση δημιουργούνται βάση ενός κοινού μυστικού το οποίο συμφωνείται στην αρχή της συνεδρίας (βλ. Χειραψία TLS) και είναι μοναδικά για κάθε σύνδεση. Ο πελάτης και ο εξυπηρετητής συμφωνούν στις λεπτομέρειες για τον αλγόριθμο κρυπτογράφισης και το κρυπτογραφικό κλειδί πριν μεταδωθεί το πρώτο byte πληροφορίας (βλ. Αλγόριθμος παρακάτω). Η συμφωνία αυτή για το κοινό μυστικό είναι ασφαλής (το μυστικό αυτό δεν είναι διαθέσιμο σε άτομα που παρακολουθούν την σύνδεση και δεν μπορεί να βρεθεί, ακόμα και αν ο επιτιθέμενος είναι στο μέσο της σύνδεσης) και αξιόπιστη (κανένας επιτιθέμενος δεν μπορεί να τροποποιήσει τα δεδομένα της σύνδεσης κατά την διάρκεια της χειραψίας χωρίς να γίνει αντιληπτός).
  • Η ταυτότητα των δύο μελών της επικοινωνίας μπορεί να αυθεντικοποιηθεί μέσω κρυπτογραφίας δημοσίου κλειδιού. Η αυθεντικοποίηση είναι προαιρετική, αλλά γενικά χρειάζεται για τουλάχιστον ένα από τα δύο άκρα της σύνδεσης (συνήθως τον εξυπηρετητή).
  • Η σύνδεση εγγυάται "ακεραιότητα δεδομένων" γιατί κάθε μήνυμα που αποστέλλεται περιλαμβάνει ένα μήνυμα ελέγχου ακεραιότητας χρησιμοποιώντας ένα κώδικα αυθεντικοποίησης μηνύματος για να ανιχνεύσει απώλεια ή τροποποίηση των δεδομένων κατά την διάρκεια της αποστολής[1].

Επιπλέον των παραπάνω ιδιοτήτων, προσεκτική παραμετροποίηση του TLS μπορεί να παρέχει επιπλέον ιδιότητες σχετικές με την ιδιωτικότητα, όπως Forward Secrecy, παρέχοντας την εγγύηση πως οποιαδήποτε μελλοντική κλοπή κρυπτογραφικών κλειδιών δεν μπορεί να βοηθήσει στην αποκρυπτογράφιση οποιασδήποτε προηγούμενης επικοινωνίας ασφαλισμένης με TLS από το παρελθόν[2].

Το 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[3] για την προσθήκη του πρωτοκόλλου HTTPS στο περιηγητή τους, Netscape Navigator.

Περιγραφή[Επεξεργασία | επεξεργασία κώδικα]

Εφαρμογές που ακολουθούν το Μοντέλο πελάτη-διακομιστή χρησιμοποιούν το πρωτόκολλο TLS για να επικοινωνήσουν μέσω ενός δικτύου αποφεύγοντας υποκλοπή των μηνυμάτων και την τροποποίηση τους από τρίτους.

Από την στιγμή που τα πρωτόκολλα μπορούν να λειτουργήσουν είτε με την χρήση, είτε χωρίς TLS (ή SSL), είναι απαραίτητο ο πελάτης να ειδοποιήσει τον διακομιστή για το ξεκίνημα μιας συνεδρίας TLS. Υπάρχουν δύο βασικοί τρόποι για να γίνει αυτό. Ο πρώτος είναι η χρήση μιας διαφορετικής πόρτας για τις συνδέσεις TLS, όπως για παράδειγμα η 443 για το HTTPS. Ο άλλος τρόπος είναι ο πελάτης να χρησιμοποιήσει έναν μηχανισμό που υποστηρίζει το ίδιο το πρωτόκολλο επικοινωνίας, όπως για παράδειγμα το STARTTLS στο ηλεκτρονικό ταχυδρομίο, και να ζητήσει από τον διακομιστή να μεταχειριστεί την σύνδεση ως TLS.

Μόλις ο πελάτης και ο διακομιστής συμφωνήσουν να χρησιμοποιήσουν TLS, συμφωνούν σε μία σύνδεση με πολλαπλές καταστάσεις, χρησιμοποιώντας την διαδικασία χειραψίας[4]. Κατά την διάρκεια της χειραψίας, ο πελάτης και ο διακομιστής συμφωνούν σε διάφορες παραμέτρους που θα χρησιμοποιηθούν για να επιβεβαιωθεί η ασφάλεια της σύνδεσης:

  • Η χειραψία ξεκινάει όταν ένας πελάτης συνδέεται σε έναν διακομιστή που υποστηρίζει TLS και αιτήται μια ασφαλή σύνδεση, παρουσιάζοντας μια λίστα με κρυπρογραφήματα, καθώς και μία λίστα με κρυπτογραφικές συναρτήσεις κατακερματισμού που ο ίδιος υποστηρίζει.
  • Από αυτήν την λίστα, ο διακομιστής επιλέγει έναν αλγόριθμο κρυπτογράφισης και μια κρυπτογραφική συνάρτηση κατακερματισμού που και ο ίδιος υποστηρίζει και ενημερώνει τον πελάτη για αυτήν την απόφαση.
  • Ο διακομιστής συνήθως στέλνει πίσω και κάποιο στοιχείο για να επιβεβαιώσει την ταυτότητα του, συνήθως στην μορφή ενός ψηφιακού πιστοποιητικού. Το πιστοποιητικό αυτό περιέχει το όνομα του διακομιστή, την έμπιστη Αρχή Πιστοποίησης (CA), καθώς και το δημόσιο κλειδί του για χρήση σε πράξεις με κρυπτογράφηση δημόσιου κλειδιού.
  • Ο πελάτης στην συνέχεια επιβεβαιώνει την εγγυρότητα του ψηφιακού πιστοποιητικού πριν προχωρήσει.
  • Για την δημιουργία του κλειδιού συνεδρίας που θα χρησιμοποιηθεί για την ασφάλιση της σύνδεσης, ο πελάτης είτε:
    • κρυπτογραφεί έναν τυχαίο αριθμό με το δημόσιο κλειδί του διακομιστή και στέλνει το αποτέλεσμα στον διακομιστή (το οποίο μπορεί πλέον να δει μόνο ο διακομιστής, χάρη στο ιδιωτικό κλειδί). Έτσι, και τα δύο μέρη της σύνδεσης χρησιμοποιούν έπειτα αυτόν τον τυχαίο αριθμό για να δημιουργήσουν ένα μοναδικό κλειδί συνεδρίας το οποίο θα χρησιμοποιήσουν αργότερα για κρυπτογράφηση και αποκρυπτογράφηση των δεδομένων σε αυτήν την συνεδρία.
    • χρησιμοποιεί ανταλλαγή κλειδιών Diffie-Hellman για να δημιουργήσει με ασφάλεια ένα τυχαίο και μοναδικό κλειδί συνεδρίας για την κρυπτογράφηση και αποκρυπτογράφηση δεδομένων το οποίο έχει επίσης την ιδιότητα του forward secrecy: αν το ιδιωτικό κλειδί του διακομιστή κλαπεί στο μέλλον, δεν μπορεί να χρησιμοποιηθεί για να αποκρυπτογραφηθεί η τρέχουσα συνεδρία, ακόμα και αν αυτή καταγραφεί πλήρως από κάποιον τρίτο.

Σε αυτό το σημείο τελειώνει η χειραψία και αρχίζει η ασφαλής σύνδεση, της οποίας τα δεδομένα κρυπτογραφούνται και αποκρυπτογραφούνται με το κλειδί συνεδρίας μέχρι να τερματιστεί η σύνδεση. Αν οποιοδήποτε από τα παραπάνω βήματα αποτύχει, η χειραψία TLS αποτυγχάνει, και η σύνδεση δεν δημιουργείται.

Ιστορία και ανάπτυξη[Επεξεργασία | επεξεργασία κώδικα]

Ορίστηκε
Πρωτόκολλο Έτος
SSL 1.0 Δ/Δ
SSL 2.0 1995
SSL 3.0 1996
TLS 1.0 1999
TLS 1.1 2006
TLS 1.2 2008
TLS 1.3 Αναμένεται

Ασφαλής Προγραμματισμός Δικτύου[Επεξεργασία | επεξεργασία κώδικα]

Αρχικές έρευνες σχετικά με την ασφάλεια συνδέσεων δικτύου περιείχαν το API για Ασφαλή Προγραμματισμό Δικτύου (Secure Network Programming / SNP), και το 1993 εξερεύνησαν την πιθανότητα να υπάρχει ένα API για ασφαλείς μεταφορές μέσω δικτύου, πολύ κοντινό με αυτό των Berkeley sockets, με σκοπό την ευκολότερη χρήση του σε ήδη υπάρχουσες εφαρμογές με ανάγκες σε ασφάλεια[5].

SSL 1.0, 2.0, και 3.0[Επεξεργασία | επεξεργασία κώδικα]

Η Netscape Communications ανέπτυξε την αρχική έκδοση των πρωτοκόλλων SSL[6]. Η έκδοση 1.0 δεν δημοσιεύτηκε ποτέ λόγω πολύ μεγάλων κενών ασφαλείας στο πρωτόκολλο. Η έκδοση 2.0 όμως, δημοσιεύτηκε τον Φεβρουάριο του 1995, και "περιείχε πληθώρα κενών ασφαλείας που εν τέλη οδήγησαν στον σχεδιασμό του SSL 3.0"[7]. Δημοσιευμένο το 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"[8][9].

Από το 2014, η έκδοση 3.0 του SSL δεν θεωρείται ασφαλής καθώς είναι ευπαθής στην επίθεση POODLE που επηρεάζει όλους τους Κρυπτογραφικούς Αλγόριθμους Δέσμης στο SSL, και το RC4, τον μόνο μη κρυπτογραφικό αλγόριθμο δέσμης που υποστηρίζει το SSL 3.0[10].

Το SSL 2.0 απαγορεύτηκε και θεωρήθηκε μη-ασφαλές το 2011, στο RFC 6176.

Το SSL 3.0 θεωρήθηκε μη-ασφαλές τον Ιούνιο του 2015, με το RFC 7568.

TLS 1.0[Επεξεργασία | επεξεργασία κώδικα]

Το 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, μειώνοντας έτσι την ασφάλεια που παρέχει[11].

TLS 1.1[Επεξεργασία | επεξεργασία κώδικα]

Το TLS 1.1 ορίστηκε στο RFC 4346 τον Απρίλιο του 2006[12]. Είναι η αναβάθμιση της έκδοσης 1.0 του TLS. Οι μεγαλύτερες αλλαγές σε αυτήν την έκδοση περιλαμβάνουν:

TLS 1.2[Επεξεργασία | επεξεργασία κώδικα]

Το TLS 1.2 ορίστηκε με το RFC 5246 τον Αύγουστο του 2008. Βασίζεται στην προηγούμενη έκδοση, TLS 1.1. Οι μεγαλύτερες διαφορές περιλαμβάνουν:


  1. 1,0 1,1 1,2 T. Dierks; E. Rescorla (August 2008). «The Transport Layer Security (TLS) Protocol, Version 1.2». //tools.ietf.org/html/rfc5246. 
  2. SSL: Intercepted today, decrypted tomorrow, Netcraft, 2013-06-25.
  3. A. Freier; P. Karlton; P. Kocher (August 2011). «The Secure Sockets Layer (SSL) Protocol Version 3.0». //tools.ietf.org/html/rfc6101. 
  4. "SSL/TLS in Detail". Microsoft TechNet. Updated July 31, 2003.
  5. Thomas Y. C. Woo, Raghuram Bindignavle, Shaowen Su and Simon S. Lam, SNP: An interface for secure network programming Proceedings USENIX Summer Technical Conference, June 1994
  6. «THE SSL PROTOCOL». Netscape Corporation. 2007. Αρχειοθετήθηκε από το πρωτότυπο στις 14 June 1997. https://web.archive.org/web/19970614020952/http://home.netscape.com/newsref/std/SSL.html. 
  7. Rescorla 2001
  8. Messmer, Ellen. «Father of SSL, Dr. Taher Elgamal, Finds Fast-Moving IT Projects in the Middle East». Network World. http://www.networkworld.com/news/2012/120412-elgamal-264739.html. Ανακτήθηκε στις 30 May 2014. 
  9. Greene, Tim. «Father of SSL says despite attacks, the security linchpin has lots of life left». Network World. http://www.networkworld.com/news/2011/101111-elgamal-251806.html. Ανακτήθηκε στις 30 May 2014. 
  10. «POODLE: SSLv3 vulnerability (CVE-2014-3566)». https://access.redhat.com/articles/1232123. Ανακτήθηκε στις 21 October 2014. 
  11. 11,0 11,1 Polk, Tim; McKay, Terry; Chokhani, Santosh (April 2014). «Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations». National Institute of Standards and Technology, σ. 67. http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf. Ανακτήθηκε στις 2014-05-07. 
  12. Dierks, T.; E. Rescorla (April 2006). «The Transport Layer Security (TLS) Protocol Version 1.1, RFC 4346». //tools.ietf.org/html/rfc5246#ref-TLS1.1. 
  13. T. Dierks, E. Rescorla (August 2008). «Finished», sec. 7.4.9. RFC 5246. https://tools.ietf.org/html/rfc5246#section-7.4.9.