Bcrypt vs Argon2: ποιος κωδικός πρόσβασης κατακερματίζεται το 2026
Το Bcrypt και το Argon2 είναι οι δύο συναρτήσεις κατακερματισμού λέξεων τους πιο χρησιμοποιούμενους κωδικούς πρόσβασης σήμερα. Και τα δύο έχουν σχεδιαστεί για να είναι αργά και ανθεκτικά Οι επιθέσεις ωμής βίας, σε αντίθεση με τις MD5 ή SHA-256 που είναι γρήγορες ως προς την κατασκευή. Argon2a κέρδισε τον Διαγωνισμό Κατακερματισμού κωδικών πρόσβασης το 2015 και είναι πλέον η προτεινόμενη επιλογή από το OWASP για νέες εφαρμογές. Το Bcrypt παραμένει μια εξαιρετική, ώριμη και ευρέως υποστηριζόμενη επιλογή. Αυτό Αυτό το άρθρο εξηγεί τις διαφορές ακριβώς για να σας βοηθήσει να αποφασίσετε.
Γιατί ο κατακερματισμός κωδικού πρόσβασης είναι διαφορετικός
Ένας κλασικός κρυπτογραφικός κατακερματισμός όπως το SHA-256 έχει σχεδιαστεί για να είναι γρήγορος: θέλουμε να κατακερματίσουμε GB δεδομένων ανά δευτερόλεπτο. Για κωδικούς πρόσβασης, αυτή η ιδιότητα είναι προεπιλεγμένη: ένας εισβολέας που ανακτά τον πίνακα χρηστών σας μπορεί να δοκιμάσει δισεκατομμύρια κωδικούς πρόσβασης ανά δευτερόλεπτο σε ένα GPU. Μια συνάρτηση κατακερματισμού κωδικού πρόσβασης (PHF), αντίθετα, επιδιώκει να είναι:
- Αργό κατασκευαστικό, με ρυθμιζόμενη παράμετρο κόστους
- Αλμυρό, για να αποτρέψετε πίνακες ουράνιου τόξου και παράλληλες επιθέσεις σε πολλούς λογαριασμούς
- Ανθεκτικό σε εξειδικευμένο υλικό (GPU, FPGA, ASIC) για τον περιορισμό της επιτάχυνσης των αντιπάλων
Η παράμετρος salt και cost αποθηκεύονται με τον κατακερματισμό, συνήθως σε μία συμβολοσειρά
της μορφής $algo$params$sel$hash. Αυτό επιτρέπει στο κόστος να αυξάνεται με την πάροδο του χρόνου χωρίς
αναγκάζουν την άμεση μετανάστευση των παλαιών hashes.
Bcrypt: 1999, Blowfish, παράμετρος κόστους
Το Bcrypt σχεδιάστηκε από τους Niels Provos και David Mazières για το OpenBSD το 1999. Είναι
βασίζεται στον αλγόριθμο κρυπτογράφησης Blowfish, του οποίου εκμεταλλεύεται το υψηλό κόστος προετοιμασίας του
τραπέζια. Το Bcrypt εκθέτει μια μοναδική παράμετρο, το cost (ή rounds), η οποία καθορίζει το
αριθμός επαναλήψεων με τη μορφή 2^κόστος. Η αύξηση του κόστους κατά 1 διπλασιάζει τον χρόνο υπολογισμού.
Τυπική μορφή εξόδου:
$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
| | | |
| | κόστος = 12 αλάτι + κατακερματισμός στη βάση64
| παραλλαγή (2y = openbsd)
algo bcrypt
Το Bcrypt περιορίζει την είσοδο στα 72 byte: ένας μεγαλύτερος κωδικός πρόσβασης περικόπτεται σιωπηλά, το οποίο είναι γνωστή παγίδα. Η συνήθης λύση είναι να κάνετε εκ των προτέρων κατακερματισμό με SHA-256 και στη συνέχεια κωδικοποιήστε το base64 πριν bcrypt, αλλά αυτό μπορεί να εισάγει προβληματικά null byte σε ορισμένες υλοποιήσεις. Το Argon2 δεν έχει αυτό το όριο.
Argon2: 2015, νικητής PHC, 3 παραλλαγές
Το Argon2 σχεδιάστηκε από τους Alex Biryukov, Daniel Dinu και Dmitry Khovratovich. Έχει κέρδισε τον Διαγωνισμό κατακερματισμού κωδικού πρόσβασης τον Ιούλιο 2015 και τυποποιείται από το RFC 9106 (2021). Το Argon2 εκθέτει τρεις παραμέτρους:
- Κόστος μνήμης (
m): ποσότητα μνήμης που χρησιμοποιείται, σε KiB - Κόστος χρόνου (
t): αριθμός επαναλήψεων στο μπλοκ μνήμης - Παραλληλισμός (
p): αριθμός παράλληλων νημάτων
Το Argon2 υπάρχει σε τρεις παραλλαγές:
- Argon2d: πρόσβαση στη μνήμη που εξαρτάται από δεδομένα. Πιο ανθεκτικό σε επιθέσεις GPU, αλλά επιρρεπές σε επιθέσεις πλευρικού καναλιού (χρονισμός, κρυφή μνήμη).
- Argon2i: πρόσβαση στη μνήμη ανεξάρτητη από δεδομένα. Ανθεκτικό σε πλευρικά κανάλια, ελαφρώς λιγότερο ανθεκτικό σε επιθέσεις GPU.
- Argon2id: υβριδικό, ξεκινά στη λειτουργία i και στη συνέχεια μεταβαίνει στη λειτουργία d. Συνιστάται από προεπιλογή από το RFC 9106 και το OWASP.
Οι παράμετροι που προτείνονται από το OWASP το 2026 για το Argon2id: m=19456 KiB (19 MiB),
t=2, p=1. Τυπική μορφή εξόδου:
$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
| | | | |
| | base64 salt παράμετροι base64 hash
| έκδοση
algo argon2id
Γιατί συνιστάται το Argon2id
Η αντίσταση στον εξειδικευμένο εξοπλισμό είναι σήμερα το αποφασιστικό κριτήριο. Το Bcrypt χρησιμοποιεί ελάχιστα μνήμη (~4 KiB), η οποία επιτρέπει σε μια GPU υψηλής τεχνολογίας να δοκιμάσει εκατοντάδες χιλιάδες hashes ανά δευτερόλεπτο. Το Argon2id είναι σκληρό στη μνήμη: επιβάλλετε πολλά MiB μνήμης ανά προσπάθεια μειώνει δραστικά τον παραλληλισμό που μπορεί να επιτευχθεί στη GPU και κάνει τη σχεδίαση αποκλειστικών ASIC οικονομικά ασύμφορη.
Η υβριδική λειτουργία του Argon2id παρέχει επιπλέον προστασία από επιθέσεις πλευρικού καναλιού κατά το πρώτο μισό του υπολογισμού. Είναι αυτός ο συνδυασμός που δικαιολογεί τη θέση του προεπιλεγμένη πρόταση από το OWASP, NIST SP 800-63B (από την αναθεώρηση 2024) και RFC 9106.
Συγκριτικός πίνακας
| Κριτήριο | Bcrypt | Argon2id |
|---|---|---|
| Έτος | 1999 | 2015 |
| Τυποποίηση | De facto, USENIX 1999 | RFC 9106 (2021) |
| Παράμετροι | κόστος | μνήμη, χρόνος, παραλληλισμός |
| Μνήμη που χρησιμοποιείται | ~4 KiB | Δυνατότητα ρύθμισης (~19 MiB συνιστάται) |
| Σκληρή μνήμη | Όχι | Ναι |
| Αντίσταση GPU | Μέτρια | Ισχυρή |
| Αντίσταση πλευρικού καναλιού | Καλή (σταθερός χρόνος) | Καλή (λειτουργία id) |
| Όριο εισόδου | 72 byte | Κανένα |
| Σύσταση OWASP 2026 | Αποδεκτή | Προτιμώμενη |
| Ωρίμαση οικοσυστήματος | Πολύ ευρεία | Ευρεία από το ~2018 |
Απόδοση και αντίσταση στις επιθέσεις
Σε έναν σύγχρονο διακομιστή, ένα bcrypt με κόστος=12 διαρκεί περίπου 250 ms και ένα argon2id με παραμέτρους OWASP περίπου 100-300 ms ανάλογα με το μηχάνημα. Ο απόλυτος χρόνος δεν είναι το κριτήριο: αυτό που μετράει είναι την αναλογία μεταξύ του κόστους σας (ένας υπολογισμός, μία φορά ανά είσοδο) και αυτού του εισβολέα (δισεκατομμύρια υπολογισμοί στη GPU για να σπάσει μια χωματερή).
Σε ένα RTX 4090, το hashcat φτάνει περίπου τα 200.000 bcrypt/s με κόστος=12, σε σύγκριση με μερικές δεκάδες χιλιάδες argon2id στα 19 MiB. Για τον ίδιο χρόνο υπολογισμού από την πλευρά του διακομιστή, το Argon2id επιβραδύνει ο εισβολέας 5 έως 10 φορές περισσότερο από το bcrypt και το χάσμα διευρύνεται με τα νέα γενιές GPU.
Παραδείγματα PHP
Η PHP υποστηρίζει την εγγενή λειτουργία μέσω password_hash() και password_verify()
depuis PHP 7.2 pour Argon2i (και 7.3 pour Argon2id). Κατασκευαστής PHP σε μορφή και μορφή
αυτοματοποίηση.
Bcrypt
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$ok = password_verify ($password, $hash);
if (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
}
Argon2id
$opts = [
'memory_cost' => 19456, // 19 MiB
'time_cost' => 2,
'threads' => 1,
];
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
$ok = password_verify ($password, $hash);
if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
}
Vous pouvez générer ou identifier des hashs de tous type avec notre γεννητής κατακερματισμού και σημειώστε αναγνωριστικό κατακερματισμού.
Σύσταση
Για μια νέα εφαρμογή το 2026, επιλέξτε Argon2id με ρυθμίσεις
OWASP ως γραμμή βάσης (m=19456, t=2, p=1), για προσαρμογή σύμφωνα με
χρόνος στόχος (συνήθως 250 έως 500 ms). Εάν διατηρείτε μια υπάρχουσα εφαρμογή στο bcrypt, αυτό
δεν υπάρχει επείγουσα ανάγκη για μετεγκατάσταση: το bcrypt at cost=12 ή περισσότερο παραμένει ασφαλές το 2026. Εκμεταλλευτείτε
password_needs_rehash() στην επόμενη σύνδεση για σταδιακή μετεγκατάσταση χρηστών
περιουσιακά στοιχεία στο Argon2id.
Αποφύγετε απολύτως τα MD5, SHA-1 και γυμνά SHA-256 για κωδικούς πρόσβασης (βλ. σύγκριση MD5 έναντι SHA-256). Κανένας από αυτούς τους αλγόριθμους δεν έχει σχεδιαστεί για αυτή τη χρήση.
Συχνές ερωτήσεις
Είναι ακόμα ασφαλές το Bcrypt το 2026;
Ναι, με την προϋπόθεση ότι χρησιμοποιείτε επαρκές κόστος (12 ελάχιστοι, 14 αν είναι δυνατόν). Το Bcrypt δεν έχει γνωστό κρυπτογραφικό ελάττωμα. Η μόνη αδυναμία του σε σχέση με το Argon2id είναι το μικρό του αποτύπωμα μνήμη, γεγονός που το καθιστά πιο προσιτό σε επιθέσεις GPU και FPGA.
Θα πρέπει να μετεγκαταστήσουμε μια βάση δεδομένων bcrypt στο Argon2id;
Όχι επειγόντως. Μια σταδιακή μετεγκατάσταση με password_needs_rehash() είναι η προσέγγιση
συνιστάται: με κάθε επιτυχημένη σύνδεση, κατακερματίζετε εκ νέου τον κωδικό πρόσβασης στο Argon2id. Στο τέλος του
Σε λίγους μήνες, η πλειονότητα των ενεργών χρηστών μετεγκαταστάθηκε και μπορείτε να αναγκάσετε το α
επαναφορά για αδρανείς λογαριασμούς.
Ποιος είναι ο σωστός αριθμός νημάτων για το Argon2id;
Το OWASP προτείνει το p=1 από προεπιλογή. Η αύξηση του p δεν κάνει τίποτα εάν το κάνετε
Ο διακομιστής ιστού επεξεργάζεται ήδη πολλά αιτήματα παράλληλα και περιπλέκει τον συντονισμό. Δώστε προτεραιότητα
μάλλον η αύξηση του m (μνήμης) που είναι ο κύριος μοχλός αντίστασης GPU.
Τι είναι ο "αποκρυπτογραφητής bcrypt";
Δεν υπάρχει αποκρυπτογραφητής bcrypt: η λειτουργία είναι μονόδρομη από την κατασκευή. Τα εργαλεία που ισχυρίζονται ότι «αποκρυπτογραφούν» το bcrypt απλώς δοκιμάζουν λεξικά κωδικών πρόσβασης ρεύματα έναντι κατακερματισμού. Αυτό είναι ακριβώς το ίδιο με έναν εισβολέα να έχει το τραπέζι σας.
Argon2i ή Argon2id;
Argon2id σε όλες τις περιπτώσεις για κωδικούς πρόσβασης. Το Argon2i είναι λίγο περισσότερο ασφαλές έναντι πλευρικών καναλιών αλλά πιο αδύναμο έναντι επιθέσεων GPU. Συνδυάζει Argon2id οφέλη και των δύο και συνιστάται ρητά από το RFC 9106 για κατακερματισμό κωδικού πρόσβασης.
Πρέπει να προσθέσουμε πιπέρι εκτός από αλάτι;
Το αλάτι είναι αρκετό για τη συντριπτική πλειοψηφία των εφαρμογών. Μια πιπεριά (μυστικό κλειδί που αποθηκεύεται έξω από τη βάση δεδομένων και χρησιμοποιείται ως HMAC πριν από τον κατακερματισμό) προσθέτει ένα επίπεδο σε περίπτωση διαρροής βάσης δεδομένων χωρίς να θέτει σε κίνδυνο τον διακομιστή εφαρμογών. Το Argon2id δεν το παρέχει εγγενώς, πρέπει να είναι καλέστε χειροκίνητα.