Το hashing είναι μια θεμελιώδης έννοια της κυβερνοασφάλειας: ένας μονόδρομος μαθηματικός μετασχηματισμός που μετατρέπει οποιαδήποτε δεδομένα σε μια σταθερού μήκους «υπογραφή». Σε αυτόν τον οδηγό για αρχάριους θα δεις τι είναι ένα hash, γιατί χρησιμοποιείται για αποθήκευση κωδικών και έλεγχο ακεραιότητας, και θα το δοκιμάσεις μόνος σου με πραγματικές εντολές μέσα σε ένα απομονωμένο εργαστήριο.

Γιατί έχει σημασία

Κάθε φορά που δημιουργείς λογαριασμό σε μια ιστοσελίδα, ο κωδικός σου δεν αποθηκεύεται (ή τουλάχιστον δεν θα έπρεπε να αποθηκεύεται) όπως τον πληκτρολόγησες. Αντ’ αυτού αποθηκεύεται το hash του — μια φαινομενικά τυχαία σειρά χαρακτήρων από την οποία είναι πρακτικά αδύνατο να ανακτηθεί ο αρχικός κωδικός. Το ίδιο ισχύει όταν κατεβάζεις ένα αρχείο και δίπλα του βλέπεις μια «checksum»: αυτό είναι hash, και σου επιτρέπει να επιβεβαιώσεις ότι το αρχείο δεν αλλοιώθηκε στη διαδρομή.

Το hashing βρίσκεται παντού: στην αποθήκευση κωδικών (password storage), στις ψηφιακές υπογραφές, στο blockchain, στον έλεγχο ακεραιότητας αρχείων (file integrity) και στην ανίχνευση κακόβουλου λογισμικού μέσω signatures. Αν ξεκινάς τώρα στην κυβερνοασφάλεια, η κατανόηση του hashing είναι από τα πρώτα και πιο κρίσιμα θεμέλια. Όλα τα παραδείγματα εδώ προέρχονται από ένα απομονωμένο εργαστήριο (isolated lab) — καμία επίθεση σε πραγματικό σύστημα.

Βασικές έννοιες

Μια hash function (συνάρτηση κατακερματισμού) παίρνει είσοδο οποιουδήποτε μεγέθους — μια λέξη, ένα αρχείο πολλών gigabyte, οτιδήποτε — και παράγει μια έξοδο σταθερού μήκους, που ονομάζεται hash, digest ή checksum. Οι βασικές ιδιότητες μιας καλής κρυπτογραφικής hash function είναι:

  • Ντετερμινιστική (deterministic): η ίδια είσοδος δίνει πάντα το ίδιο αποτέλεσμα.
  • Μονόδρομη (one-way): από το hash είναι πρακτικά αδύνατο να βρεις την αρχική είσοδο — δεν υπάρχει «αντίστροφη» πράξη.
  • Avalanche effect: μια αλλαγή έστω και ενός χαρακτήρα στην είσοδο αλλάζει ριζικά ολόκληρο το hash.
  • Ανθεκτική σε συγκρούσεις (collision-resistant): είναι εξαιρετικά δύσκολο να βρεθούν δύο διαφορετικές είσοδοι με το ίδιο hash.

Hashing vs. Encryption

Ένα συχνό μπέρδεμα για αρχάριους: το hashing δεν είναι encryption (κρυπτογράφηση). Η κρυπτογράφηση είναι αντιστρέψιμη — με το σωστό κλειδί ανακτάς το αρχικό μήνυμα. Το hashing είναι μη αντιστρέψιμο εκ σχεδιασμού: δεν υπάρχει κλειδί που να «ξεκλειδώνει» το αρχικό δεδομένο. Γι’ αυτό είναι ιδανικό για κωδικούς — ακόμη κι αν κλαπεί η βάση δεδομένων, ο επιτιθέμενος βλέπει μόνο hashes, όχι τους κωδικούς.

Αξίζει επίσης να ξεκαθαρίσουμε τη διαφορά από το encoding (π.χ. Base64): το encoding είναι απλή, δημόσια και πλήρως αντιστρέψιμη αναπαράσταση δεδομένων — δεν προσφέρει καμία ασφάλεια. Αν δεις κάτι που αποκωδικοποιείται εύκολα πίσω στο αρχικό, δεν είναι hash. Ένα πραγματικό hash είναι υπολογιστικά αδύνατο να αντιστραφεί· ο μόνος «δρόμος» πίσω είναι να μαντέψεις την είσοδο και να ελέγξεις αν δίνει το ίδιο hash — ακριβώς αυτό κάνει το password cracking, γι’ αυτό και οι αδύναμοι κωδικοί «σπάνε» γρήγορα.

Δημοφιλείς αλγόριθμοι

  • MD5: παράγει 128-bit hash (32 hex χαρακτήρες). Θεωρείται σπασμένος (broken) λόγω γνωστών collisions — δεν πρέπει να χρησιμοποιείται για ασφάλεια, μόνο για γρήγορους μη-κρίσιμους ελέγχους.
  • SHA-1: 160-bit. Επίσης παρωχημένος (deprecated) για κρυπτογραφική χρήση.
  • SHA-256 (οικογένεια SHA-2): 256-bit, ευρέως αποδεκτός και ασφαλής για έλεγχο ακεραιότητας και υπογραφές.
  • bcrypt / argon2: ειδικοί, «αργοί» αλγόριθμοι σχεδιασμένοι ειδικά για κωδικούς, με ενσωματωμένο salt.

