Πρόλογος

Τo secure shell (SSH) είναι ένα πρωτόκολλο ασφαλούς απομακρυσμένης πρόσβασης κι άλλων ασφαλών υπηρεσιών που εφαρμόζεται πάνω από σε δίκτυα που απαιτούν ασφάλεια. Σε αυτό το tutorial θα περιγράψουμε τεχνικές κρυπτογράφησης και επιπλέον πως το πρωτόκολλο SSH επιτυγχάνει ασφαλή επικοινωνία. Το SSH παρέχει επαρκή κρυπτογράφηση, πιστοποίηση του διακομιστή (server) και ακεραιότητα δεδομένων. Συνεπώς, οι μέθοδοι ανταλλαγής κλειδιών (key exchange), αλγόριθμου δημόσιου κλειδιού (public key algorithm), συμμετρικής κρυπτογράφησης (symmetric encryption), πιστοποίησης μνήματος (message authentication algorithm) και συνάρτησης κατακερματισμού είναι απαραίτητες και θα τις εξηγήσουμε παρακάτω.


Τι είναι η κρυπτογράφηση και τι η αποκρυπτογράφηση

Διαδικασία κρυπτογράφησης/αποκρυπτογράφησης

  • Κρυπτογράφηση (Encryption): Κρυπτογράφηση είναι η διαδικασία κατά την οποία τα αρχικά δεδομένα (γνωστά και ως plaintext) μετατρέπονται σε μια κωδικοποιημένη μορφή (κρυπτόγραμμα) η οποία δεν μπορεί πλέον να γίνει κατανοητή χωρίς να αποκρυπτογραφηθεί. Η κρυπτογράφηση γίνεται με τη βοήθεια αλγορίθμου, το αποτέλεσμα του οποίου μπορεί να αντιστραφεί ώστε να παράγει ξανά τα αρχικά δεδομένα εισόδου. Για την κρυπτογράφηση και την αποκρυπτογράφηση χρησιμοποιείται το κλειδί.

  • Αποκρυπτογράφηση (Decryption): Αποκρυπτογράφηση είναι η διαδικασία κατά την οποία το κωδικοποιημένο μήνυμα αποκρυπτογραφείται έτσι ώστε να μπορέσει να διαβαστεί από ένα έμπιστο άτομο. Ο αλγόριθμος δέχεται ως είσοδο κρυπτογραφημένα δεδομένα (κρυπτόγραμμα) και με τη βοήθεια κάποιου κλειδιού (το οποίο προφανώς είναι διαθέσιμο μόνο σε εξουσιοδοτημένα άτομα) τα μετατρέπει ξανά στα κανονικά δεδομένα. Τα δεδομένα πλέον δεν είναι κωδικοποιημένα και μπορούν να χρησιμοποιηθούν κανονικά.

Κρυπτογράφηση

Η ραγδαία ανάπτυξη της ψηφιακής επικοινωνίας όπως για παράδειγμα το διαδίκτυο ή ένα δίκτυο υπολογιστών κλπ μας οδήγησαν στην ανάγκη για περαιτέρω ασφάλεια των συστημάτων μας από μη έμπιστα πρόσωπα. Οι πέντε βασικές υπηρεσίες ασφαλείας που μπορούν να υποστηριχθούν σε ανοικτά συστήματα είναι:

  1. η γνησιότητα χρηστών και πληροφοριών (authentication)

  2. ο έλεγχος πρόσβασης (access control)

  3. η εμπιστευτικότητα (confidentiality)

  4. η ακεραιότητα των δεδομένων (data integrity)

  5. η μη δυνατότητα αποκήρυξης γεγονότων που έχουν συμβεί (non-repudiation)

Συμμετρική κρυπτογράφηση

Στην συμμετρική κρυπτογραφία, ο αποστολέας και ο παραλήπτης ενός μηνύματος γνωρίζουν και χρησιμοποιούν ένα κοινό κλειδί για κρυπτογράφηση / αποκρυπτογράφηση το οποίο λέγεται μυστικό κλειδί. Ο αποστολέας λοιπόν χρησιμοποιεί αυτό το μυστικό κλειδί για να κρυπτογραφήσει το μήνυμα και ο παραλήπτης χρησιμοποιεί το ίδιο μυστικό κλειδί για να αποκρυπτογραφήσει το μήνυμα. Η ασφαλής επικοινωνία μεταξύ δύο χρηστών με τη χρήση ενός συμμετρικού αλγορίθμου κρυπτογράφησης απαιτεί την ύπαρξη των ακόλουθων προϋποθέσεων:

  1. Δυνατότητα χρήσης του ίδιου αλγορίθμου.

  2. Χρήση ενός μυστικού κλειδιού το οποίο γνωρίζουν μόνο ο αποστολέας και ο παραλήπτης.

  3. Ύπαρξη ενός ασφαλούς καναλιού για τη διανομή του κλειδιού.

