Τι είναι το αλάτι σε ένα hash κωδικού πρόσβασης Linux και γιατί έχει σημασία;

Τελευταία ενημέρωση: 04/12/2025
Συγγραφέας: Ισαάκ
  • Το salt είναι μια τυχαία συμβολοσειρά που προστίθεται στον κωδικό πρόσβασης πριν από το hash για να επιτευχθούν μοναδικά hashes ανά χρήστη.
  • Linux Αποθηκεύει hash, salt και αλγόριθμο στο /etc/shadow, ενισχύοντας την ασφάλεια έναντι επιθέσεων λεξικού και πινάκων ουράνιου τόξου.
  • Οι καλές πρακτικές απαιτούν μεγάλα, τυχαία και μοναδικά άλατα, μαζί με ισχυρούς αλγόριθμους κατακερματισμού και βάσεις δεδομένων καλά προστατευμένο.
  • Η προσθήκη κωδικών πρόσβασης θα πρέπει να ενσωματωθεί σε ευρύτερες πολιτικές ασφαλείας που περιλαμβάνουν ισχυρούς κωδικούς πρόσβασης, MFA και διαχειριστές κωδικών πρόσβασης.

αλάτι στο hash κωδικού πρόσβασης στο Linux

Αν εργάζεστε με συστήματα GNU/Linux ή απλώς ανησυχείτε για την ασφάλεια των λογαριασμών σας, πιθανότατα έχετε ακούσει για αλάτι στο hash κωδικού πρόσβασηςΕίναι μια από εκείνες τις έννοιες που αναφέρονται πολύ, αλλά συχνά γίνονται μόνο κατά το ήμισυ κατανοητές: ακούγεται τεχνική, αλλά στην πραγματικότητα κάνει τη διαφορά μεταξύ ενός συστήματος που είναι εύκολο να παραβιαστεί και ενός που είναι πολύ πιο ανθεκτικό στις επιθέσεις.

Με λίγα λόγια, το αλάτι είναι ένα βασικό στοιχείο για να καταστούν τα hashes κωδικών πρόσβασης απρόβλεπταΛειτουργεί προσθέτοντας τυχαία δεδομένα πριν από την εφαρμογή του αλγορίθμου κατακερματισμού, έτσι ώστε, ακόμη και αν δύο χρήστες έχουν τον ίδιο κωδικό πρόσβασης, το αποτέλεσμα που είναι αποθηκευμένο στη βάση δεδομένων να είναι διαφορετικό. Από εκεί και πέρα, η συγκεκριμένη υλοποίηση στο Linux, η σχέση της με το /etc/shadow, εργαλεία όπως το mkpasswd και οι σύγχρονες βέλτιστες πρακτικές ασφαλείας αποτελούν έναν ολόκληρο κόσμο από μόνες τους, τον οποίο θα διερευνήσουμε λεπτομερώς.

Τι ακριβώς είναι το αλάτι σε ένα hash κωδικού πρόσβασης;

ορισμός του salt στο hash κωδικού πρόσβασης

Στην κρυπτογραφία, ένα αλάτι (αλάτι) είναι ένα τυχαία σειρά χαρακτήρων η οποία προστίθεται στον κωδικό πρόσβασης ενός χρήστη πριν από την εφαρμογή μιας συνάρτησης κατακερματισμού. Ο στόχος είναι ο κατακερματισμός που προκύπτει να είναι μοναδικός ακόμα κι αν ο κωδικός πρόσβασης απλού κειμένου είναι ο ίδιος για πολλούς χρήστες.

Όταν ένας χρήστης δημιουργεί ή αλλάζει τον κωδικό πρόσβασής του, το σύστημα δημιουργεί έναν τυχαίο αλάτιΤο συνδυάζει με τον κωδικό πρόσβασης (πριν, μετά ή σε συγκεκριμένη μορφή ανάλογα με το σχήμα) και εφαρμόζει έναν αλγόριθμο κατακερματισμού σε αυτόν τον συνδυασμό, όπως π.χ. SHA-256 o SHA-512Ο κωδικός πρόσβασης δεν αποθηκεύεται στη βάση δεδομένων, αλλά μάλλον κατακερματισμός του (κωδικός πρόσβασης + αλάτι), και στα περισσότερα σχήματα το ίδιο το αλάτι αποθηκεύεται επίσης μαζί με το hash.

