15.5 One-time Passwords

Εξ' ορισμού, το FreeBSD περιλαμβάνει υποστήριξη για OPIE (Μιας-Χρήσης Κωδικοί σε Όλα), που χρησιμοποιεί κατακερματισμό MD5 εξ' ορισμού.

Υπάρχουν τριών ειδών διαφορετικοί κωδικοί για τους οποίους θα μιλήσουμε παρακάτω. Το πρώτο είδος κωδικού είναι το σύνηθες UNIX® στυλ ή Kerberos, θα το λέμε αυτό «UNIX κωδικό». Το δεύετρο είναι ο μιας-χρήσης κωδικός που παράγεται από το πρόγραμμα OPIE opiekey(1) και γίνεται δεκτός από το πρόγραμμα opiepasswd(1) και την προτροπή σύνδεσης, θα καλούμε αυτό «one-time κωδικό». Το τελευταίο είδος κωδικού είναι ο μυστικός κωδικός που δίνεις στο πρόγραμμα opiekey (και μερικές φορές στο opiepasswd) το οποίο παράγει τους μιας-χρήσης κωδικούς, θα τον λέμε «μυστικό κωδικό» ή απλά άνευ αδείας «κωδικό».

Ο μυστικός κωδικός δεν έχει καμία σχέση με τον UNIX κωδικό σας, μπορούν να είναι ίδιοι αλλά δεν συνίσταται. Οι OPIE μυστικοί κωδικοί δεν περιορίζονται στους 8 χαρακτήρες όπως οι παλιοί UNIX κωδικοί [1], μπορούν να όσο μεγάλοι θέλετε. Κωδικοί με φράσεις από έξι ή εφτά λέξεις είναι αρκετά σύνηθεις. Για το μεγαλύτερο μέρος το OPIE σύστημα λειτουργεί εντελώς ανεξάρτητα από το σύστημα κωδικών του UNIX.

Εκτός του κωδικού, υπάρχουν δύο ακόμα κομμάτια δεδομένων που είναι σημαντικά για το OPIE. Το ένα είναι γνωστό ως «seed» ή «key», και αποτελείται από δύο γράμματα και 5 ψηφία. Το άλλο είναι αυτό που καλείται «iteration count», και είναι ένας αριθμός μεταξύ του 1 και του 100. Το OPIE δημιουργεί κωδικούς ενώνοντας το seed και τον μυστικό κωδικό, μετά εφαρμόζει κατακερματισμό MD5 τόσες φορές όσες καθορίζεται από τον αριθμό iteration count και αλλάζει το αποτέλεσμα σε έξι μικρές Αγγλικές λέξεις. Αυτές οι έξι Αγγλικές λέξεις είναι ο μιας-χρήσης κωδικός σας. Το σύστημα αυθεντικοποίησης (αρχικά PAM) κρατά τον τελευταίο μιας-χρήσης κωδικό που χρησιμοποιήθηκε, και ο χρήστης αυθεντικοποιείται αν η τιμή κατακερματισμού του κωδικού που δίνει ισούται με αυτή του προηγουμένου κωδικού. Επειδή χρησιμοποιείτε κατακερματισμός ενός-δρόμου είναι αδύνατο να δημιουργηθούν μελλοντικοί κωδικοί μιας-χρήσης αν ένας επιτυχής κωδικός έχει κρατηθεί, ο αριθμός iteration count μειώνεται μετά από κάθε επιτυχή σύνδεση για να κρατείται ο χρήστης και το πρόγραμμα σύνδεσης συγχρονισμένα. Όταν ο αριθμός iteration count φτάσει στο 1, το OPIE πρέπει να επαναρχικοποιηθεί.

Υπάρχουν μερικά προγράμματα που εμπλέκονται σε κάθε σύστημα τα οποία θα δούμε παρακάτω. Το πρόγραμμα opiekey δέχεται έναν αριθμό ως iteration count, έναν ως seed και ένα μυστικό κωδικό και δημιουργεί τον μιας-χρήσης κωδικό ή μια λίστα από συνεχόμενους μιας-χρήσης κωδικούς. Το πρόγραμμα opiepasswd χρησιμοποιείτε για να αρχικιοποιήσει το OPIE και να αλλάξει κωδικούς, τον iteration count ή το seed, δέχεται είτε μια μυστική φράση ή έναν iteration count, seed και ένα μιας-χρήσης κωδικό. Το πρόγραμμα opieinfo εξετάζει τα σχετικά αρχεία διαπιστευτηρίων (/etc/opiekeys) και τυπώνει τον τρέχοντα iteration count και το seed του χρήστη που εκτελεί το πρόγραμμα.

Υπάρχουν τέσσερις διαφορτικές λειτουργίες που θα καλύψουμε. Η πρώτη χρησιμοποιεί την εντολή opiepasswd πάνω από μια ασφαλή σύνδεση για να σετάρει τους μιας-χρήσης κωδικούς για πρώτη φορά ή για να αλλάξεις τον κωδικό σου ή το seed. Η δεύτερη λειτουργία χρησιμοποιεί την εντολή opiepasswd πάνω από μια μη ασφαλή σύνδεση σε συνδυασμό με την εντολή opiekey πάνω από μια ασφαλή σύνδεση, για να κάνετε το ίδιο. Η τρίτη λειτουργία χρησιμοποιεί την εντολή opiekey για να συνδεθείτε από μια μη ασφαλή σύνδεση. Η τέταρτη χρησιμοποιεί την εντολή opiekey για την δημιουργία ενός αριθμό κλειδιών που μπορούν να τυπωθούν ή να σημειωθούν όταν θα πάτε σε κάποια περιοχή χωρίς ασφαλή σύνδεση για πουθενά.

15.5.1 Αρχικοποίηση με Ασφαλή Σύνδεση

Για να αρχικοποιήσετε το OPIE για πρώτη φορά, εκτελέστε την εντολή opiepasswd :

% opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED

Στισ προτροπές Enter new secret pass phrase: ή Enter secret password:, θα πρέπει να δώσετε έναν κωδικό ή μια φράση. Θυμηθείτε, αυτός δεν είναι ο κωδικός που θα χρησιμοποιήσετε για να συνδεθείτε, αυτός είναι για να δημιουργηθούν οι μιας-χρήσης κωδικοί. Η «ID» γραμμή σας δίνει τις παραμέτρους της συγκεκριμένης εκτέλεσης: το όνομα σύνδεσής σας, τον αριθμό iteration count και το seed. Όταν συνδεθείτε το σύστημα θα θυμάται αυτές τις παράμετρους και θα σας τις παρουσιάζει ώστε να μην χρειάζεται να τις θυμάστε. Η τελευταία γραμμή δίνει το συγκεκριμένο μιας-χρήσης κωδικό που αντιστοιχεί σε αυτές τις παραμέτρους και στον μυστικό κωδικό σας, αν έπρεπε να ξανασυνδεθείτε άμεσα, αυτός ο μιας-χρήσης κωδικός είναι που θα πρέπει να χρησιμοποιήσετε.

15.5.2 Αρχικοποίηση με μη Ασφαλή Σύνδεση

Για να αρχικοποιείσετε ή να αλλάξετε τον μυστικό κωδικό σας από μια μη ασφαλή σύνδεση, θα χρειαστείτε να έχετε μια ασφαλή σύνδεση κάπου για να τρέξετε την εντολή opiekey με την μορφή ίσως ενός κελύφους εντολών σε ένα μηχάνημα που εμπιστεύεστε. Θα χρειαστείτε επίσης, να έχετε έναν αριθμό ως iteration count (100 είναι μάλλον μια καλή τιμή) και να φτιάξετε το δικό σας seed ή να χρησιμοποιήσετε έναν τυχαίο αριθμό. Πάνω από τη μη ασφαλή σύνδεση (στο μηχάνημα που αρχικοποιείτε) χρησιμοποιείστε την εντολή opiepasswd:

% opiepasswd

Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
        otp-md5 498 to4268 ext
        Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
        otp-md5 499 to4269
        Response: LINE PAP MILK NELL BUOY TROY

ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY

Για να δεχθήκε το εξ' ορισμού seed πατήστε Return. Τότε πριν την εισαγωγή ενός κωδικού πρόσβασης πηγαίνετε στην ασφαλή σύνδεση και δώστε τις ίδιες παραμέτρους:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Τώρα πίσω στη μη ασφαλή σύνδεση, αντιγράψτε τον μιας-χρήσης κωδικό που δημιουργήσατε, στο σχετικό πρόγραμμα.

15.5.3 Δημιουργώντας έναν Μιας-Χρήσης Κωδικό

Αφού έχετε αρχικοποιήσει το OPIE και έχετε συνδεθεί, θα σας παρουσιαστεί μια προτροπή όπως αυτή:

% telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.

FreeBSD/i386 (example.com) (ttypa)

login: <username>
otp-md5 498 gr4269 ext
Password: 

Σαν μια σημείωση, η OPIE προτροπή έχει ένα χρήσιμο χαρακτηριστικό (δεν φαίνεται εδώ): αν πατήσετε Return στην προτροπή για τον κωδικό, τότε θα ενεργοποιηθεί η ηχώ (echo), έτσι μπορείτε να βλέπετε τι γράφετε. Αυτό είναι ιδιαίτερα χρήσιμο αν προσπαθείτε να γράψετε έναν κωδικό με το χέρι, όπως είναι από μια εκτύπωση.

Στο σημείο αυτό πρέπει να δημιουργήσετε τον μιας-χρήσης κωδικό για να απαντήσετε στην προτροπή σύνδεσης. Αυτό πρέπει να γίνει από ένα σύστημα που εμπιστεύεστε όπου θα τρέξετε την εντολή opiekey. (Υπάρχουν εκδόσεις για DOS, Windows® και Mac OS® επίσης.) Χρειάζονται τον αριθμό iteration count και το seed ως ορίσματα επιλογής της εντολής. Μπορείτε να κάνετε αποκοπή-επικόλληση αυτών από την προτροπή σύνδεσης στο μηχάνημα στο οποίο πάτε να συνδεθήτε.

Στο σύστημα που εμπιστεύεστε:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Τώρα που έχετε τον μιας-χρήσης κωδικό μπορείτε να συνεχίσετε για να συνδεθήτε.

15.5.4 Δημιουργώντας Πολλαπλούς Μιας-Χρήσης Κωδικούς

Μερικές φορές πρέπει να πάτε σε μέρη όπου δεν έχετε πρόσβαση σε ένα μηχάνημα εμπιστοσύνης ή σε μια ασφαλή σύνδεση. Σε αυτήν την περίπτωση είναι δυνατόν να χρησιμοποιήσετε την εντολή opiekey για να δημιουργήσετε έναν αριθμό από μιας-χρήσης κωδικούς από πριν ώστε να τους εκτυπώσετε και να τους έχετε μαζί σας. Για παράδειγμα:

% opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHI

Η επιλογή -n 5 απαιτεί πέντε κλειδιά στην σειρά, η επιλογή 30 καθορίζει ποιός θα είναι ο τελευταίος αριθμός επανάληψης (iteration number). Σημειώστε ότι αυτά τυπώνονται με αντίστροφη σειρά χρήσης. Αν είστε πραγματικά παρανοϊκός, θα θέλετε να γράψετε τα αποτελέσματα με το χέρι, αλλιώς μπορείτε να κάνετε αποκοπή-επικόλληση στην εντολή lpr. Σημειώστε ότι κάθε γραμμή δείχνει μαζί τον αριθμό iteration count και τον μιας-χρήσης κωδικό, μπορεί να βρήτε χρήσιμο να διαγράφετε κωδικούς καθώς τους χρησιμοποιείτε.

15.5.5 Περιορίζοντας την Χρήση των UNIX® Κωδικών

Το OPIE μπορεί να περιορίσει την χρήση των UNIX κωδικών με βάση την IP διεύθυνση μιας συνόδου σύνδεσης. Το σχετικό αρχείο είναι το /etc/opieaccess, το οποίο υπάρχει εξ' ορισμού. Παρακαλώ δείτε το opieaccess(5) για περισσότερες πληροφορίες για αυτό το αρχείο και για ποιούς παράγοντες πρέπει να γνωρίζετε όταν το χρησιμοποιείτε.

Εδώ είναι ένα παράδειγμα του αρχείουopieaccess :

permit 192.168.0.0 255.255.0.0

Αυτή η γραμμή επιτρέπει σε χρήστες που η IP διεύθυνση προέλευσης (που είναι ευπρόσβλητη σε spoofing) ταιριάζει με την συγκεκριμένη τιμή και μάσκα, να χρησιμοποιούν UNIX κωδικούς κάθε στιγμή.

Αν κανένας κανόνας στο αρχείο opieaccess δεν ταιριάζει, εξ' ορισμού δεν επιτρέπονται μη-OPIE συνδέσεις.

Σημειώσεις

[1]

Στο FreeBSD ο κανονικός κωδικός σύνδεσης μπορεί να είναι έως 128 χαρακτήρες σε μήκος.

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.