Παράδειγμα συμμετρικής κρυπτογράφησης

Έστω οι χρήστες Α και Β θέλουν να επικοινωνήσουν με ασφάλεια. Συμφωνούν στην χρησιμοποίηση ίδιου αλγόριθμου κρυπτογράφησης καθώς και χρήση ίδιου και κοινού κλειδιού. Ο απλός συμμετρικός αλγόριθμος κρυπτογράφησης Caesar Cipher αλλάζει θέση στα γράμματα (ολίσθηση αλφάβητου) και το κλειδί είναι ο αριθμός θέσεων ολίσθησης.


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

Μέγεθος κλειδιών
Η μετάδοση μέσα από το δίκτυο δεν είναι ασφαλής

Εύκολη βάση για κατασκευή άλλων μηχανισμών

Πλεονεκτήματα και μειονεκτήματα συμμετρικών αλγορίθμων

Ασύμμετρη κρυπτογράφηση

Οι ασύμμετροι αλγόριθμοι ή αλγόριθμοι δημόσιου κλειδιού είναι σχεδιασμένοι έτσι ώστε το κλειδί που χρησιμοποιείται για την κρυπτογράφηση να είναι διαφορετικό από το κλειδί που χρησιμοποιείται για την αποκρυπτογράφηση. Πέρα από αυτό, το κλειδί αποκρυπτογράφησης δεν μπορεί να υπολογιστεί από το κλειδί κρυπτογράφησης. Οι αλγόριθμοι αυτοί καλούνται και "δημόσιου κλειδιού" γιατί το κλειδί κρυπτογράφησης μπορεί να δημοσιοποιηθεί. Ο καθένας μπορεί να κρυπτογραφήσει ένα μήνυμα με το δημόσιο κλειδί αλλά μόνο αυτός που διαθέτει το αντίστοιχο ιδιωτικό κλειδί μπορεί να το αποκρυπτογραφήσει. Παραδείγματα ασύμμετρων αλγορίθμων είναι οι RSA, ElGamal και DSA. Οι συμμετρικοί αλγόριθμοι είναι πολύ πιο γρήγοροι, εφαρμοσμένοι είτε σε υλικό είτε σε λογισμικό. από τους ασύμμετρους αλγόριθμους. Ως εκ τούτου οι συμμετρικοί αλγόριθμοι χρησιμοποιούνται για την κρυπτογράφηση του κυρίου μέρους των δεδομένων, ενώ οι αλγόριθμοι δημόσιου κλειδιού βρίσκουν κατάλληλη εφαρμογή σε πρωτόκολλα ανταλλαγής κλειδιών και ψηφιακών υπογραφών.

Παράδειγμα ασύμμετρης κρυπτογράφησης

Στην παραπάνω εικόνα έχουμε την Alice η οποία επιθυμεί να στείλει δεδομένα προς τον Bob. Για να το κάνει λοιπόν αυτό χρησιμοποιεί το δημόσιο κλειδί του Bob για να κρυπτογραφήσει το αρχικό μήνυμα. Στην συνέχεια στέλνει τα κρυπτογραφημένα αυτά δεδομένα προς τον Bob. Στην συνέχεια αφού ο Bob λάβει τα κρυπτογραφημένα δεδομένα προκειμένου να διαβάσει το αρχικό μήνυμα της Alice θα αποκρυπτογραφήσει το μήνυμα με το δικό του ιδιωτικό κλειδί. Τα κρυπτογραφημένα δεδομένα (κρυπτογραφημένα με τον δημόσιο κλειδί του Bob) δεν μπορεί κανείς άλλος να τα αποκρυπτογραφήσει (ακόμη και να έχει το δημόσιο κλειδί, χρειάζεται το ιδιωτικό κλειδί του Bob που το έχει μόνο ο Bob).

Εδώ τίθεται ένα ερώτημα: Πως ο Bob γνωρίζει ότι τα δεδομένα που έλαβε κρυπτογραφημένα με το δημόσιο κλειδί του είναι από την Alice και όχι κάποιον τρίτο που την προσποιείται και απλά κατέχει το κλειδί του ;


Η Alice κρυπτογραφεί τα δεδομένα με το ιδιωτικό κλειδί της. Ο Bob τα αποκρυπτογραφεί χρησιμοποιώντας το δημόσιο κλειδί της Alice και αν η αποκρυπτογράφηση είναι επιτυχής τότε ο Bob είναι σε θέση να γνωρίζει ότι τα δεδομένα τα έστειλε η Alice.

  • Κλειδί (Key): Στο τομέα της κρυπτογράφησης, το κλειδί είναι ένας ψηφιακός κωδικός (ένας σύνολο από bits) όπου χρησιμοποιείται για την κρυπτογράφηση και αποκρυπτογράφηση πληροφορίας. Προφανώς το κλειδί φυλάσσεται σε ασφαλές μέρος και είναι διαθέσιμο μόνο στα μέρη που επιτρέπεται να έχουν πρόσβαση στα δεδομένα.

  • Δημόσιο Κλειδί (Public Key): Στην ασύμμετρη κρυπτογράφηση, για κάθε χρήστη χρησιμοποιούνται δύο κλειδιά, το δημόσιο και το ιδιωτικό. Η βασική ιδέα είναι ότι το δημόσιο το γνωρίζει καθένας, ενώ το ιδιωτικό μόνο ο χρήστης. Το δημόσιο κλειδί χρησιμοποιείται για να κλειδώνει (κρυπτογραφεί) ενώ το ιδιωτικό για να ξεκλειδώνει. Όποιος θέλει να μας στείλει κρυπτογραφημένα δεδομένα, χρησιμοποιεί το δημόσιο μας κλειδί για να τα κλειδώσει.

Η διαχείριση του κλειδιού είναι η διαδικασία παραγωγής, διανομής, επαλήθευσης, χρησιμοποίησης, ενημέρωσης, αποθήκευσης και καταστροφής κλειδιών σε ένα σύστημα κρυπτογράφησης. Η ασφαλής μέθοδος διαχείρισης των κλειδιών είναι πάρα πολύ σημαντική. Στην πράξη οι περισσότερες επιθέσεις σε συστήματα ασφαλείας έχουν ως στόχο τις διαδικασίες διαχείρισης των κλειδιών και όχι τους ίδιους τους αλγόριθμους. Οι αλγόριθμοι δημόσιου κλειδιού καθιστούν την διαχείριση πολύ πιο εύκολη. Το ιδιωτικό κλειδί δεν χρειάζεται να μεταδοθεί ποτέ. Βέβαια παρουσιάζεται ένα πρόβλημα ο κάθε χρήστης πρέπει να διαθέτει ένα δικό τους ζεύγος κλειδιών. Στα συστήματα που χρησιμοποιούν ασύμμετρη κρυπτογραφία χρειάζονται μέθοδοι διανομής και επαλήθευσης κλειδιών.

Συμμετρική Κρυπτογράφηση Ασύμμετρη Κρυπτογράφηση
Χρησιμοποιεί τον ίδιο αλγόριθμο και το ίδιο κλειδί για την κρυπτογράφηση/αποκρυπτογράφηση Χρησιμοποιείτε ένας αλγόριθμος που χρειάζεται δύο διαφορετικά κλειδιά για κρυπτογράφηση / αποκρυπτογράφηση

Ο αποστολέας και ο παραλήπτης πρέπει να γνωρίζουν τον αλγόριθμο και το κλειδί
Ο αποστολέας Α κρυπτογραφεί το μήνυμα με το δημόσιο κλειδί του Β και του το στέλνει. Ο παραλήπτης Β αποκρυπτογραφεί το μήνυμα χρησιμοποιώντας το δικό του ιδιωτικό κλειδί. Τα κλειδιά του αποστολέα και του παραλήπτη πρέπει να συμφωνούν και όχι να είναι ίδια
Το κλειδί πρέπει να είναι μυστικό Το ιδιωτικό κλειδί πρέπει να κρατείται μυστικό
Το μήνυμα χωρίς το κλειδί και τον αλγόριθμο είναι σχεδόν αδύνατο να αποκρυπτογραφηθεί
Κάποιος που γνωρίζει τον αλγόριθμο, μερικά μηνύματα και το δημόσιο κλειδί δεν μπορεί να προσδιορίσει το ιδιωτικό κλειδί. Είναι λοιπόν πολύ δύσκολο να αποκρυπτογραφηθεί το μήνυμα.
Κάποιος που γνωρίζει τον αλγόριθμο και μερικά μηνύματα δεν μπορεί να προσδιορίσει το κλειδί

Σύγκριση συμμετρικής και ασύμμετρης κρυπτογραφίας

Διανομή κλειδιού

