Δίκτυα Υπολογιστών Κεφάλαιο 10 – Πρωτόκολλο SSH (secure shell)
Δημοσιεύτηκε από τον/την codebrakes στις
Δίκτυα Υπολογιστών
Κεφάλαιο 10 - Πρωτόκολλο SSH (secure shell)
Τι είναι το πρωτόκολλο SSH (Secure Shell)
Το SSH είναι ένα πρωτόκολλο που παρέχει ασφαλή απομακρυσμένη πρόσβαση σε υπολογιστές πάνω από ένα μη ασφαλές δίκτυο. Η υλοποίηση του SSH το καθιστά απλό και φθηνό. Το SSH1 παρείχε ασφαλής απομακρυσμένη πρόσβαση και δημιουργήθηκε με σκοπό να αντικαταστήσει το TELNET και άλλα σχήματα τα οποία δεν ήταν αρκετά ασφαλή. Το πρωτόκολλο SSH βασίζεται στο μοντέλο πελάτη – εξυπηρετητή (client – server) και χρησιμοποιείται για να προστατέψει δικτυακές λειτουργίες όπως μεταφοράς αρχείου και ηλεκτρονικού ταχυδρομείου. Η νεότερη έκδοση SSH2 παρέχει, ένα τυποποιημένο ορισμό και βελτιώνει κατά πάρα πολύ το SSH1. Το SSH είναι ευρέως διαδεδομένο στα περισσότερα ανοικτά συστήματα και έχει καθιερωθεί ως η κυριότερη ή η πιο συχνή επιλογή για απομακρυσμένη πρόσβαση μεταξύ υπολογιστικών συστημάτων. Το SSH είναι οργανωμένο σε τρία πρωτόκολλα όπου τρέχουν πάνω από το TCP και τα οποία είναι:
- Το πρωτόκολλο επιπέδου μεταφοράς SSH (SSH Transport layer protocol) παρέχει πιστοποίηση ταυτότητας του εξυπηρετητή (server), ακεραιότητα των δεδομένων και εξασφάλιση του απόρρητου της συναλλαγής. Προαιρετικά μπορεί να εφαρμόσει και συμπίεση δεδομένων. Τυπικά τρέχει από μια TCP/IP σύνδεση.
- Το πρωτόκολλο πιστοποίησης χρήστη SSH (SSH User Authentication protocol) πιστοποιεί την ταυτότητα του πελάτη (client) ως προς τον διακομιστή (server). Τρέχει πάνω από το επίπεδο μεταφοράς.
- Το πρωτόκολλο σύνδεσης SSH (SSH Connection Protocol) πολυπλέκει το κρυπτογραφημένο φυσικό κανάλι σε αρκετά λογικά κανάλια και τρέχει πάνω από το User Authentication πρωτόκολλο.
Δημόσια και ιδιωτικά κλειδιά στο SSH
Κάθε πελάτης (client) και εξυπηρετητής (server) πρέπει να έχουν στην κατοχή τους ένα ζευγάρι ιδιωτικού – δημόσιου κλειδιού έτσι ώστε να μπορεί να είναι εφικτή η επαλήθευση των ταυτοτήτων τους μεταξύ του. Επιτρέπεται να έχει είτε ο πελάτης (client) είτε ο διακομιστής (server) περισσότερα από ένα ζευγάρια κλειδιών, όταν βέβαια χρησιμοποιούνται με διαφορετικούς αλγορίθμους. Επίσης η από κοινού χρήση ζεύγους κλειδιών από πολλούς διακομιστές (servers) δεν απαγορεύεται. Για να μπορέσει ο πελάτης (client) να επαληθεύσει με εύκολο τρόπο την ταυτότητα ενός διακομιστή (server) είναι απαραίτητο να γνωρίζει το δημόσιο κλειδί που αντιστοιχεί στον διακομιστή (server) που επιθυμεί να πραγματοποιήσει συνδιαλλαγή πληροφοριών. Υπάρχουν δύο διαφορετικά μοντέλα που εξασφαλίζουν την προϋπόθεση αυτή:
- Στο πρώτο μοντέλο ο πελάτης έχει αποθηκευμένα σε μια τοπική βάση δεδομένων τα ονόματα των servers και τα δημόσια κλειδιά που συσχετίζονται με αυτούς. Αυτή η μέθοδος δεν απαιτεί μια κεντρική διαχείριση κλειδιών από τρίτους το μειονέκτημα είναι η διαχείριση και συντήρηση της βάσης δεδομένων.
- Στο δεύτερο μοντέλο εμπλέκεται μια έμπιστη αρχή πιστοποίησης (Certification Authority – CA) όπου πιστοποιεί τα δημόσια κλειδιά των servers και αν είναι έμπιστοι ή όχι. Το πρόγραμμα του πελάτη γνωρίζει μόνο το δημόσιο κλειδί της αρχής πιστοποίησης και μπορεί να επιβεβαιώσει την εγκυρότητα των κλειδιών που έχουν πιστοποιηθεί από αυτήν. Ο πελάτης δεν χρειάζεται να έχει μια βάση δεδομένων καθότι χρειάζεται να αποθηκεύσει μόνο ένα κλειδί αλλα το μειονέκτημα είναι ότι η πιστοποίηση κάθε κλειδιού είναι χρονοβόρα και περίπλοκη διαδικασία.
Πρωτόκολλο επιπέδου μεταφοράς SSH
Το πρωτόκολλο επιπέδου μεταφοράς του SSH όπως αναφέραμε και προηγουμένως παρέχει ισχυρή κρυπτογράφηση, πιστοποίηση του εξυπηρετητή (server) και ακεραιότητα των δεδομένων. Σε αυτό το επίπεδο λαμβάνει χώρα η διαπραγμάτευση των αλγορίθμων ανταλλαγής κλειδιών, συμμετρικής κρυπτογράφησης, ασύμμετρης κρυπτογράφησης, hash, ο κώδικας αυθεντικοποίησης μηνύματος (Message Authentication Code – MAC). Η πιστοποίηση ταυτότητας σε αυτό το επίπεδο αναφέρεται μόνο σε πιστοποίηση υπολογιστικών συστημάτων και όχι χρηστών. Το πρωτόκολλο αυθεντικοποίησης χρήστη (User Authentication Protocol – UAP) αναλαμβάνει την επιβεβαίωση της ταυτότητας των χρηστών. Έχει σχεδιαστεί για να είναι απλό, ευέλικτο, να επιτρέπει την διαπραγμάτευση παραμέτρων και να χρησιμοποιεί έναν ελάχιστο αριθμό απαραιτήτων μηνυμάτων για την εγκαθίδρυση σύνδεσης. Για στα περισσότερα περιβάλλοντα έχει υπολογιστεί ότι ένας αριθμός δύο ανταλλαγών (round-trips) είναι αρκετός για πλήρη επικοινωνία όλων των απαραίτητων πληροφοριών. Η χειρότερη περίπτωση είναι τρία round – trips.
Εγκατάσταση σύνδεσης στο πρωτόκολλο επιπέδου μεταφοράς SSH
Ανταλλαγή πακέτων στο πρωτόκολλο επιπέδου μεταφοράς SSH
- Την διαδικασία ξεκινά ο πελάτης (client), ενώ ο διακομιστής (server) χρησιμοποιεί την θύρα 22 για να ανταποκρίνεται στις επερχόμενες κλείσεις για σύνδεση.
- Όταν επιτευχθεί η σύνδεση μεταξύ των δύο οντοτήτων, στην συνέχεια πρέπει να στείλουν μια ακολουθία χαρακτήρων που έχουν την μορφή:
- Ακολουθούμενη από χαρακτήρες αλλαγής γραμμής και επιστροφής του κέρσορα. Το μέγιστο μήκος αυτής της ακολουθίας είναι 255 χαρακτήρες συμπεριλαμβανομένων και χαρακτήρων ελέγχου.
- Ακολουθούμενη από χαρακτήρες αλλαγής γραμμής και επιστροφής του κέρσορα. Το μέγιστο μήκος αυτής της ακολουθίας είναι 255 χαρακτήρες συμπεριλαμβανομένων και χαρακτήρων ελέγχου.
Έστω οι χρήστες Α και Β θέλουν να επικοινωνήσουν με ασφάλεια. Συμφωνούν στην χρησιμοποίηση ίδιου αλγόριθμου κρυπτογράφησης καθώς και χρήση ίδιου και κοινού κλειδιού. Ο απλός συμμετρικός αλγόριθμος κρυπτογράφησης Caesar Cipher αλλάζει θέση στα γράμματα (ολίσθηση αλφάβητου) και το κλειδί είναι ο αριθμός θέσεων ολίσθησης.
Πλεονεκτήματα | Μειονεκτήματα |
Ταχύτεροι σε σχέση με άλλους αλγόριθμους ασύμμετρης κρυπτογραφίας | Δύσκολή ανταλλαγή κλειδιού χωρίς να το μάθει κάποιος τρίτος |
Μέγεθος κλειδιών |
Η μετάδοση μέσα από το δίκτυο δεν είναι ασφαλής |
Εύκολη βάση για κατασκευή άλλων μηχανισμών |
Πλεονεκτήματα και μειονεκτήματα συμμετρικών αλγορίθμων
Ασύμμετρη κρυπτογράφηση
Οι ασύμμετροι αλγόριθμοι ή αλγόριθμοι δημόσιου κλειδιού είναι σχεδιασμένοι έτσι ώστε το κλειδί που χρησιμοποιείται για την κρυπτογράφηση να είναι διαφορετικό από το κλειδί που χρησιμοποιείται για την αποκρυπτογράφηση. Πέρα από αυτό, το κλειδί αποκρυπτογράφησης δεν μπορεί να υπολογιστεί από το κλειδί κρυπτογράφησης. Οι αλγόριθμοι αυτοί καλούνται και “δημόσιου κλειδιού” γιατί το κλειδί κρυπτογράφησης μπορεί να δημοσιοποιηθεί. Ο καθένας μπορεί να κρυπτογραφήσει ένα μήνυμα με το δημόσιο κλειδί αλλά μόνο αυτός που διαθέτει το αντίστοιχο ιδιωτικό κλειδί μπορεί να το αποκρυπτογραφήσει. Παραδείγματα ασύμμετρων αλγορίθμων είναι οι RSA, ElGamal και DSA. Οι συμμετρικοί αλγόριθμοι είναι πολύ πιο γρήγοροι, εφαρμοσμένοι είτε σε υλικό είτε σε λογισμικό. από τους ασύμμετρους αλγόριθμους. Ως εκ τούτου οι συμμετρικοί αλγόριθμοι χρησιμοποιούνται για την κρυπτογράφηση του κυρίου μέρους των δεδομένων, ενώ οι αλγόριθμοι δημόσιου κλειδιού βρίσκουν κατάλληλη εφαρμογή σε πρωτόκολλα ανταλλαγής κλειδιών και ψηφιακών υπογραφών.
Στην παραπάνω εικόνα έχουμε την Alice η οποία επιθυμεί να στείλει δεδομένα προς τον Bob. Για να το κάνει λοιπόν αυτό χρησιμοποιεί το δημόσιο κλειδί του Bob για να κρυπτογραφήσει το αρχικό μήνυμα. Στην συνέχεια στέλνει τα κρυπτογραφημένα αυτά δεδομένα προς τον Bob. Στην συνέχεια αφού ο Bob λάβει τα κρυπτογραφημένα δεδομένα προκειμένου να διαβάσει το αρχικό μήνυμα της Alice θα αποκρυπτογραφήσει το μήνυμα με το δικό του ιδιωτικό κλειδί. Τα κρυπτογραφημένα δεδομένα (κρυπτογραφημένα με τον δημόσιο κλειδί του Bob) δεν μπορεί κανείς άλλος να τα αποκρυπτογραφήσει (ακόμη και να έχει το δημόσιο κλειδί, χρειάζεται το ιδιωτικό κλειδί του Bob που το έχει μόνο ο Bob).
Εδώ τίθεται ένα ερώτημα: Πως ο Bob γνωρίζει ότι τα δεδομένα που έλαβε κρυπτογραφημένα με το δημόσιο κλειδί του είναι από την Alice και όχι κάποιον τρίτο που την προσποιείται και απλά κατέχει το κλειδί του ;
- Κλειδί (Key): Στο τομέα της κρυπτογράφησης, το κλειδί είναι ένας ψηφιακός κωδικός (ένας σύνολο από bits) όπου χρησιμοποιείται για την κρυπτογράφηση και αποκρυπτογράφηση πληροφορίας. Προφανώς το κλειδί φυλάσσεται σε ασφαλές μέρος και είναι διαθέσιμο μόνο στα μέρη που επιτρέπεται να έχουν πρόσβαση στα δεδομένα.
- Δημόσιο Κλειδί (Public Key): Στην ασύμμετρη κρυπτογράφηση, για κάθε χρήστη χρησιμοποιούνται δύο κλειδιά, το δημόσιο και το ιδιωτικό. Η βασική ιδέα είναι ότι το δημόσιο το γνωρίζει καθένας, ενώ το ιδιωτικό μόνο ο χρήστης. Το δημόσιο κλειδί χρησιμοποιείται για να κλειδώνει (κρυπτογραφεί) ενώ το ιδιωτικό για να ξεκλειδώνει. Όποιος θέλει να μας στείλει κρυπτογραφημένα δεδομένα, χρησιμοποιεί το δημόσιο μας κλειδί για να τα κλειδώσει.
Η διαχείριση του κλειδιού είναι η διαδικασία παραγωγής, διανομής, επαλήθευσης, χρησιμοποίησης, ενημέρωσης, αποθήκευσης και καταστροφής κλειδιών σε ένα σύστημα κρυπτογράφησης. Η ασφαλής μέθοδος διαχείρισης των κλειδιών είναι πάρα πολύ σημαντική. Στην πράξη οι περισσότερες επιθέσεις σε συστήματα ασφαλείας έχουν ως στόχο τις διαδικασίες διαχείρισης των κλειδιών και όχι τους ίδιους τους αλγόριθμους. Οι αλγόριθμοι δημόσιου κλειδιού καθιστούν την διαχείριση πολύ πιο εύκολη. Το ιδιωτικό κλειδί δεν χρειάζεται να μεταδοθεί ποτέ. Βέβαια παρουσιάζεται ένα πρόβλημα ο κάθε χρήστης πρέπει να διαθέτει ένα δικό τους ζεύγος κλειδιών. Στα συστήματα που χρησιμοποιούν ασύμμετρη κρυπτογραφία χρειάζονται μέθοδοι διανομής και επαλήθευσης κλειδιών.
Συμμετρική Κρυπτογράφηση | Ασύμμετρη Κρυπτογράφηση |
Χρησιμοποιεί τον ίδιο αλγόριθμο και το ίδιο κλειδί για την κρυπτογράφηση/αποκρυπτογράφηση | Χρησιμοποιείτε ένας αλγόριθμος που χρειάζεται δύο διαφορετικά κλειδιά για κρυπτογράφηση / αποκρυπτογράφηση |
Ο αποστολέας και ο παραλήπτης πρέπει να γνωρίζουν τον αλγόριθμο και το κλειδί |
Ο αποστολέας Α κρυπτογραφεί το μήνυμα με το δημόσιο κλειδί του Β και του το στέλνει. Ο παραλήπτης Β αποκρυπτογραφεί το μήνυμα χρησιμοποιώντας το δικό του ιδιωτικό κλειδί. Τα κλειδιά του αποστολέα και του παραλήπτη πρέπει να συμφωνούν και όχι να είναι ίδια |
Το κλειδί πρέπει να είναι μυστικό | Το ιδιωτικό κλειδί πρέπει να κρατείται μυστικό |
Το μήνυμα χωρίς το κλειδί και τον αλγόριθμο είναι σχεδόν αδύνατο να αποκρυπτογραφηθεί |
Κάποιος που γνωρίζει τον αλγόριθμο, μερικά μηνύματα και το δημόσιο κλειδί δεν μπορεί να προσδιορίσει το ιδιωτικό κλειδί. Είναι λοιπόν πολύ δύσκολο να αποκρυπτογραφηθεί το μήνυμα. |
Κάποιος που γνωρίζει τον αλγόριθμο και μερικά μηνύματα δεν μπορεί να προσδιορίσει το κλειδί |
Σύγκριση συμμετρικής και ασύμμετρης κρυπτογραφίας
Διανομή κλειδιού
Οι συμμετρικοί αλγόριθμοι κρυπτογράφησης όπως είδαμε και στις προηγούμενες διαφάνειες απαιτούν τα δυο μέρη να μοιράζονται ένα κοινό μυστικό κλειδί. Το ερώτημα είναι πως το κλειδί αυτό θα διανεμηθεί με ασφάλεια καθότι υπάρχουν κίνδυνοι από τρίτα άτομα που προφανώς επιθυμούν να υποκλέψουν αυτό το κλειδί. Μια καλή λύση είναι η συχνή αλλαγή του μυστικού κλειδιού. Βέβαια η αποτυχία ενός ασφαλούς συστήματος οφείλεται αν καταφέρει να αποκτήσει πρόσβαση στο σύστημα διανομής κλειδιών. Τα δύο μέρη Α και Β έχουν τις εξής επιλογές για την διανομή μυστικού κλειδιού:
- Ο Α μπορεί να παραδώσει φυσικά το κλειδί (π.χ. σε usb stick)
- Μια τρίτη οντότητα να διανέμει αυτό το κλειδί από τον Α στον Β
- Αν οι Α και Β έχουν επικοινωνήσει προηγουμένως, μπορούν να χρησιμοποιήσουν το προηγούμενο κλειδί για να κρυπτογραφήσουν ένα νέο κλειδί.
- Αν οι Α και Β έχουν ασφαλείς επικοινωνίες με ένα τρίτο μέρος C, o C μπορεί να αναμεταδώσει το κλειδί αναμεσά στον Α και Β
Ιεραρχία Κλειδιών
Έχουμε τα εξής κλειδιά:
- Κλειδί συνόδου (Session Key): Είναι προσωρινό κλειδί και χρησιμοποιείται για κρυπτογράφηση των δεδομένων που μεταδίδονται μεταξύ χρηστών. Χρησιμοποιείται για μια μόνο λογική σύνοδο (session) και στην συνέχεια καταργείται.
- Γενικό κλειδί (master key): Χρησιμοποιείται για να κρυπτογραφεί τα κλειδιά συνόδου το οποίο το μοιράζεται ο χρήστης με το Κέντρο Διανομής Κλειδιών (Key Distribution Center – KDC).
Κέντρο Διανομής Κλειδιών (Key Distribution Center – KDC)
Στον τομέα της κρυπτογραφίας το κέντρο διανομής κλειδιών είναι ένα σύστημα το οποίο είναι υπεύθυνο για να παρέχει κλειδιά στους χρήστες ενός ασφαλούς δικτύου. Κάθε φορά που εγκαθιδρύεται μια σύνδεση μεταξύ δύο υπολογιστών που ανήκουν σε αυτό το δίκτυο στέλνουν μια αίτηση προς το Κέντρο Διανομής Κλειδιών για να τους παράγει κλειδιά προκειμένου να επιβεβαιώσουν και οι δύο την ταυτότητα τους μεταξύ τους.
Υποθέτουμε:
- Ο Α και το Κέντρο Διανομής Κλειδιών έχουν ένα κοινό κλειδί Ka (master key)
- Ο B και το Κέντρο Διανομής Κλειδιών έχουν ένα κοινό κλειδί Kb (master key).
- Ο A επιθυμεί να επικοινωνήσει με τον B.
- Το Κέντρο διανομής κλειδιών είναι έμπιστο και καλά προστατευμένο από εξωτερικές επιθέσεις.
- Ο Α στέλνει ένα αίτημα προς το Κέντρο Διανομής Κλειδιών για να του στείλει ένα κλειδί συνόδου (session key) έτσι ώστε να επικοινωνήσει με τον Β.
- Το Κέντρο Διανομής Κλειδιών απαντά με ένα μήνυμα κωδικοποιημένο με το γενικό κλειδί (master key) Ka.
- Ο Α αποθηκεύει το κλειδί συνόδου (session key) και προωθεί στον Β το κομμάτι του μηνύματος που έλαβε από Κέντρου Διανομής Κλειδιών όπου αναφέρεται στον Β.
- Σε αυτό το σημείο το κλειδί συνόδου (session key) έχει παραδοθεί με ασφάλεια από τον Α και τον Β.
- Στην πράξη τα Κέντρα Διανομής Κλειδιών έχουν ιεραρχική υλοποίηση το οποίο παρέχει τα εξής πλεονεκτήματα:
Ελαχιστοποίηση του κόστους διανομής των γενικών κλειδιών (master keys) λόγω του ότι οι περισσότερες συναλλαγές περιορίζονται σε κάποια περιοχή.
Ελαχιστοποίηση ζημιών σε περίπτωση που ένα Κέντρο διανομής κλειδιών καταστραφεί ή παραβιαστεί από τρίτο άτομο.
Συναρτήσεις κατακερματισμού (hash functions)
Οι μονόδρομες συναρτήσεις κατακερματισμού (one-way hash functions) αποτελούν θεμελιώδη στοιχεία για την ανάπτυξη των περισσότερων πρωτοκόλλων κρυπτογράφησης. Οι συναρτήσεις κατακερματισμού είναι συναρτήσεις οι οποίες δέχονται σαν είσοδο μια ακολουθία χαρακτήρων μεταβλητού μήκους και παράγουν ένα μήνυμα σταθερού μεγέθους (γενικά μικρότερο) που ονομάζεται τιμή σύνοψης (hash value). Οι μονόδρομες συναρτήσεις κατακερματισμού είναι συναρτήσεις οι οποίες δουλεύουν μόνο προς την μία κατεύθυνση: είναι εύκολο να υπολογιστεί μια τιμή σύνοψης για κάποιο δεδομένο μήνυμα αλλά είναι αδύνατο να υπολογιστεί το μήνυμα στο οποίο αντιστοιχεί μια συγκεκριμένη τιμή σύνοψης. Μία καλά σχεδιασμένη μονόδρομη συνάρτηση κατακερματισμού είναι επίσης ελεύθερη από συγκρούσεις (collision-free) δηλαδή είναι δύσκολο να βρεθούν δύο μηνύματα που δίνουν την ίδια τιμή σύνοψης. Οι μονόδρομες συναρτήσεις κατακερματισμού χρησιμοποιούνται κυρίως για εφαρμογές επαλήθευσης. Η τιμή σύνοψης αντιστοιχεί πλήρως, και αντιπροσωπεύει το αρχικό μήνυμα. Η αλλαγή έστω και ενός bit στο αρχικό μήνυμα αλλάζει κατά μέσο όρο τα μισά bits της τιμής σύνοψης.
Οι κώδικες πιστοποίησης μηνυμάτων (Message authentication codes, MACs) είναι μονόδρομες συναρτήσεις σύνοψης οι οποίες βασίζονται σε μυστικό κλειδί έτσι ώστε μόνο κάποιος που γνωρίζει το κλειδί αυτό μπορεί να επιβεβαιώσει την τιμή σύνοψης. Είναι πολύ χρήσιμοι για να παρέχουν αυθεντικότητα. Μία μονόδρομη συνάρτηση σύνοψης μπορεί να μετατραπεί σε κώδικα πιστοποίησης αν η τιμή σύνοψης κρυπτογραφηθεί με ένα συμμετρικό αλγόριθμο. Παραδείγματα μονόδρομων συναρτήσεων κατακερματισμού είναι οι MD4, MD5 και SHA.
Τελευταία Ενημέρωση: 10/10/2016