Βασικές Έννοιες

5.10 S/KEY (Secure KEY), One-time Password System

5.10.1 Γενικά

Τα υπολογιστικά συστήματα καθημερινά απειλούνται από χιλιάδες εισβολείς που ανακαλύπτουν συνεχώς νέες, πιο εκλεπτυσμένες μεθόδους επίθεσης. Ένα από τα πιο συνηθισμένα είδη επίθεσης είναι η παράνομη καταγραφή της κυκλοφορίας σε καίρια σημεία του δικτύου και εκμετάλλευση των αποκτηθέντων πληροφοριών για την εξαγωγή μυστικών κωδικών για νόμιμους χρήστες. Η Bellcore έχει αναπτύξει ένα πρότυπο λογισμικό, το S/KEY, που αποτελεί ένα σύστημα παραγωγής κωδικών μίας χρήσης, για αντιμετωπίσει αυτό το είδος επίθεσης.

Το σύστημα S/KEY έχει αρκετά πλεονεκτήματα σε σχέση με άλλα συστήματα πιστοποίησης ταυτότητας. Κατ' αρχήν, ο κωδικός του χρήστη δεν ταξιδεύει ποτέ στο δίκτυο κατά την διάρκεια του login ή όταν εκτελούνται εντολές όπως οι passwd και η su του UNIX. Μυστικές, ευαίσθητες πληροφορίες δεν αποθηκεύονται πουθενά, ούτε στον υπολογιστή που χρησιμοποιεί ο χρήστης και οι αλγόριθμοι που εφαρμόζονται είναι ευρέως γνωστοί.

Η Bellcore πειραματίζεται με το σύστημα S/KEY εδώ και δύο χρόνια, το οποίο είναι διαθέσιμο στο Internet με anonymous ftp.

5.10.2 Εισαγωγή

Υπάρχει μια μεγάλη ποικιλία απειλών που μπορούμε να σκεφτούμε για ένα δίκτυο. Αυτές διαχωρίζονται σε εσωτερικές απειλές και σε εξωτερικές. Το S/KEY έχει αναπτυχθεί για καταπολεμήσει τις εξωτερικές απειλές, δηλαδή τις προσπάθειες για εισχώρηση σε ένα σύστημα υπολογιστών από πηγές εκτός των ορίων του συστήματος. Δεν ασχολείται με τα επιπρόσθετα μέτρα ασφαλείας που πρέπει να ληφθούν υπόψη για να εμποδιστούν νόμιμοι χρήστες να αποκτήσουν παραπάνω δικαιώματα από αυτά που δικαιούνται. Προστατεύει τους κωδικούς των χρηστών από τις passive attacks, επιθέσεις κατά τις οποίες ο πιθανός εισβολέας παρακολουθεί τις συναλλαγές νόμιμων χρηστών και συλλέγει κωδικούς και άλλες χρήσιμες πληροφορίες, που θα χρησιμοποιήσει αργότερα.

Το S/KEY μπορεί εύκολα και γρήγορα να προστεθεί σε σχεδόν όλα τα UNIX συστήματα, χωρίς να απαιτεί επιπλέον hardware και χωρίς να αποθηκεύει ευαίσθητες πληροφορίες. Μπορεί να χρησιμοποιηθεί σε "χαζά τερματικά" ("dumb terminals"), σε προσωπικούς υπολογιστές που έχουν εγκατεστημένα συμβατικά επικοινωνιακά προγράμματα, ή σε σταθμούς εργασίας (workstations). Είναι συμβατό με πιθανή εφαρμογή βασισμένη σε smart cards ή pocket calculators.

Στόχοι

Προστασία από Παθητικές Επιθέσεις (Eavesdropping)

Ο πρωταρχικός στόχος του συστήματος πιστοποίησης ταυτότητας S/KEY είναι η παροχή ολοκληρωμένης προστασίας στον μηχανισμό σύνδεσης (login mechanism) με απομακρυσμένους υπολογιστές απέναντι σε επιθέσεις παθητικού τύπου (passive attacks). Καμία πληροφορία δεν διασχίζει το δίκτυο που θα μπορούσε να χρησιμοποιηθεί από πιθανό εισβολέα για παράνομη πρόσβαση σε ανύποπτο χρόνο. Ακόμα και η παρακολούθηση πολλών συνδιαλέξεων του κάθε χρήστη, δεν παρέχει χρήσιμες πληροφορίες που θα βοηθούσαν μια προσπάθεια εισχώρησης στο σύστημα.