Αυτή η τεχνική αποδίδει πολλά από τα τεχνικές επίθεσης που βασίζονται σε προυπολογισμένα hashes, όπως οι πίνακες ουράνιου τόξου, και περιπλέκει σε μεγάλο βαθμό τις επιθέσεις λεξικού και βίαιης βίας σε μεγάλη κλίμακα. Ένας εισβολέας δεν μπορεί πλέον να εκμεταλλευτεί το γεγονός ότι πολλοί χρήστες μοιράζονται έναν κωδικό πρόσβασης, επειδή ο καθένας θα έχει διαφορετικό hash.

Είναι σημαντικό να καταλάβουμε ότι το αλάτι δεν είναι από μόνο του μυστικό: Δεν είναι κωδικός πρόσβασης ή ιδιωτικό κλειδίΗ λειτουργία του είναι να εισάγει τυχαιότητα και μοναδικότητα στη διαδικασία κατακερματισμού. Η ασφάλεια εξακολουθεί να εξαρτάται από τη χρήση ισχυροί κωδικοί πρόσβασης y κατάλληλοι αλγόριθμοι κατακερματισμού, κατά προτίμηση ειδικά σχεδιασμένο για κωδικούς πρόσβασης (όπως bcrypt, scrypt, Argon2), αν και πολλά κλασικά συστήματα Linux χρησιμοποιούν παραλλαγές του SHA-256 ή του SHA-512.

Πώς λειτουργεί η προσθήκη κωδικού πρόσβασης βήμα προς βήμα

Πώς λειτουργεί η προσθήκη κωδικού πρόσβασης

Η διαδικασία αλάτισης μπορεί να συνοψιστεί σε μια σειρά από αρκετά απλά βήματα, αλλά με τεράστιο αντίκτυπο στην ασφάλεια:

  Πώς να εντοπίσετε κακόβουλες διεργασίες με το Process Explorer και το VirusTotal

Καταρχάς, όταν ένας χρήστης εγγράφεται ή αλλάζει τον κωδικό πρόσβασής του, το σύστημα δημιουργεί ένα μοναδικό και τυχαίο αλάτι για αυτό το πιστοποιητικό. Αυτό το αλάτι έχει συνήθως επαρκές μήκος (για παράδειγμα, 16 byte ή περισσότερο) και λαμβάνεται από μια κρυπτογραφικά ασφαλή γεννήτρια τυχαίων αριθμών.

Στη συνέχεια, ο κωδικός πρόσβασης που επιλέγει ο χρήστης συνδυάζεται με αυτό το αλάτι για να σχηματίσει ένα ενδιάμεση αλυσίδαΑυτός ο συνδυασμός μπορεί να είναι τόσο απλός όσο η συνένωση salt + password ή μπορεί να έχει μια πιο σύνθετη μορφή που ορίζεται από το σχήμα κατακερματισμού. Το σημαντικό είναι ότι κάθε χρήστης καταλήγει με έναν διαφορετικό συνδυασμό.

Στη συνέχεια, ένα μονόδρομος αλγόριθμος κατακερματισμούΤο αποτέλεσμα είναι μια φαινομενικά τυχαία συμβολοσειρά, το hash, σταθερού μήκους, η οποία θα αποθηκευτεί στη βάση δεδομένων μαζί με το salt. Στα σύγχρονα συστήματα, αναζητούνται αλγόριθμοι που παράγουν μακριές και πολύπλοκες εξόδουςΑυτό αυξάνει τον χώρο αναζήτησης και καθιστά τις επιθέσεις brute-force πιο ακριβές.

Τέλος, όταν ο χρήστης συνδεθεί, το σύστημα ανακτά ξανά τον κωδικό πρόσβασης που έχει εισάγει. σχετικό αλάτι Από τη βάση δεδομένων, επαναλαμβάνει την ίδια ακριβώς διαδικασία συνδυασμού και κατακερματισμού και συγκρίνει το αποτέλεσμα με το αποθηκευμένο κατακερματισμό. Εάν ταιριάζουν, γνωρίζει ότι ο κωδικός πρόσβασης είναι σωστός χωρίς να χρειάζεται να γνωρίζει το απλό κείμενο.

Αυτός ο μηχανισμός διασφαλίζει ότι ακόμη και αν διαρρεύσει η βάση δεδομένων, ο εισβολέας θα δει μόνο μεμονωμένα hashes με τα δικά τους άλαταΑντί για ένα σύνολο συγκρίσιμων hashes, η διακοπή μιας επίθεσης δεν είναι μαγική, αλλά γίνεται σημαντικά πιο υπολογιστικά ακριβή.

