Δημιουργός και έλεγχος bcrypt
Δημιουργήστε hash bcrypt με συντελεστή κόστους από 4 έως 14, ελέγξτε έναν κωδικό πρόσβασης με υπάρχον hash και δείτε έκδοση, κόστος, salt και digest.
Κατακερματισμός κωδικού πρόσβασης
- Έκδοση
- Κόστος
- Salt (22 χαρακτήρες)
- Hash (31 χαρακτήρες)
Έλεγχος κωδικού πρόσβασης με ένα hash
- Έκδοση
- Κόστος
- Salt (22 χαρακτήρες)
- Hash (31 χαρακτήρες)
Πώς να κάνετε hash έναν κωδικό πρόσβασης με bcrypt
- Στην ενότητα Κατακερματισμός κωδικού πρόσβασης, πληκτρολογήστε τον Κωδικό πρόσβασης. Ένας μετρητής δείχνει το μήκος του σε byte UTF-8 και σας προειδοποιεί όταν ξεπερνά τα 72 byte.
- Επιλέξτε τον Συντελεστή κόστους (4–14). Η γραμμή από κάτω δείχνει τον αριθμό των γύρων, για παράδειγμα 10 → 2^10 = 1.024 γύροι.
- Πατήστε Δημιουργία hash. Μια γραμμή προόδου παρακολουθεί την εργασία και η σελίδα παραμένει χρηστική όσο εκτελείται. Όταν ολοκληρωθεί, το εργαλείο δείχνει τον χρόνο που χρειάστηκε και το Hash bcrypt, έτοιμο για αντιγραφή.
- Το hash αναλύεται στα μέρη του: Έκδοση, Κόστος, Salt (22 χαρακτήρες) και Hash (31 χαρακτήρες).
Για να ελέγξετε έναν κωδικό πρόσβασης με ένα hash, πληκτρολογήστε τον κωδικό, επικολλήστε το hash (αυτό που μόλις δημιουργήσατε συμπληρώνεται αυτόματα) και πατήστε Έλεγχος κωδικού. Το αποτέλεσμα δείχνει αν ταιριάζουν. Επιλέξτε Απόκρυψη κωδικών για να καλυφθούν και τα δύο πεδία κωδικού.
Ο κατακερματισμός εκτελείται στο πρόγραμμα περιήγησής σας με τη βιβλιοθήκη bcryptjs, που φορτώνεται μόνο όταν τη χρειαστείτε για πρώτη φορά. Κανένας κωδικός ή hash δεν στέλνεται πουθενά.
Πώς λειτουργεί το bcrypt
Το bcrypt (Provos και Mazières, 1999) είναι συνάρτηση κατακερματισμού κωδικών πρόσβασης που βασίζεται στον κρυπτογράφο Blowfish. Σε αντίθεση με το SHA-256, είναι σκόπιμα αργό και η βραδύτητά του ρυθμίζεται: ο συντελεστής κόστους είναι δύναμη του δύο, άρα κάθε αύξηση κατά 1 διπλασιάζει τον φόρτο εργασίας. Κόστος 10 σημαίνει 1.024 επαναλήψεις της δαπανηρής ρύθμισης κλειδιού και κόστος 12 σημαίνει 4.096. Η βραδύτητα αυτή σχεδόν δεν επηρεάζει τη σύνδεση ενός χρήστη, αλλά κάνει πολύ ακριβότερη την εξαντλητική δοκιμή (brute force) μιας κλεμμένης βάσης δεδομένων.
Ένα hash όπως το $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy διαβάζεται ως εξής:
$2b$: η έκδοση. Τα$2a$και$2y$(PHP) είναι συμβατά και ελέγχονται εδώ. Το$2x$δηλώνει hash μιας παλιάς εσφαλμένης υλοποίησης και απορρίπτεται.10: ο συντελεστής κόστους.- Οι επόμενοι 22 χαρακτήρες: ένα τυχαίο salt 128 bit, στο δικό του αλφάβητο Base64 του bcrypt (
./A-Za-z0-9). - Οι τελευταίοι 31 χαρακτήρες: το αποτέλεσμα των 184 bit.
Επειδή το salt είναι τυχαίο και αποθηκεύεται μέσα στο hash, ο κατακερματισμός του ίδιου κωδικού δύο φορές δίνει δύο διαφορετικά hash, και τα δύο επαληθεύονται σωστά. Γι’ αυτό ένας κωδικός ελέγχεται με συνάρτηση επαλήθευσης και όχι συγκρίνοντας hash.
Επιλογή κόστους
Διαλέξτε το υψηλότερο κόστος που αντέχει ο διακομιστής σας διατηρώντας γρήγορες τις συνδέσεις, συνήθως γύρω στο ένα τέταρτο του δευτερολέπτου ανά hash. Το OWASP συνιστά ελάχιστο κόστος 10 για το bcrypt. Τα προγράμματα περιήγησης τρέχουν το bcrypt σε JavaScript, που είναι αρκετές φορές πιο αργή από μια εγγενή υλοποίηση σε διακομιστή: από κόστος 12 και πάνω το εργαλείο προειδοποιεί ότι ο κατακερματισμός μπορεί να χρειαστεί από ένα έως αρκετά δευτερόλεπτα και κάθε επιπλέον βήμα διπλασιάζει τον χρόνο. Η εργασία χωρίζεται σε σύντομα τμήματα, ώστε η σελίδα να μην παγώνει.
Για νέα συστήματα, το OWASP προτιμά πλέον τον Argon2id, ενώ το bcrypt παραμένει αποδεκτό όταν ο Argon2id δεν είναι διαθέσιμος.
Το όριο των 72 byte
Το bcrypt χρησιμοποιεί μόνο τα πρώτα 72 byte του κωδικού πρόσβασης· ό,τι ακολουθεί αγνοείται σιωπηλά. Τα byte δεν είναι χαρακτήρες: ένα γράμμα με τόνο παίρνει 2 byte σε UTF-8 και ένα emoji 4. Και τα ελληνικά γράμματα καταλαμβάνουν 2 byte το καθένα, οπότε ένας μακρύς ελληνικός κωδικός φτάνει το όριο νωρίτερα από έναν λατινικό. Δύο μακροί κωδικοί που έχουν κοινά τα πρώτα 72 byte παράγουν το ίδιο hash. Ο μετρητής byte σας προειδοποιεί όταν ένας κωδικός είναι πολύ μακρύς. Ορισμένα συστήματα κάνουν προκατακερματισμό των μακρών κωδικών (για παράδειγμα με HMAC-SHA256 και μετά Base64) πριν από το bcrypt. Αν το κάνετε, μην περνάτε ποτέ ακατέργαστα δυαδικά digest, επειδή ένα μηδενικό byte θα τερμάτιζε νωρίς τον κωδικό σε πολλές υλοποιήσεις.
Συχνές ερωτήσεις
Γιατί ο ίδιος κωδικός δίνει διαφορετικό hash κάθε φορά;
Κάθε hash παίρνει ένα νέο τυχαίο salt, που αποθηκεύεται μέσα στο ίδιο το hash. Το κουμπί Έλεγχος κωδικού διαβάζει το salt και το κόστος από το hash και το υπολογίζει ξανά, οπότε κάθε hash επαληθεύεται.
Μπορεί ένα hash bcrypt να αποκρυπτογραφηθεί;
Όχι. Το bcrypt είναι μονόδρομη συνάρτηση. Ο μόνος τρόπος να βρεθεί ένας κωδικός είναι να τον μαντέψετε και να κάνετε hash κάθε εικασία, και ακριβώς αυτό επιβραδύνει ο συντελεστής κόστους.
Ποιον συντελεστή κόστους να χρησιμοποιήσω;
Τουλάχιστον 10, και περισσότερο αν ο διακομιστής σας παραμένει αρκετά γρήγορος. Μετρήστε στο πραγματικό σας υλικό παραγωγής: ο χρόνος που εμφανίζεται εδώ αντιστοιχεί σε JavaScript στο πρόγραμμα περιήγησής σας, συνήθως πιο αργή από έναν διακομιστή.
Είναι εναλλάξιμα τα hash $2a$, $2b$ και $2y$;
Για κωδικούς κάτω των 256 byte δίνουν το ίδιο αποτέλεσμα και το εργαλείο ελέγχει και τα τρία. Το $2b$ διόρθωσε ένα σφάλμα υπερχείλισης μήκους στην υλοποίηση του OpenBSD, και το $2y$ είναι το όνομα της PHP για μια σωστή υλοποίηση.
Είναι ασφαλές να πληκτρολογήσω εδώ πραγματικό κωδικό πρόσβασης;
Όλα εκτελούνται τοπικά και τίποτα δεν στέλνεται ούτε αποθηκεύεται. Για πραγματικούς λογαριασμούς, παραμένει καλή πρακτική να δοκιμάζετε με έναν δοκιμαστικό κωδικό και όχι με κάποιον που χρησιμοποιείτε.
Σχετικά εργαλεία
- Δημιουργός hash Δημιουργήστε hash MD5, SHA-1, SHA-256 και SHA-512 για κείμενο ή αρχεία οποιουδήποτε μεγέθους και επαληθεύστε αθροίσματα ελέγχου στο πρόγραμμα περιήγησής σας.
- Γεννήτρια κωδικών πρόσβασης Δωρεάν γεννήτρια που δημιουργεί ισχυρούς τυχαίους κωδικούς πρόσβασης 4 έως 128 χαρακτήρων στο πρόγραμμα περιήγησης, με ασφαλή γεννήτρια τυχαίων αριθμών.
- Έλεγχος ισχύος κωδικού πρόσβασης Δοκιμάστε πόσο ισχυρός είναι ο κωδικός σας: βαθμολογία, χρόνος σπασίματος για τέσσερα σενάρια επίθεσης και συμβουλές, τοπικά στο πρόγραμμα περιήγησης.
- Δημιουργός HMAC Υπολογίστε HMAC-SHA1, SHA-256, SHA-384 ή SHA-512 με κλειδί κειμένου, hex ή Base64 και ελέγξτε υπογραφή webhook στο πρόγραμμα περιήγησής σας.