Ευκολία Χρήσης

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

Αυτόματη Λειτουργία

Το S/KEY είναι τόσο απλά στην λειτουργία ώστε οι διαδικασίες του μπορούν εύκολα να αυτοματοποιηθούν. Έτσι, για τον χρήστη, η σύνδεση με έναν άλλο υπολογιστή θα φαίνεται το ίδιο απλή και γρήγορη με την περίπτωση κωδικών πολλαπλών χρήσεων. Η παροχή αυτοματοποιημένης λειτουργίας έχει σαν αποτέλεσμα ότι το σύστημα παραμένει κρυφό και η χρήση του γίνεται χωρίς υποψία της ύπαρξής του.

Όχι Κρυφοί Αλγόριθμοι

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

Όχι Αποθηκευμένα Μυστικά

Η αποθήκευση κλειδιών ή κωδικών σε έναν υπολογιστή δεν είναι καλή πρακτική καθ' ότι το μηχάνημα μπορεί εύκολα να γίνει στόχος και μία ρήξη της ασφάλειας να έχει αντίκτυπο σε όλο το τοπικό δίκτυο. Όταν ένα κοινό αρχείο κωδικών χρησιμοποιείται για πολλές μηχανές, ο κίνδυνος γίνεται ακόμα μεγαλύτερος. Για αυτό το λόγο δεν αποθηκεύονται οι κωδικοί σε καμία από τις μηχανές του δικτύου.

5.10.3 Περιγραφή του S/KEY Συστήματος

Υπάρχουν δύο πλευρές στην λειτουργία του S/KEY. Στην πλευρά του απομακρυσμένου client, ο κατάλληλος μίας χρήσης κωδικός πρέπει να παραχθεί, ενώ από στην πλευρά του server, αυτός ο κωδικός πρέπει να επαληθευθεί.

Ο Αλγόριθμος του S/KEY

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

y = f (x)

Ο υπολογισμός του y δεδομένου του x είναι εύκολος και γρήγορος, αλλά η εύρεση του x δεδομένου του y είναι εξαιρετικά δύσκολη. Επίσης η εύρεση x' ώστε

