1. Αποθήκευση κωδικού πρόσβασης (ο σωστός τρόπος):
* hashing: Αντί να αποθηκεύει απευθείας τον κωδικό πρόσβασης του χρήστη, το σύστημα αποθηκεύει ένα κρυπτογραφικό * hash * του κωδικού πρόσβασης. Ένα hash είναι μια λειτουργία μονής κατεύθυνσης. Είναι εύκολο να υπολογίσετε το hash από τον κωδικό πρόσβασης, αλλά σχεδόν αδύνατο να αντλήσετε τον αρχικό κωδικό πρόσβασης από το hash.
* Salting: Για να βελτιωθεί περαιτέρω η ασφάλεια, προστίθεται ένα τυχαίο * αλάτι * στον κωδικό πρόσβασης πριν από το hashing. Το αλάτι είναι μια μοναδική, τυχαία παραγόμενη σειρά χαρακτήρων. Αυτό καθιστά πολύ πιο δύσκολο για τους επιτιθέμενους να χρησιμοποιούν προ-υπολογισμένα τραπέζια κατακερματισμού (πίνακες ουράνιου τόξου) για να σπάσουν τους κωδικούς πρόσβασης, ακόμη και αν αποκτήσουν πρόσβαση στη βάση δεδομένων.
* Το `Salt 'είναι συνήθως αποθηκευμένο παράλληλα με τον κωδικό πρόσβασης` hash` στην εγγραφή του χρήστη.
* Ισχυροί αλγόριθμοι κατακερματισμού: Τα σύγχρονα συστήματα χρησιμοποιούν ισχυρούς αλγόριθμους κατακερματισμού όπως:
* bcrypt: Προσαρμοστικός αλγόριθμος κατακερματισμού που είναι αργός και υπολογιστικά ακριβός, καθιστώντας τον πολύ ανθεκτικό σε επιθέσεις βίαιης δύναμης. Περιλαμβάνει παραγωγή και αποθήκευση αλατιού στο ίδιο το hash.
* argon2: Ένας πιο σύγχρονος και σκληρός αλγόριθμος κατακερματισμού, συχνά θεωρείται ο διάδοχος του BCrypt.
* Scrypt: Μια άλλη συνάρτηση βασικής παραγωγής που έχει σχεδιαστεί για να είναι υπολογιστικά εντατική, καθιστώντας πιο δύσκολο τους κωδικούς πρόσβασης.
2. Διαδικασία σύνδεσης/ελέγχου ταυτότητας:
1. Εισαγωγή χρήστη: Ο χρήστης εισάγει το όνομα χρήστη και τον κωδικό πρόσβασής του στη φόρμα σύνδεσης.
2. Ανακτήστε το αλάτι: Το σύστημα ανακτά το * αλάτι * που σχετίζεται με το όνομα χρήστη που εισάγεται από τη βάση δεδομένων χρήστη.
3. Hashing με αλάτι: Το σύστημα λαμβάνει τον κωδικό πρόσβασης που έχει εισαχθεί από τον χρήστη και το ανακτημένο *αλάτι *, τα συνδυάζει και στη συνέχεια εφαρμόζει τον ίδιο αλγόριθμο κατακερματισμού που χρησιμοποιήθηκε όταν ο κωδικός πρόσβασης αποθηκεύτηκε αρχικά.
4. σύγκριση: Το προκύπτον hash από το βήμα 3 συγκρίνεται με τον αποθηκευμένο κωδικό πρόσβασης για τον χρήστη στη βάση δεδομένων.
5. επαλήθευση:
* Εάν τα δύο hashes match: Είναι πολύ πιθανό ο χρήστης να εισαγάγει τον σωστό κωδικό πρόσβασης. Ο χρήστης έχει πιστοποιηθεί και δημιουργείται μια συνεδρία.
* Εάν τα hashes δεν ταιριάζουν: Ο κωδικός πρόσβασης που εισάγεται είναι λανθασμένος. Ο χρήστης αρνείται την πρόσβαση και συνήθως λαμβάνει ένα μήνυμα σφάλματος.
Γιατί αυτό είναι ασφαλές:
* Κωρίς κείμενο κωδικούς πρόσβασης: Το σύστημα * Ποτέ * δεν αποθηκεύει τον πραγματικό κωδικό πρόσβασης στο PlainText, οπότε ακόμη και αν η βάση δεδομένων διακυβεύεται, οι επιτιθέμενοι δεν θα έχουν άμεση πρόσβαση στους κωδικούς πρόσβασης.
* Το αλάτι αποτρέπει επιθέσεις τραπεζιού ουράνιου τόξου: Το μοναδικό αλάτι για κάθε χρήστη καθιστά αναποτελεσματικά τα τραπέζια του ουράνιου τόξου (προ-πληροφοριακούς πίνακες). Ένας εισβολέας θα πρέπει να δημιουργήσει ένα τραπέζι ουράνιου τόξου για * κάθε αλάτι, το οποίο είναι υπολογιστικά απαγορευτικό.
* Το αργό hashing αποτρέπει τις επιθέσεις Brute-Force: Οι σύγχρονοι αλγόριθμοι κατακερματισμού (όπως οι Bcrypt, Argon2 και Scrypt) είναι σκόπιμα σχεδιασμένοι για να είναι αργές. Αυτό σημαίνει ότι ένας εισβολέας δεν μπορεί να δοκιμάσει γρήγορα έναν μεγάλο αριθμό κωδικών πρόσβασης.
Παράδειγμα κώδικα (Conceptual - Python με BCrypt):
`` `Python
Εισαγωγή bcrypt
def hash_password (κωδικός πρόσβασης):
"" "Χτυπάει έναν κωδικό πρόσβασης χρησιμοποιώντας Bcrypt με τυχαία παραγόμενο αλάτι." ""
# Δημιουργήστε ένα αλάτι
αλάτι =bcrypt.gensalt ()
# Hash ο κωδικός πρόσβασης χρησιμοποιώντας το αλάτι
hashed_password =bcrypt.hashpw (password.encode ('utf-8'), αλάτι)
επιστροφή hashed_password, αλάτι #return τόσο το hash όσο και το αλάτι, έτσι ώστε το αλάτι να μπορεί να αποθηκευτεί με το hash
def verify_password (entred_password, αποθηκευμένο_hash, αποθηκευμένο_SALT):
"" "Επαληθεύει αν ο κωδικός πρόσβασης που εισάγεται ταιριάζει με το αποθηκευμένο hash." ""
# Hash ο κωδικός πρόσβασης που εισάγεται με το αποθηκευμένο αλάτι
hashed_entered_password =bcrypt.hashpw (entered_password.encode ('utf-8'), αποθηκευμένο_salt)
# Συγκρίνετε το δημιουργημένο hash με το αποθηκευμένο hash
επιστροφή hashed_entered_password ==αποθηκευμένο_hash
Password ="MySecretPassWord123"
hashed_password, αλάτι =hash_password (κωδικός πρόσβασης)
Entered_PassWord ="MySecretPassWord123" #User παρέχει κατά τη διάρκεια της σύνδεσης
αποθηκευμένο_hash =b '$ 2B $ 12 $ ek11we0gqj8dk9j7cqh9yoc9/s8/6rxlg13n/l604qg1v14k6ydna' # Παράδειγμα - Αποθηκευμένο από πάνω
αποθηκευμένο_SALT =B '$ 2B $ 12 $ EK11WE0GQJ8DK9J7CQH9YO' # Παράδειγμα - Αποθηκευμένο από πάνω
Εάν η επαλήθευση_PassWord (entered_password, αποθηκευμένο_hash, αποθηκευμένο_SALT):
εκτύπωση ("Κωδικός επαλήθευσης! Συνδεθείτε επιτυχής.")
αλλού:
εκτύπωση ("Εσφαλμένος κωδικός πρόσβασης. Η σύνδεση απέτυχε.")
`` `
Σημαντικές εκτιμήσεις:
* Πολυπλοκότητα κωδικού πρόσβασης: Επιβάλλετε κανόνες πολυπλοκότητας κωδικού πρόσβασης (ελάχιστο μήκος, απαιτούμενοι χαρακτήρες) για να καταστήσετε τους κωδικούς πρόσβασης πιο δύσκολο να μαντέψετε.
* Περιορισμός ρυθμού: Εφαρμογή του περιορισμού των επιτοκίων στις προσπάθειες σύνδεσης για την πρόληψη επιθέσεων βίαιης δύναμης. Κλείστε τους λογαριασμούς μετά από έναν ορισμένο αριθμό αποτυχημένων προσπαθειών.
* Έλεγχος ταυτότητας δύο παραγόντων (2FA): Χρησιμοποιήστε το 2FA για ένα επιπλέον στρώμα ασφάλειας. Ακόμη και αν ο κωδικός πρόσβασης είναι συμβιβασμένος, ένας εισβολέας θα χρειαστεί ακόμα ένα δεύτερο παράγοντα (π.χ. κωδικός από μια εφαρμογή για κινητά).
* Τακτικοί έλεγχοι ασφαλείας: Διεξάγετε τακτικούς ελέγχους ασφαλείας για τον εντοπισμό και την αντιμετώπιση πιθανών τρωτών σημείων.
* Διατηρήστε τις βιβλιοθήκες ενημερωμένες: Κρατήστε τις βιβλιοθήκες και τις εξαρτήσεις που ενημερώνονται για να επωφεληθούν από τα τελευταία μπαλώματα ασφαλείας.
* Μηχανισμοί επαναφοράς κωδικού πρόσβασης: Εφαρμόστε ασφαλείς μηχανισμούς επαναφοράς κωδικών πρόσβασης χρησιμοποιώντας ερωτήσεις επαλήθευσης ηλεκτρονικού ταχυδρομείου ή ερωτήσεις ασφαλείας.
Χρησιμοποιώντας αυτές τις αρχές, τα συστήματα μπορούν να επαληθεύσουν αποτελεσματικά τους κωδικούς πρόσβασης, προστατεύοντας τα δεδομένα χρήστη από συμβιβασμό. Είναι μια κρίσιμη πτυχή της συνολικής ασφάλειας.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα