Το είδος του κωδικού πρόσβασης που πρέπει να δημιουργήσετε έχει να κάνει πολύ με τον τρόπο αποθήκευσης του κωδικού πρόσβασης.
Πριν από χρόνια, οι τυχαίοι κωδικοί πρόσβασης οκτώ χαρακτήρων που αποτελούνταν από κεφαλαία και πεζά γράμματα, σύμβολα και αριθμούς ήταν πραγματικά δύσκολο να σπάσουν. Σε ορισμένες περιπτώσεις, ένας τέτοιος κωδικός πρόσβασης χρειάστηκε χρόνια για να σπάσει.
Χάρη στη σημερινή μεταβαλλόμενη τεχνολογία και τα ενοικιαζόμενα μηχανήματα, αυτός ο χρόνος έχει μειωθεί σε ώρες. Πώς όμως αποθηκεύονται αυτοί οι κωδικοί πρόσβασης στην αρχή;
Πώς αποθηκεύονται οι κωδικοί πρόσβασης στο Διαδίκτυο
Τα συστήματα δεν αποθηκεύουν κωδικούς πρόσβασης χρηστών απευθείας σε αρχεία ή βάσεις δεδομένων, επειδή οι εισβολείς μπορούν να καταλάβουν τη βάση δεδομένων όπου τα συστήματα διατηρούν τους κωδικούς πρόσβασης. Αντίθετα, τα συστήματα κρυπτογραφούν τους κωδικούς πρόσβασης χρηστών και οι εισβολείς αντιμετωπίζουν μια κρυπτογραφημένη έκδοση κάθε κωδικού πρόσβασης.
Υπάρχουν ορισμένοι αλγόριθμοι που χρησιμοποιούν τα συστήματα για την κρυπτογράφηση κωδικών πρόσβασης. Ένας από αυτούς τους αλγόριθμους είναι ο συμμετρικός αλγόριθμος.
Ο συμμετρικός αλγόριθμος είναι ένας τύπος κρυπτογράφησης όπου μπορείτε να χρησιμοποιήσετε το ίδιο κλειδί τόσο για κρυπτογράφηση όσο και για αποκρυπτογράφηση. Το κλειδί που θα χρησιμοποιήσετε για την κρυπτογράφηση των δεδομένων είναι το ίδιο τόσο για κρυπτογράφηση όσο και για αποκρυπτογράφηση. Η ασφάλεια των συμμετρικών αλγορίθμων εγκυμονεί ορισμένους κινδύνους καθώς υπάρχει μόνο ένα κλειδί για την αποκρυπτογράφηση. Για το λόγο αυτό, τα συστήματα γενικά δεν χρησιμοποιούν συμμετρικούς αλγόριθμους για την κρυπτογράφηση κωδικού πρόσβασης.Γενικά, η μέθοδος που χρησιμοποιούν τα συστήματα για την κρυπτογράφηση είναι οι αλγόριθμοι κατακερματισμού. Οι αλγόριθμοι κατακερματισμού προορίζονται για την επαλήθευση και την αναπαράσταση της ακεραιότητας των δεδομένων, όχι για την κρυπτογράφηση δεδομένων. Οι αλγόριθμοι κατακερματισμού μετατρέπουν δεδομένα σε κατακερματισμό σταθερού μεγέθους. Αυτοί οι κατακερματισμοί συνήθως αντιπροσωπεύουν ένα μοναδικό κατακερματισμό δεδομένων.
Χάρη στον αλγόριθμο κατακερματισμού, εάν ένας εισβολέας έχει καταλάβει τη βάση δεδομένων κωδικών πρόσβασης, ο εισβολέας δεν μπορεί να έχει πρόσβαση στον κωδικό πρόσβασης από εδώ. Υπάρχει μια πολύ σημαντική απόχρωση που πρέπει να δώσετε προσοχή εδώ. Θεωρητικά, ένας εισβολέας που θέτει σε κίνδυνο ένα σύστημα που χρησιμοποιεί τον ίδιο αλγόριθμο κατακερματισμού για όλους τους συνδυασμούς κωδικών πρόσβασης μπορεί να συγκρίνει τα αποτελέσματα που λαμβάνονται. Εάν ο εισβολέας παράγει την ίδια τιμή ως αποτέλεσμα αυτών των συγκρίσεων, ο εισβολέας έχει ανακαλύψει ποια είναι η ανοιχτή έκδοση του κωδικού πρόσβασης. Αυτή η μέθοδος έχει να κάνει με τη δοκιμή και το λάθος, και αυτή η μορφή επίθεσης είναι γενικά ονομάζεται επίθεση ωμής βίας.
Στις αρχές της δεκαετίας του 2000, θα μπορούσαν να χρειαστούν εκατοντάδες χρόνια για να δοκιμάσετε όλους τους συνδυασμούς για κωδικούς πρόσβασης 8 χαρακτήρων κρυπτογραφημένους με δημοφιλείς αλγόριθμους κατακερματισμού. Φυσικά, αυτό δεν περιλαμβάνει πολύ απλούς συνδυασμούς όπως "123456" ή "mypassword" σε αυτό το σύνολο. Με την ανάπτυξη των σημερινών τεχνολογιών λογισμικού και υλικού, η μέθοδος διάρρηξης κωδικών πρόσβασης έχει επίσης αλλάξει πολύ.
Ο αντίκτυπος των αναδυόμενων GPU
Οι δυνατότητες παράλληλης επεξεργασίας δεδομένων των επεξεργαστών γραφικών (GPU) έχουν βελτιωθεί με την πάροδο του χρόνου. Οι GPU δεν είναι ικανές να εκτελούν ευέλικτες λειτουργίες όπως οι CPU γενικής χρήσης. Έτσι κι ας υπάρχουν τόσοι πολλοί πυρήνες και παράλληλη επεξεργαστική ισχύς, δεν έχει νόημα να τους χρησιμοποιείτε για σχεδόν κάθε πρόβλημα όπως ΕΠΕΞΕΡΓΑΣΤΗΣ.
Ωστόσο, είναι δυνατό να εκτελεστούν ορισμένοι αλγόριθμοι κατακερματισμού που χρησιμοποιούνται για κωδικούς πρόσβασης αρκετά αποτελεσματικά στη GPU. Οι υπολογιστές κατακερματισμοί ανά δευτερόλεπτο που μπορείτε να επιτύχετε με τις παραδοσιακές CPU έχουν αυξηθεί πάρα πολύ με τις νέες πλατφόρμες GPU.
Για να πάρετε μια ιδέα, εξετάστε τους αριθμούς κατακερματισμού ανά δευτερόλεπτο αλγορίθμων κατακερματισμού όπως NTLM, MD5 και SHA1 στον παρακάτω πίνακα. Αρκεί, προς το παρόν, να γνωρίζουμε ότι αυτοί οι αλγόριθμοι είναι απλώς ένας αλγόριθμος κατακερματισμού. Για να δημιουργήσω αυτόν τον πίνακα, χρησιμοποίησα ένα σύστημα συμπλέγματος που αποτελείται από 25 AMD Radeon GPU.
Αλγόριθμος |
Κατακερματισμοί ανά δευτερόλεπτο |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512Crypt |
364.000 |
Bcrypt |
71.000 |
Scrypt |
33.000 |
Όπως μπορείτε να δείτε, με ένα τέτοιο σύστημα, μπορείτε να δημιουργήσετε hashes NTLM 350 δισεκατομμύρια φορές ανά δευτερόλεπτο. Αυτό σημαίνει ότι μπορείτε να δοκιμάσετε όλους τους συνδυασμούς ενός κωδικού πρόσβασης 8 χαρακτήρων σε λιγότερο από 6 ώρες. Επιπλέον, το υλικό σε αυτό το παράδειγμα ανήκει σε χρόνια πριν. Φανταστείτε τη σημερινή δύναμη διάσπασης κωδικών πρόσβασης.
Τι πρέπει να κάνουν οι προγραμματιστές λογισμικού;
Ο τρόπος με τον οποίο πρέπει να ακολουθήσουν οι προγραμματιστές είναι αρκετά απλός: θα πρέπει να προτιμούν αλγόριθμους που χρειάζονται περισσότερο χρόνο για τον υπολογισμό των τιμών κατακερματισμού κατά την κρυπτογράφηση κωδικών πρόσβασης. Οι προγραμματιστές πρέπει να μάθουν όχι μόνο για την απόδοση του αλγορίθμου που χρησιμοποιούν στην CPU, αλλά και για το πόσο ανθεκτικός είναι απέναντι στον κόσμο της GPU.
Εάν οι προγραμματιστές εργάζονται με ένα πλαίσιο λογισμικού που αντιμετωπίζει επίσης διαδικασίες κρυπτογράφησης κωδικού πρόσβασης, όπως το Django, το Ruby on Rails, και Spring Security, θα πρέπει να ελέγξουν εάν έχουν ληφθεί οι σωστές αποφάσεις στο πλαίσιο όσον αφορά ασφάλεια.
Για παράδειγμα, Σχεδιάσει, μία από τις πιο χρησιμοποιούμενες βιβλιοθήκες για λειτουργίες χρηστών στο Ruby on Rails, χρησιμοποιεί το Bcrypt ως τον προεπιλεγμένο αλγόριθμο κατακερματισμού. Σας επιτρέπει επίσης να χρησιμοποιήσετε μια άλλη μέθοδο ως αλγόριθμο κατακερματισμού. Ο αλγόριθμος Bcrypt είναι αξιόπιστος καθώς χρειάζεται ακόμη πολύς χρόνος για να σπάσει η GPU.
Συνοπτικά, όσο περισσότερος χρόνος διαρκεί ο υπολογισμός της τιμής κατακερματισμού, τόσο πιο ασφαλής είστε.
Πόσους χαρακτήρες πρέπει να έχει ο κωδικός πρόσβασής σας;
Κάθε επιπλέον χαρακτήρας που χρησιμοποιείτε θα αυξάνει γεωμετρικά τον αριθμό των δοκιμών και λαθών που απαιτούνται για να σπάσει τον κωδικό πρόσβασής σας και να κάνει τον κωδικό πρόσβασής σας πιο ασφαλή.
Ας εξετάσουμε αυτή την κατάσταση μέσα από δύο διαφορετικά σενάρια. Εξετάστε τις τιμές στον παραπάνω πίνακα για τον αλγόριθμο κατακερματισμού NTLM και φανταστείτε ότι θα προσπαθήσετε να σπάσετε τον κωδικό πρόσβασης. Φανταστείτε ότι στοχεύετε κωδικούς πρόσβασης οκτώ ή περισσότερων χαρακτήρων.
Αριθμός χαρακτήρων |
Κεφάλαια/πεζά γράμματα και αριθμοί |
Κεφάλαια/πεζά γράμματα, αριθμοί και ειδικά σύμβολα |
8 |
λιγότερο από 1 λεπτό |
2 λεπτά |
9 |
2 λεπτά |
2 ώρες |
10 |
2 ώρες |
1 εβδομάδα |
11 |
6 μέρες |
2 χρόνια |
12 |
1 χρόνος |
200 χρόνια |
13 |
περισσότερα από 100 χρόνια |
περισσότερα από 1000 χρόνια |
Όταν εξετάζετε τον πίνακα, μπορείτε να δείτε ότι η χρήση ενός κωδικού πρόσβασης τουλάχιστον 12 χαρακτήρων είναι ασφαλής όταν χρησιμοποιείτε όλους τους συνδυασμούς κεφαλαίων/πεζών γραμμάτων, αριθμών και ειδικών συμβόλων. Εάν δεν χρησιμοποιείτε ειδικά σύμβολα, τότε αποδεικνύεται ότι πρέπει να χρησιμοποιήσετε 13 χαρακτήρες ως ασφαλές μήκος κωδικού πρόσβασης. Εάν χρησιμοποιούσατε τη μέθοδο κατακερματισμού Bcrypt αντί για κατακερματισμό NTLM σε αυτό το σύστημα, 8 χαρακτήρες θα ήταν αρκετοί. Ωστόσο, δεν έχετε την ευκαιρία να γνωρίζετε με ποια μέθοδο κατακερματισμού ένα σύστημα που εισάγετε μέσω του ιστού διατηρεί τον κωδικό πρόσβασής σας. Γι' αυτό θα πρέπει να εξετάσετε όλες τις πιθανότητες.
Το κύριο πρόβλημα για τους προγραμματιστές λογισμικού είναι ότι είναι σχεδόν αδύνατο να πειστούν οι χρήστες να έχουν έναν κωδικό πρόσβασης τουλάχιστον 12 χαρακτήρων. Σήμερα, μπορούμε να πούμε ότι το ποσοστό χρήσης κωδικού πρόσβασης αυτού του μήκους είναι χαμηλό. Επομένως, σύμφωνα με το σενάριο χρήσης του ανεπτυγμένου συστήματος, θα χρειαστεί να βρεθεί μια μέση λύση που θα γίνει αποδεκτή από τους χρήστες για να βελτιώσουν την ασφάλεια του κωδικού πρόσβασής τους.
μια τελευταία πρόταση για τους προγραμματιστές είναι να ελέγξουν όχι μόνο το ελάχιστο μήκος αλλά και το μέγιστο μήκος των εισροών που προέρχονται από τις φόρμες που έχετε παρουσιάσει στον χρήστη. Ειδικά όταν ενεργοποιείτε τη χρήση ενός αργού υπολογισμού αλγόριθμου κατακερματισμού όπως το Bcrypt για ασφάλεια Για λόγους, ενδέχεται να αντιμετωπίσετε κάποιους κινδύνους εάν δεν ελέγχετε το μέγιστο μήκος του κωδικού πρόσβασης που έχει εισαχθεί από ο χρήστης. Για παράδειγμα, οι εισβολείς μπορούν να εκτελέσουν επιθέσεις δοκιμάζοντας δεκάδες κωδικούς πρόσβασης 100 χιλιάδων χαρακτήρων ταυτόχρονα με ορισμένα ειδικά προετοιμασμένα αιτήματα. Σε μια τέτοια περίπτωση, είναι πολύ πιθανό το σύστημά σας να μην ανταποκρίνεται σε άλλους χρήστες.
Συμβουλές προς Τελικούς Χρήστες
Ορίστε το μήκος του κωδικού πρόσβασής σας τουλάχιστον 12 χαρακτήρες και φροντίστε να συμπεριλάβετε συνδυασμούς κεφαλαίων και πεζών γραμμάτων, αριθμούς και σύμβολα. Μην ξεχνάτε ποτέ ότι τα συστήματα που αποθηκεύουν τον κωδικό πρόσβασής σας μπορεί να παραβιαστούν και οι πληροφορίες σας να υποστούν κατάχρηση. Δεν μπορείτε να γνωρίζετε ποιους αλγόριθμους χρησιμοποιεί ένα σύστημα για την κρυπτογράφηση του κωδικού πρόσβασής σας, επομένως εξαρτάται αποκλειστικά από εσάς να λάβετε προφυλάξεις και να δημιουργήσετε ισχυρούς κωδικούς πρόσβασης.