Οδηγός ασφαλείας
Δημιουργία κωδικών πρόσβασης από την πλευρά του πελάτη με Web Crypto και δειγματοληψία απόρριψης
Μια τεχνική λευκή βίβλος που εξηγεί το μοντέλο δημιουργίας κωδικών πρόσβασης από την πλευρά του προγράμματος περιήγησης του PwdGen, τα όρια εντροπίας, τη δειγματοληψία απόρριψης και τα όρια απορρήτου.
Περίληψη
Το PwdGen χρησιμοποιεί μια μέθοδο δημιουργίας αναφοράς από την πλευρά του πελάτη: το πρόγραμμα περιήγησης ή το runtime Web Crypto παρέχει τυχαία bytes, η δειγματοληψία απόρριψης αντιστοιχίζει αυτά τα bytes σε αμερόληπτα οριοθετημένα ευρετήρια και μια τυχαία ανάδευση Fisher-Yates κατανέμει τις απαιτούμενες κατηγορίες χαρακτήρων σε ολόκληρο τον τελικό κωδικό πρόσβασης. Η μέθοδος είναι σκόπιμα μικρή, ελέγξιμη και αναπαραγώγιμη στην εφαρμογή web, τον προσαρμογέα API, τη γραμμή εντολών και το προετοιμασμένο πακέτο pwdgen-core.
Αυτό το έγγραφο περιγράφει το μηχανικό μοντέλο. Δεν αποτελεί ισχυρισμό για μια νέα κρυπτογραφική αρχή, ένα επίσημο πρότυπο ή έναν ανεξάρτητο έλεγχο τρίτου μέρους.
Πηγή τυχαιότητας
Η γεννήτρια ζητά κρυπτογραφικά ισχυρές τυχαίες τιμές μέσω crypto.getRandomValues(). Οι υλοποιήσεις Web Crypto αναμένεται να χρησιμοποιούν μια κρυπτογραφικά ασφαλή γεννήτρια ψευδοτυχαίων αριθμών (CSPRNG) που τροφοδοτείται με εντροπία υψηλής ποιότητας από το περιβάλλον φιλοξενίας. Στην πράξη, τα προγράμματα περιήγησης αναθέτουν αυτήν την ευθύνη σε λειτουργικά συστήματα και πλατφόρμες κρυπτογραφικών παρόχων.
Το PwdGen δεν ισχυρίζεται ότι κάθε κλήση δημιουργίας κωδικού πρόσβασης δειγματίζει άμεσα μια πηγή θορύβου υλικού. Η ασφαλέστερη και ακριβέστερη δήλωση είναι ότι το πρόγραμμα περιήγησης παρέχει έξοδο CSPRNG μέσω του Web Crypto API και ότι το PwdGen αποφεύγει μη κρυπτογραφικές διεπαφές ψευδοτυχαιότητας.
Γιατί όχι Math.random()
Η Math.random() δεν προορίζεται για χρήση ευαίσθητη σε θέματα ασφάλειας. Είναι κατάλληλη για προσομοιώσεις, οπτικά εφέ και συνηθισμένη τυχαιοποιημένη συμπεριφορά διεπαφής χρήστη, αλλά δεν παρέχει τις εγγυήσεις που αναμένονται για κωδικούς πρόσβασης, κωδικούς επαναφοράς, κλειδιά υπογραφής ή άλλα διαπιστευτήρια.
Το PwdGen αντιμετωπίζει τις μη ασφαλείς ψευδοτυχαίες εναλλακτικές ως κατάσταση αποτυχίας. Εάν το Web Crypto δεν είναι διαθέσιμο, η γεννήτρια θα πρέπει να εμφανίζει ένα σφάλμα συμβατότητας αντί να παράγει σιωπηλά αδύναμα διαπιστευτήρια.
Δειγματοληψία απόρριψης
Τα τυχαία bytes και οι ακέραιοι συνήθως προέρχονται από ένα εύρος δύναμης του δύο. Τα αλφάβητα κωδικών πρόσβασης σπάνια έχουν μέγεθος που διαιρεί ακριβώς αυτό το εύρος. Μια άμεση πράξη modulo μπορεί να κάνει ορισμένους χαρακτήρες ελαφρώς πιο πιθανούς από άλλους.
Το PwdGen χρησιμοποιεί δειγματοληψία απόρριψης:
- Λήψη ενός 32-bit unsigned ακέραιου.
- Υπολογισμός του μεγαλύτερου πολλαπλάσιου του μεγέθους του αλφαβήτου που χωράει στο εύρος των 32-bit.
- Απόρριψη τιμών πάνω από αυτό το όριο.
- Εφαρμογή modulo μόνο στο υπόλοιπο πλήρες εύρος.
Αυτό διατηρεί την ομοιόμορφη επιλογή οριοθετημένων χαρακτήρων χωρίς να εισάγει μετρήσιμη μεροληψία modulo.
Κάλυψη χαρακτήρων και εντροπία
Για διαμορφωμένες πολιτικές κωδικών πρόσβασης, η γεννήτρια επιλέγει πρώτα έναν χαρακτήρα από κάθε ενεργή κατηγορία, συμπληρώνει το υπόλοιπο από το συνδυασμένο αλφάβητο και στη συνέχεια ανακατεύει το αποτέλεσμα. Αυτό βοηθά στην ικανοποίηση των κανόνων κωδικών πρόσβασης προορισμού χωρίς να τοποθετεί μια προβλέψιμη κατηγορία σε μια προβλέψιμη θέση.
Η θεωρητική εκτίμηση εντροπίας είναι:
bits = length × log2(uniqueAlphabetSize)
Αυτή η τιμή είναι ένα άνω όριο για ομοιόμορφα τυχαίες επιλογές από το διαμορφωμένο αλφάβητο. Δεν λαμβάνει υπόψη την επαναχρησιμοποίηση κωδικών πρόσβασης, την επεξεργασία από τον χρήστη, παραβιασμένες συσκευές, διαρροές κωδικών πρόσβασης ή αδύναμη αποθήκευση από την υπηρεσία προορισμού.
Όριο απορρήτου
Στα εργαλεία προγράμματος περιήγησης, οι παραγόμενες τιμές παραμένουν στη μνήμη της σελίδας και σε ορατά πεδία αποτελεσμάτων έως ότου ο χρήστης τις αντιγράψει ή τις εξάγει. Οι τοπικές γεννήτριες δεν στέλνουν παραγόμενους κωδικούς πρόσβασης σε διακομιστές PwdGen, δεν τους τοποθετούν σε URL ούτε τους γράφουν σε συμβάντα αναλυτικών στοιχείων.
Αυτό το όριο δεν προστατεύει από κακόβουλες επεκτάσεις προγράμματος περιήγησης, διαχειριστές πρόχειρου, παραβίαση λειτουργικού συστήματος, καταγραφή οθόνης, σελίδες phishing ή από τον χρήστη που επικολλά έναν παραγόμενο κωδικό πρόσβασης σε έναν μη ασφαλή προορισμό.
Αναπαραγώγιμη υλοποίηση
Το δημόσιο πακέτο pwdgen-cli και το προετοιμασμένο πακέτο pwdgen-core υπάρχουν για να διατηρούν το μοντέλο δημιουργίας ελέγξιμο εκτός της ιστοσελίδας. Οι δοκιμές μονάδας καλύπτουν τη συμπερίληψη κατηγοριών χαρακτήρων, τους εξαιρούμενους χαρακτήρες, τις μη έγκυρες διαμορφώσεις, τους τύπους εντροπίας και την απουσία μη ασφαλών ψευδοτυχαίων διαδρομών κώδικα εναλλακτικής.
Ο στόχος δεν είναι να γίνει το PwdGen ένα ιδιωτικό πρότυπο. Ο στόχος είναι να γίνει η υλοποίηση αρκετά μικρή ώστε οι προγραμματιστές να μπορούν να τη διαβάσουν, να τη δοκιμάσουν και να την αντικαταστήσουν όταν το περιβάλλον τους απαιτεί ένα διαφορετικό όριο εμπιστοσύνης.