Πλεονεκτήματα της χρήσης αλατιού σε hashes κωδικών πρόσβασης

Πλεονεκτήματα της χρήσης αλατιού σε κωδικούς πρόσβασης

Ο κύριος λόγος για τη χρήση αλατίσματος είναι ότι ενισχύει την ασφάλεια των αποθηκευμένων κωδικών πρόσβασης ενάντια σε μια μεγάλη ποικιλία επιθέσεων. Αξίζει όμως να αναφερθούν λεπτομερώς τα συγκεκριμένα οφέλη.

Πρώτον, το αλάτισμα παρέχει αντίσταση σε επιθέσεις λεξικούΧωρίς το salt, ένας εισβολέας μπορεί να προετοιμάσει μια τεράστια λίστα με κοινούς κωδικούς πρόσβασης και τα hashes τους και απλώς να τα συγκρίνει με την κλεμμένη βάση δεδομένων. Με ένα μοναδικό salt ανά χρήστη, αυτά τα προ-υπολογισμένα hashes καθίστανται άχρηστα, επειδή κάθε συνδυασμός κωδικού πρόσβασης + salt δημιουργεί μια διαφορετική τιμή.

Δεύτερον, η χρήση αλατιού μειώνει την αποτελεσματικότητα του τραπέζια ουράνιου τόξουΑυτές είναι απλώς προ-υπολογισμένες βάσεις δεδομένων hashes για δημοφιλείς κωδικούς πρόσβασης για την επιτάχυνση της ανάκτησης. Και πάλι, επειδή το αποτέλεσμα εξαρτάται από το συγκεκριμένο salt, αυτοί οι πίνακες που έχουν σχεδιαστεί για μη αλατισμένα hashes καθίστανται άχρηστοι ή, τουλάχιστον, εξαιρετικά αναποτελεσματικοί.

Ένα άλλο σαφές πλεονέκτημα είναι ότι βελτιώνει την ιδιωτικότητα σε περίπτωση διαρροήςΑκόμα κι αν ένας εισβολέας αποκτήσει πρόσβαση στον πίνακα χρηστών με το hash και το salt του, δεν θα είναι σε θέση να εντοπίσει γρήγορα ποιος έχει τον ίδιο κωδικό πρόσβασης με τους άλλους ή να εξαπολύσει εύκολα μαζικές επιθέσεις. Κάθε λογαριασμός απαιτεί ατομική προσοχή, κάτι που συνήθως δεν είναι πρακτικό σε μεγάλη κλίμακα.

  Ειδοποίηση για τη νέα απάτη στο WhatsApp: Bizum και βιντεοκλήσεις για κλοπή λογαριασμών και χρημάτων

Επιπλέον, το αλάτισμα προσθέτει πολυπλοκότητα στην επιθέσεις ωμής βίαςΑντί να μπορεί να δοκιμάσει έναν υποψήφιο κωδικό πρόσβασης σε όλα τα hashes ταυτόχρονα, ο εισβολέας αναγκάζεται να λάβει υπόψη το salt κάθε χρήστη, πολλαπλασιάζοντας το συνολικό φόρτο εργασίας. Εάν αυτό συνδυαστεί με έναν αργό και παραμετροποιήσιμο αλγόριθμο κατακερματισμού (όπως το bcrypt ή το Argon2), το κόστος της επίθεσης αυξάνεται ακόμη περισσότερο.

Τέλος, το salting είναι μια τεχνική που προσαρμόζεται καλά στην τεχνολογική εξέλιξη. Ακόμα και καθώς ο εξοπλισμός υπολογιστών βελτιώνεται και εμφανίζονται νέες επιθέσεις, ο συνδυασμός εύρωστης χασίς και μοναδικού αλατιού Διατηρεί ένα υψηλό και κλιμακωτό επίπεδο δυσκολίας: μπορείτε να αυξήσετε το μήκος του αλγορίθμου, να ενισχύσετε τον αλγόριθμο, να αυξήσετε το υπολογιστικό κόστος κ.λπ.

Πώς το Linux εφαρμόζει την αλάτιση κωδικού πρόσβασης (/etc/shadow)

Σε συστήματα Linux και άλλες παραλλαγές *NIX, οι κωδικοί πρόσβασης χρηστών δεν αποθηκεύονται στο /etc/passwd, αλλά στο αρχείο / κλπ / σκιάΑυτό το αρχείο, στο οποίο έχει πρόσβαση μόνο ο υπερχρήστης, αποθηκεύει τα hashes του κωδικού πρόσβασης μαζί με πρόσθετες πληροφορίες και είναι το σημείο όπου φαίνεται καθαρά η χρήση του salt και του αλγορίθμου hash.