Πρακτικό κομμάτι: hashing στο lab

Ας το δούμε στην πράξη. Στο απομονωμένο εργαστήριο (Kali Linux) οι εντολές md5sum και sha256sum υπολογίζουν το hash μιας εισόδου. Παρακάτω υπολογίζουμε τα hashes ενός απλού string και μετά αλλάζουμε έναν μόνο χαρακτήρα, για να δούμε ζωντανά το avalanche effect.

Υπολογισμός MD5 και SHA-256 hash με md5sum και sha256sum και επίδειξη του avalanche effect σε απομονωμένο εργαστήριο
Υπολογισμός MD5 και SHA-256 hash με md5sum και sha256sum και επίδειξη του avalanche effect σε απομονωμένο εργαστήριο

Παρατήρησε δύο πράγματα: πρώτον, το MD5 είναι πάντα 32 hex χαρακτήρες ενώ το SHA-256 πάντα 64 — ανεξάρτητα από το μέγεθος της εισόδου. Δεύτερον, αλλάζοντας το 3 σε 4 στο τέλος του κωδικού, ολόκληρο το hash γίνεται εντελώς διαφορετικό. Αυτή η ευαισθησία είναι που κάνει τα hashes χρήσιμα για ανίχνευση αλλοιώσεων.

Ταυτοποίηση τύπου hash (hash identification)

Όταν ένας ethical hacker συναντά ένα άγνωστο hash σε μια εξουσιοδοτημένη αξιολόγηση, το πρώτο βήμα είναι να καταλάβει τι είδους hash είναι, ώστε να επιλέξει σωστά εργαλεία. Εργαλεία όπως το hashid και το hash-identifier αναλύουν το μήκος και τη μορφή και προτείνουν πιθανούς αλγόριθμους. Είναι κατεξοχήν εργαλεία ανάλυσης, όχι επίθεσης.

Ταυτοποίηση τύπου hash με τα εργαλεία hashid και hash-identifier σε εργαστηριακό περιβάλλον
Ταυτοποίηση τύπου hash με τα εργαλεία hashid και hash-identifier σε εργαστηριακό περιβάλλον

Το εργαλείο δεν «σπάει» τίποτα — απλώς μαντεύει τον τύπο με βάση τα χαρακτηριστικά. Ένα 32-χαρακτήρων hex string μπορεί να είναι MD5, NTLM ή άλλα· ένα 64-χαρακτήρων συνήθως SHA-256. Η σωστή ταυτοποίηση βοηθά κυρίως την αμυντική πλευρά: να καταλάβεις με ποιον (ίσως αδύναμο) αλγόριθμο αποθηκεύει κωδικούς ένα σύστημα και να προτείνεις αναβάθμιση.

Γιατί χρειάζεται το salt

Εδώ φτάνουμε στο πιο σημαντικό μάθημα άμυνας. Αν δύο χρήστες έχουν τον ίδιο κωδικό και το σύστημα αποθηκεύει «γυμνά» hashes, τότε τα hashes τους θα είναι πανομοιότυπα — ορατό με γυμνό μάτι. Αυτό διευκολύνει επιθέσεις με προϋπολογισμένους πίνακες (rainbow tables). Η λύση είναι το salt: μια τυχαία τιμή που προστίθεται στον κωδικό πριν τον hashing, μοναδική για κάθε χρήστη.

Επίδειξη salt: ίδιος κωδικός με διαφορετικό salt παράγει εντελώς διαφορετικά hashes σε lab script
Επίδειξη salt: ίδιος κωδικός με διαφορετικό salt παράγει εντελώς διαφορετικά hashes σε lab script

Στο demo βλέπεις καθαρά: χωρίς salt, η alice και ο bob με τον ίδιο κωδικό έχουν ίδιο hash. Με ένα μοναδικό salt ανά χρήστη, ο ίδιος κωδικός παράγει εντελώς διαφορετικά hashes. Έτσι ένας επιτιθέμενος δεν μπορεί να προϋπολογίσει τα hashes ούτε να δει ποιοι χρήστες μοιράζονται κωδικό. Σύγχρονοι αλγόριθμοι όπως το bcrypt και το argon2 κάνουν το salting αυτόματα.

Το εργαστηριακό περιβάλλον (isolated lab)

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

  1. Μία εικονική μηχανή Kali Linux (μέσω VirtualBox ή VMware), όπου προεγκατεστημένα βρίσκεις md5sum, sha256sum, hashid και hash-identifier.
  2. Δικά σου αρχεία-δείγματα και strings για πειραματισμό — ποτέ πραγματικές βάσεις κωδικών τρίτων.
  3. Προαιρετικά ένα μικρό script σε Python (όπως στο demo) για να δεις πώς λειτουργεί το salting «κάτω από το καπό».

