Γεννήτρια κωδικών πρόσβασης scrypt
Υπολογίστε το hash ενός κωδικού πρόσβασης με το scrypt, τη συνάρτηση παραγωγής κλειδιού που απαιτεί πολλή μνήμη. Ορίστε το salt, το κόστος (N), το μέγεθος μπλοκ (r), την παραλληλοποίηση (p) και το μήκος κλειδιού και λάβετε το hash σε μορφή συμβολοσειράς PHC, δεκαεξαδική μορφή και Base64. Η λειτουργία εκτελείται στον περιηγητή σας.
Είσοδος
Έξοδος
Readme
Τι είναι το scrypt;
Το scrypt είναι μια συνάρτηση κατακερματισμού κωδικών πρόσβασης ή συνάρτηση παραγωγής κλειδιού, η οποία σχεδιάστηκε από τον Colin Percival το 2009 και δημοσιεύτηκε ως RFC 7914. Όπως τα bcrypt και Argon2, είναι σκόπιμα αργή, ώστε κάθε δοκιμή να κοστίζει χρόνο στον επιτιθέμενο. Απαιτεί επίσης πολλή μνήμη: κάθε hash γεμίζει ένα μεγάλο τμήμα μνήμης και το διαβάζει ξανά με απρόβλεπτη σειρά, γεγονός που καθιστά την παραβίαση με GPU και εξειδικευμένα κυκλώματα πολύ πιο δαπανηρή. Το scrypt χρησιμοποιείται για την αποθήκευση κωδικών πρόσβασης σε πολλά πλαίσια ανάπτυξης ιστού, στις τυπικές βιβλιοθήκες των Node.js, Python και Go, καθώς και σε πορτοφόλια κρυπτονομισμάτων, όπως τα keystore του Ethereum.
Περιγραφή εργαλείου
Αυτό το εργαλείο υπολογίζει το hash ενός κωδικού πρόσβασης με scrypt στο πρόγραμμα περιήγησής σας. Ξεκινά με ένα τυχαίο salt και τις ρυθμίσεις που προτείνει το OWASP για την αποθήκευση κωδικών πρόσβασης. Μπορείτε να αλλάξετε το salt, το κόστος (N), το μέγεθος μπλοκ (r), τον βαθμό παραλληλισμού (p) και το μήκος κλειδιού. Το hash είναι διαθέσιμο ως συμβολοσειρά PHC για βιβλιοθήκες διαχείρισης κωδικών πρόσβασης, καθώς και σε δεκαεξαδική μορφή και Base64 για κώδικα που αποθηκεύει ξεχωριστά το salt και τις παραμέτρους.
Δυνατότητες
- Υπολογίζει το hash ενός κωδικού πρόσβασης με scrypt, όπως ορίζεται στο RFC 7914
- Δημιουργεί τυχαίο salt 16 byte, με κουμπί για τη δημιουργία νέου
- Δέχεται δικό σας salt, ώστε να αναπαραγάγετε ένα hash που δημιουργήθηκε αλλού
- Ορίζει το κόστος (N) από 2⁴ έως 2²⁰, το μέγεθος μπλοκ (r), τον βαθμό παραλληλισμού (p) και το μήκος κλειδιού
- Παρέχει το hash ως συμβολοσειρά PHC, σε δεκαεξαδική μορφή και σε Base64
- Εμφανίζει την πρόοδο των αργών hash και προειδοποιεί όταν οι ρυθμίσεις απαιτούν πάνω από 1 GiB μνήμης
- Εκτελείται στο πρόγραμμα περιήγησής σας, επομένως ο κωδικός πρόσβασης δεν φεύγει ποτέ από τη συσκευή σας
Παράμετροι
| Παράμετρος | Προεπιλογή | Τι κάνει |
|---|---|---|
| Κόστος (N) | 131072 (2¹⁷) | Αριθμός μπλοκ μνήμης. Ο διπλασιασμός του διπλασιάζει τον χρόνο και τη μνήμη. |
| Μέγεθος μπλοκ (r) | 8 | Μέγεθος κάθε μπλοκ, 128 × r byte. Επηρεάζει επίσης αναλογικά τον χρόνο και τη μνήμη. |
| Παραλληλισμός (p) | 1 | Αριθμός ανεξάρτητων εκτελέσεων. Πολλαπλασιάζει τον χρόνο, όχι τη μνήμη. |
| Μήκος κλειδιού | 32 byte | Μήκος του hash. |
Η απαιτούμενη μνήμη είναι 128 × N × r byte, δηλαδή 128 MiB με τις προεπιλεγμένες ρυθμίσεις.
Μορφές εξόδου
Η συμβολοσειρά PHC περιέχει όλα όσα χρειάζονται για τον μελλοντικό έλεγχο του κωδικού πρόσβασης: τον αλγόριθμο, τις παραμέτρους, το salt και το hash, με το salt και το hash σε Base64 χωρίς συμπλήρωση:
$scrypt$ln=17,r=8,p=1$<salt>$<hash>Το ln είναι ο λογάριθμος βάσης 2 του N, επομένως ln=17 σημαίνει N = 131072. Αυτή είναι η μορφή που διαβάζουν και γράφουν η passlib της Python, η βιβλιοθήκη scrypt της Rust και το πακέτο @phc/scrypt του Node.js.
Τα πεδία HEX και Base64 περιέχουν μόνο το hash, όπως επιστρέφεται από τα crypto.scrypt στο Node.js, hashlib.scrypt στην Python και scrypt.Key στη Go. Αποθηκεύστε δίπλα του το salt και τις παραμέτρους.
Πώς λειτουργεί
Το πεδίο salt διαβάζεται ως κείμενο και κωδικοποιείται σε UTF-8, όπως όταν περνάτε ένα salt ως συμβολοσειρά στο crypto.scrypt του Node.js. Το τυχαίο salt αποτελείται από 16 τυχαία byte, γραμμένα ως 32 δεκαεξαδικοί χαρακτήρες, και αυτοί οι 32 χαρακτήρες είναι το salt που κατακερματίζεται. Ο κωδικός πρόσβασης κωδικοποιείται επίσης σε UTF-8. Το hash υπολογίζεται σε νήμα παρασκηνίου, ώστε η σελίδα να παραμένει αποκρίσιμη, και ο υπολογισμός ξεκινά ξανά όταν αλλάξετε οποιαδήποτε τιμή εισόδου.
Συμβουλές
- Χρησιμοποιείτε νέο τυχαίο salt για κάθε κωδικό πρόσβασης. Ο ίδιος κωδικός πρόσβασης με το ίδιο salt δίνει πάντα το ίδιο hash.
- Το OWASP προτείνει τουλάχιστον N = 2¹⁷, r = 8, p = 1 για την αποθήκευση κωδικών πρόσβασης. Αυξήστε το N όσο περισσότερο αντέχει ο διακομιστής σας για κάθε σύνδεση.
- Το Node.js περιορίζει το scrypt σε 32 MiB μνήμης από προεπιλογή. Περάστε μεγαλύτερη τιμή
maxmemστοcrypto.scryptόταν χρησιμοποιείτε N = 2¹⁷ ή μεγαλύτερο με r = 8. - Για να ελέγξετε ένα hash από άλλο σύστημα, εισαγάγετε τον ίδιο κωδικό πρόσβασης, το ίδιο salt και τις ίδιες παραμέτρους και συγκρίνετε τα αποτελέσματα.