Εργαλείο κωδικού πρόσβασης Επιστροφή στη δημιουργία

Οδηγός ασφαλείας

Γιατί το Math.random δεν είναι ασφαλές για κωδικούς πρόσβασης

Μάθετε γιατί το Math.random είναι κατάλληλο για εφέ διεπαφής χρήστη, αλλά όχι για κωδικούς πρόσβασης, κωδικούς επαναφοράς, διακριτικά ή άλλα απόρρητα δεδομένα ασφαλείας.

Σύνοψη

Το Math.random() είναι μια γενική ψευδοτυχαία συνάρτηση JavaScript. Είναι χρήσιμη για κινούμενα σχέδια, τυχαιοποιημένη συμπεριφορά διεπαφής, παραδείγματα, παιχνίδια και προσομοιώσεις. Δεν προορίζεται για κρυπτογραφική ασφάλεια και δεν πρέπει να χρησιμοποιείται για τη δημιουργία κωδικών πρόσβασης, κωδικών επαναφοράς, μυστικών API, κλειδιών υπογραφής ή διακριτικών ανάκτησης.

Το πρόβλημα

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

Η ασφαλέστερη επιλογή προγράμματος περιήγησης

Τα σύγχρονα προγράμματα περιήγησης παρέχουν crypto.getRandomValues() μέσω του Web Crypto API. Το PwdGen χρησιμοποιεί αυτή τη διεπαφή και δειγματοληψία απόρριψης, η οποία αποφεύγει την προκατειλημμένη επιλογή χαρακτήρων. Εάν αυτό το API δεν είναι διαθέσιμο, η ασφαλής συμπεριφορά είναι να σταματήσει η δημιουργία και να εξηγηθεί η απαίτηση συμβατότητας.

Πώς να ελέγξετε μια γεννήτρια

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

Λεπτομερής καθοδήγηση

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

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

Για αυτό το θέμα, μια πρακτική προεπιλογή είναι το crypto.getRandomValues με δειγματοληψία απόρριψης αντί για Math.random. Μπορείτε να εφαρμόσετε αυτήν την προεπιλογή με τον οδηγό Web Crypto API και στη συνέχεια να αποθηκεύσετε την τελική τιμή σε έναν αξιόπιστο διαχειριστή κωδικών πρόσβασης. Το PwdGen δημιουργεί τιμές τοπικά στο πρόγραμμα περιήγησης με το Web Crypto· ο δημιουργημένος κωδικός πρόσβασης δεν αποστέλλεται σε διακομιστή PwdGen. Αυτός ο τοπικός σχεδιασμός μειώνει την έκθεση στην πλευρά του διακομιστή, αλλά δεν προστατεύει από κάθε απειλή. Μια κακόβουλη επέκταση προγράμματος περιήγησης, μια παραβιασμένη συσκευή, μια σελίδα phishing ή μη ασφαλής διαχείριση πρόχειρου μπορεί να εκθέσει ένα μυστικό μετά τη δημιουργία του.

Τα πιο συνηθισμένα προβλήματα που πρέπει να αποφεύγονται είναι οι προβλέψιμες ψευδοτυχαίες ακολουθίες, η μεροληψία modulo, οι προσαρμοσμένες τυχαίες συναρτήσεις και ο κώδικας επίδειξης που αντιγράφεται στην παραγωγή. Αυτά τα προβλήματα έχουν σημασία επειδή οι επιτιθέμενοι σπάνια χρειάζεται να δοκιμάσουν όλους τους πιθανούς κωδικούς πρόσβασης όταν οι ανθρώπινες συνήθειες τους δίνουν μια συντόμευση. Η παραβίαση διαπιστευτηρίων, το phishing, οι διερρευσμένες λίστες κωδικών πρόσβασης και η κατάχρηση ανάκτησης λογαριασμού είναι συχνά πιο ρεαλιστικές από μια καθαρή μαθηματική αναζήτηση. Γι’ αυτό η καλύτερη συμβουλή συνδυάζει την ποιότητα του κωδικού πρόσβασης με ελέγχους σε επίπεδο λογαριασμού, όπως MFA, κλειδιά πρόσβασης, αποθήκευση κωδικών ανάκτησης και τακτικό έλεγχο των ρυθμίσεων email ή τηλεφώνου ανάκτησης.

Χρησιμοποιήστε αυτήν τη λίστα ελέγχου όταν εφαρμόζετε τη σύσταση:

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

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

Ένα ασφαλές επόμενο βήμα

Αφού διαβάσετε αυτόν τον οδηγό, κάντε έναν μικρό έλεγχο λογαριασμού αντί να προσπαθήσετε να διορθώσετε τα πάντα ταυτόχρονα. Επιλέξτε τον λογαριασμό που θα προκαλούσε τα περισσότερα προβλήματα αν παραβιαζόταν, επιβεβαιώστε ότι ο κωδικός πρόσβασής του είναι μοναδικός και ελέγξτε το email ανάκτησης, το τηλέφωνο ανάκτησης, τη μέθοδο MFA και την αποθήκευση εφεδρικών κωδικών. Εάν κάποιο μέρος αυτής της αλυσίδας είναι αδύναμο, βελτιώστε αυτό το μέρος πριν προχωρήσετε σε λογαριασμούς χαμηλότερου κινδύνου. Αυτή η σειρά διατηρεί τη δουλειά διαχειρίσιμη και προστατεύει τους λογαριασμούς που οι επιτιθέμενοι είναι πιθανότερο να χρησιμοποιήσουν ως εφαλτήριο. Για το γιατί το math.random δεν είναι ασφαλές για κωδικούς πρόσβασης, το καλύτερο αποτέλεσμα είναι μια επαναλαμβανόμενη συνήθεια: δημιουργήστε τοπικά, αποθηκεύστε προσεκτικά και αποφύγετε την επαναχρησιμοποίηση.

Συχνές ερωτήσεις

Είναι ποτέ εντάξει το Math.random;

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

Τι πρέπει να χρησιμοποιούν οι γεννήτριες κωδικών πρόσβασης αντ’ αυτού;

Θα πρέπει να χρησιμοποιούν μια κρυπτογραφική τυχαία πηγή όπως το crypto.getRandomValues() στο πρόγραμμα περιήγησης.

Το PwdGen κάνει εναλλαγή στο Math.random;

Όχι. Εάν το Web Crypto δεν είναι διαθέσιμο, το PwdGen εμφανίζει μια προειδοποίηση συμβατότητας και δεν δημιουργεί κωδικούς πρόσβασης με Math.random().

Πηγές