Ένα χρήσιμο αμυντικό σενάριο που πρέπει να δοκιμάσεις είναι ο έλεγχος ακεραιότητας αρχείων (file integrity check): υπολογίζεις το SHA-256 ενός αρχείου, το αποθηκεύεις, και αργότερα επιβεβαιώνεις ότι το αρχείο δεν άλλαξε. Αν κάποιος αλλοιώσει έστω κι ένα byte, ο έλεγχος αποτυγχάνει.

Έλεγχος ακεραιότητας αρχείου με sha256sum -c που ανιχνεύει αλλοίωση ενός byte σε εργαστήριο
Έλεγχος ακεραιότητας αρχείου με sha256sum -c που ανιχνεύει αλλοίωση ενός byte σε εργαστήριο

Αυτή ακριβώς η τεχνική χρησιμοποιείται από αμυντικές ομάδες (blue teams) και εργαλεία File Integrity Monitoring (FIM) για να ανιχνεύουν αν κάποιος επιτιθέμενος τροποποίησε κρίσιμα αρχεία συστήματος. Το hashing δεν είναι μόνο για κωδικούς — είναι θεμελιώδες εργαλείο ανίχνευσης.

Ηθικό και νομικό πλαίσιο

Το ίδιο το hashing ενός δικού σου string είναι εντελώς ακίνδυνο. Οι έννοιες όμως συνδέονται και με το password cracking — και εκεί μπαίνουν αυστηρά όρια. Ως αρχάριος, να θυμάσαι:

  • Μόνο δικά σου δεδομένα: υπολόγιζε και ανάλυε hashes μόνο από κωδικούς και αρχεία που σου ανήκουν ή σου έχουν δοθεί ρητά για δοκιμή.
  • Καμία πραγματική βάση: ποτέ δεν κατεβάζεις ή δεν επεξεργάζεσαι διαρρευσμένες βάσεις κωδικών τρίτων — είναι παράνομο και ανήθικο.
  • Εξουσιοδότηση για cracking: το «σπάσιμο» hashes (π.χ. με hashcat) επιτρέπεται μόνο με γραπτή άδεια και μέσα σε καθορισμένο scope μιας νόμιμης αξιολόγησης, ή σε δικά σου lab δεδομένα.
  • Έμφαση στην άμυνα: ο στόχος της μάθησης είναι να χτίζεις πιο ασφαλή συστήματα — σωστός αλγόριθμος, salt, αργές συναρτήσεις — όχι να επιτίθεσαι.

Βασικά συμπεράσματα

  • Ένα hash είναι μια μονόδρομη, σταθερού μήκους «υπογραφή» δεδομένων — το hashing δεν είναι αντιστρέψιμο όπως η κρυπτογράφηση.
  • Καλές hash functions είναι ντετερμινιστικές, μονόδρομες, με avalanche effect και ανθεκτικές σε collisions.
  • Το MD5 και το SHA-1 θεωρούνται σπασμένα για ασφάλεια· χρησιμοποίησε SHA-256 για ακεραιότητα και bcrypt/argon2 για κωδικούς.
  • Το salt κάνει τον ίδιο κωδικό να παράγει διαφορετικά hashes ανά χρήστη, εξουδετερώνοντας rainbow tables.
  • Ο έλεγχος ακεραιότητας με sha256sum -c είναι απλό αλλά ισχυρό αμυντικό εργαλείο ανίχνευσης αλλοιώσεων.
  • Εξάσκηση μόνο σε δικά σου δεδομένα ή σε απομονωμένο, νόμιμο εργαστήριο — ποτέ σε πραγματικές, ξένες βάσεις κωδικών.

Από τη θεωρία στην πράξη. Η Audax Cybersecurity προσφέρει επαγγελματικές υπηρεσίες offensive security — penetration testing & offensive validation — ενώ για όσους ξεκινούν το ταξίδι τους στο ethical hacking, το #1 ελληνικό βιβλίο «Ethical Hacking — Η Κρυφή Γνώση» είναι ο ιδανικός οδηγός.

Erevos AI · Managed CTEM

Θέλετε συνεχή επικύρωση της ασφάλειάς σας — όχι έλεγχο μία φορά τον χρόνο;

Το Erevos AI είναι η ετήσια, managed υπηρεσία CTEM της Audax — ενοποιεί exposure mapping, penetration testing, adversary emulation, detection validation & remediation σε έναν συνεχή, αποδεικτικό κύκλο. Human-led. Machine-scaled. Technically proven. Ευθυγραμμισμένο με NIS2 & DORA.

Ανακαλύψτε το Erevos AI →
Offensive Security · Penetration Testing

Χρειάζεστε Penetration Testing για τον οργανισμό σας;

Περιγράψτε το scope του ελέγχου μέσα από το δομημένο ερωτηματολόγιο και λάβετε εξατομικευμένη τεχνική & οικονομική προσφορά από την ομάδα Offensive Security της Audax. Χωρίς αυτόματη τιμή ή δέσμευση — η προσφορά αποστέλλεται μετά από τεχνική αξιολόγηση του scope.

Ζητήστε προσφορά Penetration Testing →