Το hashing είναι μια διαδικασία, η οποία επιτρέπει σε κάποιον να εξασφαλίσει ότι ο κωδικός πρόσβασης που χρησιμοποιεί είναι ασφαλής και δεν μπορεί να ανακτηθεί από hackers. Οι hashing αλγόριθμοι είναι λειτουργίες μιας κατεύθυνσης. Παίρνουν έναν κωδικό και τον μετατρέπουν σε ένα «fingerprint» σταθερού πάντα μήκους. Ο hashed κωδικός δεν μπορεί να αποκρυπτογραφηθεί εύκολα. Ουσιαστικά αυτή η διαδικασία μοιάζει με την κρυπτογράφηση. Αν λοιπόν ένας hacker παραβιάσει ένα σύστημα, δεν θα μπορεί να αποκτήσει πρόσβαση στον κωδικό.
Πολλά sites χρησιμοποιούν αυτή τη μέθοδο για να ασφαλίσουν τους κωδικούς των χρηστών τους.
Η διαδικασία έχει ως εξής:
- Αρχικά, ο χρήστης δημιουργεί ένα λογαριασμό.
- Έπειτα, γίνεται hashing του κωδικού και αποθήκευσή του στη βάση δεδομένων.
- Όταν ο χρήστης επιχειρήσει να συνδεθεί στο site, το hash του κωδικού που εισήγαγε συγκρίνεται με τον αποθηκευμένο κωδικό και αν είναι ίδια, ο χρήστης συνδέεται κανονικά στο site. Διαφορετικά, εμφανίζεται ένα γενικό μήνυμα που λέει ότι έγινε κάποιο λάθος στα credentials, χωρίς να αναφέρει συγκεκριμένα αν το λάθος εντοπίστηκε στο όνομα χρήστη ή στον κωδικό, ώστε να δυσκολέψει τους επίδοξους hackers.
Επιθέσεις για «σπάσιμο» των hashes
H Newpark Resources χτυπήθηκε από Ransomware
Πρόστιμο ΜΕΤΑ: Παράνομη Συλλογή Δεδομένων στην Νότια Κορέα
Έργο τέχνης του ρομπότ Ai-Da πωλήθηκε για $ 1,3 εκατ.
Brute Force και Dictionary επιθέσεις
Μια Brute Force επίθεση δοκιμάζει όλους τους πιθανούς συνδυασμούς χαρακτήρων, με ένα συγκεκριμένο μήκος. Αυτό σημαίνει ότι κάποια στιγμή ο κωδικός σίγουρα θα σπάσει. Ωστόσο, δεν πρόκειται για εύκολη διαδικασία. Ακόμα και οι πολύ μικροί κωδικοί πρόσβασης μπορεί να χρειαστούν χιλιάδες χρόνια (κυριολεκτικά) για να σπάσουν μέσω της Brute Force επίθεσης, αφού ο hacker δεν μπορεί να γνωρίζει πότε θα πετύχει το σωστό συνδυασμό χαρακτήρων.
Οι Dictionary επιθέσεις χρησιμοποιούν ένα αρχείο που περιέχει συνηθισμένες λέξεις, φράσεις ή κωδικούς πρόσβασης, που μπορούν να έχουν χρησιμοποιηθεί από κάποιον ως κωδικός πρόσβασης. Οι hackers έχουν πρόσβαση σε βάσεις δεδομένων που διαθέτουν τους 100.000 (ή και περισσότερους) κορυφαίους κωδικούς πρόσβασης. Η επίθεση κάνει hashing σε αυτούς τους κωδικούς και συγκρίνει το hash με τον κωδικό πρόσβασης που θέλει να σπάσει. Πρόκειται για μια πιο γρήγορη μέθοδο από τη brute force επίθεση.
Ωστόσο, υπάρχει και μια άλλη διαδικασία, γνωστή ως «salting», η οποία εμποδίζει αυτές τις επιθέσεις πιο αποτελεσματικά.
Salting
Ο λόγος για τον οποίο μπορούν να χρησιμοποιηθούν οι παραπάνω επιθέσεις και να είναι αποτελεσματικές είναι ότι το hashing γίνεται πάντα με τον ίδιο τρόπο. Υπάρχει η δυνατότητα να κάνουμε τυχαίο το hashing, προσθέτοντας στους κωδικούς πρόσβασης μια τυχαία συμβολοσειρά, που ονομάζεται salt, ΠΡΙΝ το hashing.
Τι πρέπει και τι δεν πρέπει να κάνουμε στη salting διαδικασία:
Αρχικά, τι δεν πρέπει να κάνουμε:
- Δεν πρέπει να χρησιμοποιούμε το ίδιο salt για όλους τους κωδικούς πρόσβασης
- Δεν πρέπει να χρησιμοποιούμε μικρά σε μήκος salt
- Δεν πρέπει να χρησιμοποιούμε παράξενα διπλά hashes (π.χ.: hash (hash (hash (‘mypass’))))
Τι πρέπει να κάνουμε:
- Πρέπει να δημιουργούμε τυχαία salt με τη βοήθεια ειδικών προγραμμάτων (Cryptographically Secure Pseudo-Random Number Generator-CSPRNG)
- Πρέπει να δημιουργούμε ένα νέο μοναδικό τυχαίο salt για κάθε κωδικό πρόσβασης
- Πρέπει να δημιουργούμε μεγάλα σε μήκος salt
Η salting διαδικασία έχει ως εξής:
- Αρχικά, δημιουργούμε ένα πολύ μεγάλο salt με τη βοήθεια ενός CSPRNG
- Έπειτα, προσθέτουμε το salt στον κωδικό και στη συνέχεια κάνουμε το hashing
- Αποθηκεύουμε το salt και το hash στη βάση δεδομένων
Έλεγχος κωδικού πρόσβασης:
- Πάρτε το salt και hash από τη βάση δεδομένων
- Προσθέστε το salt στον κωδικό που υποβλήθηκε και κάντε hashing
- Συγκρίνετε τα hashes. Εάν είναι ίδια, ο κωδικός πρόσβασης είναι σωστός