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

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

Ο κωδικός είναι συνάρτηση του χρόνου, όχι κωδικός πρόσβασης

Το TOTP παίρνει το κοινόχρηστο μυστικό και έναν μετρητή που παράγεται από την τρέχουσα ώρα, περνά και τα δύο από κατακερματισμό με κλειδί και περικόπτει το αποτέλεσμα σε μια σύντομη δεκαδική συμβολοσειρά, όπως ορίζεται στο RFC 6238. Ο μετρητής προχωρά σε κάθε χρονικό βήμα, συνήθως τριάντα δευτερόλεπτα, οπότε το ίδιο μυστικό παράγει νέα τιμή όταν αλλάζει το βήμα. Ο επαληθευτής υπολογίζει ξανά την αναμενόμενη τιμή για το τρέχον βήμα και τη συγκρίνει, κάτι που απαιτεί το ίδιο μυστικό και την ίδια αντίληψη του τώρα. Ένας κωδικός πρόσβασης παραμένει επαναχρησιμοποιήσιμος μέχρι να αλλαχθεί, ενώ αυτή η τιμή λήγει σε ένα όριο που ο πελάτης δεν βλέπει.

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

Δύο ρολόγια πρέπει να συμφωνούν, όχι ένα

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

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

Τι κοστίζει η διεύρυνση του παραθύρου

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

Η διόρθωση του ρολογιού είναι η επισκευή, ενώ η διεύρυνση του παραθύρου είναι καταπραϋντικό. Η πρώτη αφαιρεί την αιτία και η δεύτερη την κρύβει.

Ελέγξτε και τα δύο ρολόγια πριν δοκιμάσετε ξανά

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

timedatectl
date -u +'%Y-%m-%dT%H:%M:%SZ'
chronyc tracking
timedatectl timesync-status

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

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

Σχετικά άρθρα