Οι γραμμές στο /etc/shadow έχουν παρόμοια δομή με:

χρήστης:$id$sal$hash:additional_fields…

Το σύμβολο $ Διαχωρίστε τα διαφορετικά μέρη. Το πρώτο μέρος μετά το όνομα χρήστη υποδεικνύει το τύπος αλγορίθμου χρησιμοποιείται. Για παράδειγμα, $ $ 1 συνήθως αντιπροσωπεύει MD5, $ $ 5 SHA-256 και $ $ 6 SHA-512, ο οποίος είναι ο πιο κοινός αλγόριθμος στις σύγχρονες διανομές επειδή προσφέρει μεγαλύτερη ασφάλεια από παλαιότερα σχήματα που βασίζονται σε DES ή MD5.

Αφού εμφανιστεί το αναγνωριστικό αλγορίθμου, άλαςκαι μετά το προκύπτον hashΌλα αυτά βρίσκονται στο ίδιο πεδίο. Όταν ένας κωδικός πρόσβασης επικυρώνεται, το σύστημα διαβάζει αυτό το αναγνωριστικό, το salt, εφαρμόζει τον αλγόριθμο που αντιστοιχεί στον κωδικό πρόσβασης που έχει εισαχθεί και συγκρίνει το υπολογισμένο hash με το αποθηκευμένο.

Αν θέλετε να ελέγξετε γρήγορα ποιοι χρήστες έχουν κρυπτογραφημένους κωδικούς πρόσβασης και ποιος αλγόριθμος χρησιμοποιείται, μπορείτε να χρησιμοποιήσετε μια εντολή όπως grep '\$' /etc/shadowΣε αυτό το πλαίσιο, το σύμβολο του δολαρίου ($) χρησιμοποιείται για τον εντοπισμό γραμμών με hashes σε σύγχρονη μορφή. Το σύμβολο πρέπει να διαχωρίζεται με ανάστροφη κάθετο, επειδή στις κανονικές εκφράσεις σημαίνει "τέλος γραμμής".

Οι λογαριασμοί χωρίς κωδικό πρόσβασης ή οι κλειδωμένοι λογαριασμοί συνήθως εμφανίζουν μια τιμή όπως αυτή σε αυτό το πεδίο. ! o * αντί για ένα hash με δολάρια, που υποδεικνύει ότι δεν μπορεί να γίνει έλεγχος ταυτότητας χρησιμοποιώντας έναν τυπικό κωδικό πρόσβασης. Αυτή η δομή καθιστά σαφές ένα πράγμα: Το Linux ενσωματώνει το salting στη μορφή του αποθήκευση κωδικοί πρόσβασης εγγενώς.

Διαφορά μεταξύ κατακερματισμού κωδικού πρόσβασης και αλατισμού

Είναι σημαντικό να γίνει σαφής διάκριση μεταξύ δύο εννοιών που μερικές φορές συγχέονται: κατακερματισμός y αλάτιΟ κατακερματισμός κωδικού πρόσβασης είναι η διαδικασία με την οποία ένας κωδικός πρόσβασης μετατρέπεται σε μια μη αναγνωρίσιμη τιμή χρησιμοποιώντας έναν μονόδρομο αλγόριθμο. Ο διακομιστής δεν χρειάζεται ποτέ να γνωρίζει τον αρχικό κωδικό πρόσβασης, μόνο για να επαληθεύσει ότι ο χρήστης γνωρίζει τον σωστό κωδικό πρόσβασης, επειδή παράγει τον ίδιο κατακερματισμό.

  Τι είναι το WINUX: Linux με ελεύθερη ψυχή και την εμφάνιση και την αίσθηση των Windows

Το πρόβλημα είναι ότι αν δύο κωδικοί πρόσβασης είναι ίδιοι, το Το ανάλατο χασίς θα είναι επίσης πανομοιότυποΑυτό επιτρέπει σε έναν εισβολέα να συγκρίνει και να ομαδοποιεί χρήστες με βάση τον κωδικό πρόσβασης ή να χρησιμοποιεί προ-υπολογισμένους πίνακες. Επιπλέον, εάν ο αλγόριθμος κατακερματισμού είναι γρήγορος και σχεδιασμένος για την ακεραιότητα των δεδομένων (όπως ο απλός SHA-256), γίνεται πιο ευάλωτος σε μαζικές επιθέσεις brute-force.