Οι συμμετρικοί αλγόριθμοι κρυπτογράφησης όπως είδαμε και στις προηγούμενες διαφάνειες απαιτούν τα δυο μέρη να μοιράζονται ένα κοινό μυστικό κλειδί. Το ερώτημα είναι πως το κλειδί αυτό θα διανεμηθεί με ασφάλεια καθότι υπάρχουν κίνδυνοι από τρίτα άτομα που προφανώς επιθυμούν να υποκλέψουν αυτό το κλειδί. Μια καλή λύση είναι η συχνή αλλαγή του μυστικού κλειδιού. Βέβαια η αποτυχία ενός ασφαλούς συστήματος οφείλεται αν καταφέρει να αποκτήσει πρόσβαση στο σύστημα διανομής κλειδιών. Τα δύο μέρη Α και Β έχουν τις εξής επιλογές για την διανομή μυστικού κλειδιού:

  1. Ο Α μπορεί να παραδώσει φυσικά το κλειδί (π.χ. σε usb stick)

  2. Μια τρίτη οντότητα να διανέμει αυτό το κλειδί από τον Α στον Β

  3. Αν οι Α και Β έχουν επικοινωνήσει προηγουμένως, μπορούν να χρησιμοποιήσουν το προηγούμενο κλειδί για να κρυπτογραφήσουν ένα νέο κλειδί.

  4. Αν οι Α και Β έχουν ασφαλείς επικοινωνίες με ένα τρίτο μέρος 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) έχει παραδοθεί με ασφάλεια από τον Α και τον Β

  • Στην πράξη τα Κέντρα Διανομής Κλειδιών έχουν ιεραρχική υλοποίηση το οποίο παρέχει τα εξής πλεονεκτήματα:

    1. Ελαχιστοποίηση του κόστους διανομής των γενικών κλειδιών (master keys) λόγω του ότι οι περισσότερες συναλλαγές περιορίζονται σε κάποια περιοχή

    2. Ελαχιστοποίηση ζημιών σε περίπτωση που ένα Κέντρο διανομής κλειδιών καταστραφεί ή παραβιαστεί από τρίτο άτομο.

KDC: Διαδικασία διανομής κλειδιών


Συναρτήσεις κατακερματισμού (hash functions)

Οι μονόδρομες συναρτήσεις κατακερματισμού (one-way hash functions) αποτελούν θεμελιώδη στοιχεία για την ανάπτυξη των περισσότερων πρωτοκόλλων κρυπτογράφησης. Οι συναρτήσεις κατακερματισμού είναι συναρτήσεις οι οποίες δέχονται σαν είσοδο μια ακολουθία χαρακτήρων μεταβλητού μήκους και παράγουν ένα μήνυμα σταθερού μεγέθους (γενικά μικρότερο) που ονομάζεται τιμή σύνοψης (hash value). Οι μονόδρομες συναρτήσεις κατακερματισμού είναι συναρτήσεις οι οποίες δουλεύουν μόνο προς την μία κατεύθυνση: είναι εύκολο να υπολογιστεί μια τιμή σύνοψης για κάποιο δεδομένο μήνυμα αλλά είναι αδύνατο να υπολογιστεί το μήνυμα στο οποίο αντιστοιχεί μια συγκεκριμένη τιμή σύνοψης. Μία καλά σχεδιασμένη μονόδρομη συνάρτηση κατακερματισμού είναι επίσης ελεύθερη από συγκρούσεις (collision-free) δηλαδή είναι δύσκολο να βρεθούν δύο μηνύματα που δίνουν την ίδια τιμή σύνοψης. Οι μονόδρομες συναρτήσεις κατακερματισμού χρησιμοποιούνται κυρίως για εφαρμογές επαλήθευσης. Η τιμή σύνοψης αντιστοιχεί πλήρως, και αντιπροσωπεύει το αρχικό μήνυμα. Η αλλαγή έστω και ενός bit στο αρχικό μήνυμα αλλάζει κατά μέσο όρο τα μισά bits της τιμής σύνοψης.

Οι κώδικες πιστοποίησης μηνυμάτων (Message authentication codes, MACs) είναι μονόδρομες συναρτήσεις σύνοψης οι οποίες βασίζονται σε μυστικό κλειδί έτσι ώστε μόνο κάποιος που γνωρίζει το κλειδί αυτό μπορεί να επιβεβαιώσει την τιμή σύνοψης. Είναι πολύ χρήσιμοι για να παρέχουν αυθεντικότητα. Μία μονόδρομη συνάρτηση σύνοψης μπορεί να μετατραπεί σε κώδικα πιστοποίησης αν η τιμή σύνοψης κρυπτογραφηθεί με ένα συμμετρικό αλγόριθμο. Παραδείγματα μονόδρομων συναρτήσεων κατακερματισμού είναι οι MD4, MD5 και SHA.

Παράδειγμα μονόδρομων συναρτήσεων κατακερματισμού


Τελευταία Ενημέρωση: 10/10/2016





Follow us

 ☰