y = f (x')

είναι αδύνατη, ακόμα και με δοκιμή πολλών τιμών x' μέχρι να βρεθεί η τιμή y. Εάν ο αριθμός των τιμών που πρέπει να δοκιμασθεί είναι πολύ μεγάλος, τότε η συνάρτηση είναι πρακτικά αδύνατο να αντιστραφεί. Η hash function που χρησιμοποιεί το S/KEY, έχει 264 διαφορετικές τιμές, αριθμός ασύλληπτα μεγάλος.

Σαν βάση του secure hash function που χρησιμοποιεί το S/KEY είναι ο αλγόριθμος MD4 Message Digest algorithm σχεδιασμένος από τον Ronald Rivest της εταιρείας RSA Data Security Inc. Ο MD4 δέχεται σαν είσοδο αυθαίρετο αριθμό bits και παράγει στην έξοδο 16 bytes πληροφορίας. Είναι γρήγορος και μέχρι τώρα πιστεύεται ότι είναι ασφαλής, δηλαδή έχει δεν υπάρχει τρόπος να βρεθεί η είσοδος που έδωσε δεδομένη έξοδο εκτός από την δοκιμή όλων των πιθανών τιμών (264 » 1019).

Η συνάρτηση MD4 έχει ρυθμιστεί για είσοδο 8 bytes δεδομένων και έξοδος 8 bytes. Αυτό επιτυγχάνεται με την εφαρμογή μιας exclusive-OR πράξης στα δυο μέρη των 8 bytes της εξόδου. Η ρύθμιση κρίνεται απαραίτητη, ώστε να είναι δυνατή η εφαρμογή της παραπάνω από μία φορά.

Παραγωγή Κωδικών Μίας Χρήσης

Οι μίας χρήσης κωδικοί που χρησιμοποιεί το S/KEY έχουν μήκος 64 bits και προκύπτουν από το μυστικό κωδικό του χρήστη με επεξεργασία του από την secure hash function. Το μήκος αυτό θεωρείται αρκετά μεγάλο για να είναι ασφαλές και αρκετά μικρό για να μπορεί εύκολα να διαχειριστεί από τους χρήστες όταν χρειάζεται.

Βήμα Προετοιμασίας

Η είσοδος στην hash function είναι, όπως προείπαμε, 8 bytes. Επειδή, όμως, ο μυστικός κωδικός του χρήστη μπορεί να είναι (και πρέπει να είναι) μεγαλύτερος, είναι αναγκαίο ένα βήμα προετοιμασίας. Σε αυτό το βήμα, ο μυστικός κωδικός του χρήστη συνενώνεται (concatenation) με ένα seed που μεταδίδεται από την server στον client σε μη κρυπτογραφημένη μορφή. Το seed επιτρέπει στον χρήστη να χρησιμοποιεί τον ίδιο κωδικό και στις άλλες μηχανές του δικτύου (με χρήση διαφορετικών seeds) και να ανακυκλώνει με ασφάλεια τους μυστικούς κωδικούς αλλάζοντας το seed. Το αποτέλεσμα της προηγούμενης ενέργειας, εισάγεται στον MD4 και η έξοδος του μειώνεται σε 8 bytes με την πράξη X-OR μεταξύ των δύο 8-byte μισά. Το τελικό αποτέλεσμα του βήματος καλείται s.

Βήμα Παραγωγής

Η ακολουθία των κωδικών μίας χρήσεως παράγεται με την πολλαπλή εφαρμογή του MD4 στον μυστικό κωδικό του χρήστη. Αναλυτικότερα, ο πρώτος κωδικός μίας χρήσεως θα παραχθεί από την Ν φορές επεξεργασία του s (βλέπε προηγούμενη παράγραφο) από τον MD4:

po = f N (s)

Ο επόμενος κωδικός μίας χρήσεως προκύπτει τρέχοντας το s μέσα από τον αλγόριθμο MD4 μία φορά λιγότερη από ότι πριν, δηλαδή Ν-1:

p1 = f N-1 (s)

Η γενική μορφή της φόρμουλας είναι:

pi = f N-i (s)

Ένας παρείσακτος που έχει καταγράψει τον κωδικό μίας χρήσης pi, δεν είναι σε θέση να υπολογίσει τον επόμενο στην ακολουθία (pi+1), γιατί κάτι τέτοιο θα απαιτούσε την αντιστροφή της συνάρτησης. Επειδή δεν γνωρίζει το αρχικό μυστικό κλειδί που χρησιμοποιήθηκε και λόγω της φύσης της συνάρτησης, η αντιστροφή της τελευταίας καθίσταται αδύνατη.

Επαλήθευση των Κωδικών Μίας Χρήσης από τον Server

Ο server αρχικά λαμβάνει τον po. Όταν ο client προσπαθεί να πιστοποιήσει την ταυτότητα του, ο server αποστέλλει στον client το seed και την τρέχουσα τιμή του i (όπου i = 0 .... N). Ο client επιστρέφει στον server το επόμενο κωδικό μίας χρήσης. Ο server εφαρμόζει την hash function σε αυτόν:

pi = f ( f N – i – 1 (s)) = f (pi+1 ),

όπου pi+1, ο κωδικός που παρέλαβε τελευταίο και pi, ο κωδικός που ήδη έχει επαληθεύσει και βρίσκεται αποθηκευμένος σε ειδικό αρχείο. Με αυτόν την πράξη υπολογίζει τον προηγούμενο κωδικό, ο οποίος είναι αποθηκευμένος στο ειδικό αρχείο και έπειτα συγκρίνει το αποτέλεσμα της πράξης με τον αποθηκευμένο. Εάν το αποτέλεσμα δεν ταιριάζει με το αντίγραφο του προηγούμενου στο αρχείο, τότε η αίτηση δεν γίνεται δεκτή. Εάν ταιριάζει, τότε ο server επιβεβαιώνεται για την ταυτότητα του χρήστη και ενημερώνει το ειδικό αρχείο με τους παραληφθέντες κωδικούς αντικαθιστώντας τον προηγούμενο κωδικό με τον τελευταίο κωδικό. Αυτή η διαδικασία συμβαίνει για κάθε καινούργιο κωδικό μίας χρήσης.

Κάποια στιγμή, επειδή ο αριθμός Ν μειώνεται συνεχώς, το σύστημα θα καταλήξει στον αρχικό μυστικό κωδικό του χρήστη. Ο χρήστης πρέπει να ξανά ξεκινήσει την διαδικασία παραγωγής κωδικών από την αρχή, εάν θέλει να μπορεί να ξανά συνδεθεί στον server. Αυτό γίνεται με την εκτέλεση της εντολής keyinit, μία ειδική έκδοση της εντολής passwd του UNIX, με την οποία μπορεί να γίνει αλλαγή του κωδικού μίας χρήσης, του seed και του αριθμού Ν.

Μορφή του Κωδικού Μίας Χρήσης

Ο κωδικός μίας χρήσης που παράγεται σύμφωνα με την διαδικασία που περιγράφτηκε παραπάνω, έχει μήκος 64 bits. Σε μερικά S/KEY συστήματα, η εισαγωγή του κωδικού μίας χρήσης γίνεται από το ίδιο το πρόγραμμα, αλλά υπάρχουν οι περιπτώσεις όπου ο κωδικός πρέπει να τοποθετηθεί χειροκίνητα. Η εισαγωγή ενός αριθμού 64 bits είναι δύσκολη και επιρρεπής σε λάθη. Το S/KEY σύστημα έχει προβλέψει για την επίλυση αυτού του προβλήματος. Ο κωδικός μίας χρήσης μετατρέπεται σε ακολουθία 6 μικρών Αγγλικών λέξεων (από 1 έως 4 γράμματα). Κάθε λέξη διαλέγεται από ένα λεξικό 2048 λέξεων και αντιστοιχίζεται σε 11 περίπου bits του κωδικού. Το ίδιο λεξικό χρησιμοποιείται από κάθε S/KEY εφαρμογή. Επειδή ο αριθμός των πιθανών φράσεων – κλειδιά είναι 266, τα περιεχόμενα αυτού του λεξικού δεν κρατούνται κρυφά.

Παράδειγμα

Το παρακάτω παράδειγμα περιγράφει την διαδικασία σύνδεσης σε ένα UNIX σύστημα που χρησιμοποιεί την S/KEY τεχνική. Στο παράδειγμα ο χρήστης έχει στην κατοχή του έναν υπολογιστή χειρός (hand-held PC).

  1. Ο χρήστης προσδιορίζει την ταυτότητα του με την εισαγωγή του login name στον client του δικτύου.
  2. Ο server δημιουργεί και στέλνει στον client ένα μήνυμα challenge, που περιέχει τον αριθμό Ν του επόμενου κωδικού μίας χρήσης και το seed. Ας υποθέσουμε ότι το seed είναι "unix3" και το Ν = 54.
  3. Ο χρήστης εισάγει το αριθμό 54 και το "unix3" στο palm-top υπολογιστή. Το μηχάνημα τον ρωτά για τον μυστικό του κωδικό.
  4. Ο χρήστης εισάγει τον μυστικό του κωδικό και ο palm-top υπολογιστής παράγει το 54ο κωδικό μίας χρήσης που μετατρέπεται με την βοήθεια του λεξικού, σε φράση – κλειδί 6 λέξεων.
  5. Ο χρήστης μεταφέρει την φράση – κλειδί στον client του δικτύου και επαληθεύεται η ταυτότητα του.
  6. Την επόμενη φορά που θα θελήσει να αποκτήσει πρόσβαση στους πόρους του δικτύου, οι αριθμός Ν θα γίνει 53.

 

5.10.4 Η Αδυναμία του S/KEY

Το σύστημα πιστοποίησης ταυτότητας S/KEY είναι αποτελεσματικό για επιθέσεις παθητικού τύπου. Σε αυτές τις επιθέσεις, η πληροφορία που διασχίζει το δίκτυο δεν αλλοιώνεται με οποιοδήποτε τρόπο, παρά μόνο καταγράφεται για μελλοντική εκμετάλλευση.

Στην περίπτωση που η επικοινωνία εμποδίζεται, εκτρέπεται, διασπάται ή ακόμα αλλοιώνεται, τότε η επίθεση είναι ενεργής μορφή (active attack). Το S/KEY δεν είναι ικανό να προστατέψει εάν δίκτυο από τέτοιες απειλές.

5.10.5 Περαιτέρω πληροφορίες

Στις παρακάτω ηλεκτρονικές σελίδες, ο αναγνώστης μπορεί να βρει περισσότερες λεπτομέρειες για τα συστήματα One-Time Password:

Yahoo! Computers and Internet:Security and Encryption:S/KEY --http://dir.yahoo.com/Computers_and_Internet/Security_and_Encryption/S_KEY/

S/KEY - One Time Password System -- ftp://ftp.bellcore.com/pub/nmh/docs/rfc1760.txt

OTP Extended Responses -- ftp://ftp.bellcore.com/pub/nmh/docs/rfc2243.txt

A One Time Password System -- ftp://ftp.bellcore.com/pub/nmh/docs/rfc2289.txt

Βασικές Έννοιες