Το αλάτισμα έρχεται ακριβώς για να λύσει αυτή την αδυναμία: πρόκειται για προσθήκη τυχαίων δεδομένων στον κωδικό πρόσβασης πριν από τον κατακερματισμό. Το αποτέλεσμα είναι ότι ακόμη και αν δύο χρήστες επιλέξουν το "casa" ως κωδικό πρόσβασής τους, τα hashes στη βάση δεδομένων θα είναι εντελώς διαφορετικά, επειδή ο ένας θα έχει, για παράδειγμα, το "casa+7Ko#" και ο άλλος το "casa8p?M" ως συμβολοσειρά pre-hash.

Έτσι, ο κατακερματισμός και ο αλατισμός δεν ανταγωνίζονται, αλλά μάλλον αλληλοσυμπληρώνονται. Ο κατακερματισμός παρέχει το ιδιότητα μονοκατευθυντικότητας και ευκολία επαλήθευσης· το αλάτι παρέχει μοναδικότητα και ανθεκτικότητα έναντι μαζικών επιθέσεωνΜια ασφαλής εφαρμογή αποθήκευσης κωδικών πρόσβασης συνδυάζει και τις δύο τεχνικές, ιδανικά χρησιμοποιώντας έναν αλγόριθμο σχεδιασμένο για τον σκοπό αυτό, με διαμορφώσιμο κόστος.

Χρήση του salt στο Linux με mkpasswd

Σε περιβάλλοντα GNU/Linux και άλλα συστήματα UnixΈνας πολύ πρακτικός τρόπος για να πειραματιστείτε με το αλάτισμα είναι το εργαλείο mkpasswdΑυτή η εντολή χρησιμοποιείται για τη δημιουργία κρυπτογραφημένοι κωδικοί πρόσβασης με ασφάλεια και συνήθως ενσωματώνεται σε διαδικασίες δημιουργίας χρηστών, σενάρια διαχείρισης κ.λπ.

Η βασική σύνταξη του mkpasswd σάς επιτρέπει να καθορίσετε τον κωδικό πρόσβασης που θα κρυπτογραφηθεί και μια σειρά από επιλογές όπως τον τύπο του αλγορίθμου (για παράδειγμα, des, md5, sha-256, sha-512) χρησιμοποιώντας την επιλογή -mΣτα σύγχρονα συστήματα, το λογικό είναι να επιλέγουμε SHA-512 τουλάχιστον, ή με ακόμη πιο ισχυρά σχήματα εάν τα υποστηρίζει η διανομή.

Η ιδιαίτερα ενδιαφέρουσα επιλογή στο πλαίσιο του αλατίσματος είναι -SΕπιτρέποντας προσθέστε ένα αλάτι στον κωδικό πρόσβασης πριν από την κρυπτογράφηση. Εάν δεν καθοριστεί χειροκίνητα, το mkpasswd μπορεί να δημιουργήσει ένα τυχαίο αλάτι σε κάθε εκτέλεσηέτσι ώστε ακόμη και χρησιμοποιώντας τον ίδιο κωδικό πρόσβασης σύνδεσης, το hash που προκύπτει να είναι διαφορετικό κάθε φορά.

Αυτό μπορεί εύκολα να επαληθευτεί: αν κρυπτογραφήσετε το "password123" αρκετές φορές με το mkpasswd, χρησιμοποιώντας SHA-512 και ένα τυχαίο salt, θα λάβετε εντελώς διαφορετικά hashes. Ωστόσο, αν περάσετε την ίδια τιμή salt χρησιμοποιώντας -S, το hash θα είναι πάντα το ίδιο, επειδή ο συνδυασμός κωδικού πρόσβασης + salt δεν αλλάζει.

Χάρη σε αυτό το εργαλείο είναι πολύ εύκολο Προετοιμάστε κωδικούς πρόσβασης κρυπτογραφημένους με salt για προσθήκη σε αρχεία διαμόρφωσης, χειροκίνητη διαχείριση χρηστών ή δοκιμή συμπεριφοράς αλάτισης χωρίς να χρειάζεται να προγραμματίσετε τίποτα.

Τι είναι η ψηφιακή υγιεινή;
σχετικό άρθρο:
Ψηφιακή υγιεινή: ασφάλεια, ευεξία και τάξη στην διαδικτυακή σας ζωή