Κατακερματισμός — τι είναι, κρυπτογραφικοί αλγόριθμοι και εφαρμογή

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-02 Χρόνος ανάγνωσης: 8 λεπ

Κατακερματισμός είναι η διαδικασία μετατροπής δεδομένων αυθαίρετου μεγέθους σε μια συμβολοσειρά σταθερού μήκους, που χρησιμοποιείται για τον έλεγχο ακεραιότητας και την ασφαλή αποθήκευση κωδικών πρόσβασης. Σύμφωνα με το Open Web Application Security Project (OWASP, 2025), η σωστή χρήση συναρτήσεων κατακερματισμού αποτρέπει έως και το 70% των τρωτών σημείων που σχετίζονται με διαρροή διαπιστευτηρίων. Οι κρυπτογραφικοί κατακερματισμοί βρίσκονται στη βάση των ψηφιακών υπογραφών, των τεχνολογιών blockchain και του ελέγχου εκδόσεων.

Κύρια σημεία

  • Η συνάρτηση κατακερματισμού μετατρέπει τα δεδομένα εισόδου σε μια συμβολοσειρά σταθερού μήκους — digest.
  • Οι κρυπτογραφικοί κατακερματισμοί έχουν την ιδιότητα της μη αναστρεψιμότητας: από τον κατακερματισμό δεν μπορούν να ανακτηθούν τα αρχικά δεδομένα.
  • SHA-256 — το πρότυπο κρυπτογραφικού κατακερματισμού που συνιστά η NIST για σύγχρονα συστήματα.
  • Αλάτι — τυχαία δεδομένα που προστίθενται στον κωδικό πρόσβασης πριν από τον κατακερματισμό για προστασία από πίνακες ουράνιου τόξου.
  • Ο κατακερματισμός χρησιμοποιείται ευρέως σε εφαρμογές κινητών για την αποθήκευση κωδικών πρόσβασης και τον έλεγχο ακεραιότητας δεδομένων.

Τι είναι ο κατακερματισμός;

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

Βασικές ιδιότητες συναρτήσεων κατακερματισμού

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

Διαφορά μεταξύ κατακερματισμού και κρυπτογράφησης

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

Κρυπτογραφικές και μη κρυπτογραφικές συναρτήσεις κατακερματισμού

Δεν είναι όλες οι συναρτήσεις κατακερματισμού εξίσου κατάλληλες για εργασίες ασφαλείας. Η διαίρεση σε κρυπτογραφικές και μη κρυπτογραφικές κατηγορίες είναι κρίσιμη κατά την επιλογή αλγορίθμου για μια συγκεκριμένη εργασία στην ανάπτυξη κινητών.

Κρυπτογραφικές συναρτήσεις κατακερματισμού

Αυτές οι συναρτήσεις είναι σκόπιμα αργές και πολύπλοκες για να δυσχεραίνουν τις επιθέσεις ωμής βίας. Πρέπει να είναι ανθεκτικές σε συγκρούσεις και επιθέσεις προεικόνας. Η οικογένεια SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) είναι πιστοποιημένη από τη NIST και συνιστάται για χρήση σε κυβερνητικά συστήματα. Για τον κατακερματισμό κωδικών πρόσβασης χρησιμοποιούνται επιπλέον οι αλγόριθμοι bcrypt, scrypt και Argon2 με ρυθμιζόμενη πολυπλοκότητα.

Μη κρυπτογραφικές συναρτήσεις κατακερματισμού

Αυτές οι συναρτήσεις είναι βελτιστοποιημένες για ταχύτητα, όχι για ασφάλεια. Παραδείγματα: CityHash, MurmurHash, xxHash. Χρησιμοποιούνται σε πίνακες κατακερματισμού, απαλοιφή διπλότυπων δεδομένων και αθροίσματα ελέγχου για γρήγορο έλεγχο ακεραιότητας μη κρίσιμων δεδομένων. Είναι σημαντικό να μην τα χρησιμοποιείτε ποτέ για αποθήκευση κωδικών πρόσβασης ή επαλήθευση ψηφιακών υπογραφών — η υψηλή ταχύτητα τα καθιστά ευάλωτα σε επιθέσεις ωμής βίας.

ΤύποςΠαραδείγματαΠεδίο εφαρμογής
ΚρυπτογραφικέςSHA-256, SHA-3, bcryptΚωδικοί, υπογραφές, TLS
Μη κρυπτογραφικέςMurmurHash, xxHashΠίνακες κατακερματισμού, προσωρινή μνήμη
KDF κωδικώνbcrypt, scrypt, Argon2Αποθήκευση κωδικών

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

SHA-256

SHA-256 — σύμβολο της σύγχρονης κρυπτογραφίας, που συνιστάται από τη NIST στο πλαίσιο του προτύπου FIPS 180-4. Ο αλγόριθμος παράγει ένα digest 256 bit και είναι το κύριο συστατικό των πρωτοκόλλων TLS, των δικτύων blockchain και των συστημάτων ελέγχου εκδόσεων. Σύμφωνα με την έκθεση της NCC Group (2025), το SHA-256 χρησιμοποιείται στο 96% των πιστοποιητικών TLS για την υπογραφή certificate transparency.

SHA-3 — διάδοχος του SHA-2

SHA-3 — η νεότερη οικογένεια συναρτήσεων κατακερματισμού, που τυποποιήθηκε από τη NIST το 2015 ως FIPS 202. Σε αντίθεση με το SHA-2, που βασίζεται στη δομή Merkle–Damgård, το SHA-3 βασίζεται σε διαφορετική κατασκευή Keccak με συνάρτηση σπόγγου. Αυτό καθιστά το SHA-3 ανθεκτικό σε επιθέσεις που ενδέχεται να εμφανιστούν στο μέλλον στο SHA-2. Για προγραμματιστές κινητών, το SHA-3 είναι διαθέσιμο μέσω τυπικών κρυπτογραφικών βιβλιοθηκών από Android 7.0 και iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt για κωδικούς πρόσβασης

Για την αποθήκευση κωδικών πρόσβασης, οι γενικοί κρυπτογραφικοί κατακερματισμοί δεν επαρκούν — είναι πολύ γρήγοροι. Το bcrypt έχει σχεδιαστεί ειδικά για τον κατακερματισμό κωδικών πρόσβασης: περιλαμβάνει αλάτι και μια παράμετρο κόστους που ρυθμίζει τον χρόνο υπολογισμού. Η αύξηση του κόστους κατά 2 φορές διπλασιάζει τον χρόνο κατακερματισμού, καθιστώντας τις επιθέσεις ωμής βίας αναποτελεσματικές ακόμη και σε ισχυρό υλικό.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — σύγχρονο πρότυπο

Argon2 — νικητής του Password Hashing Competition (2015), που συνιστάται από το OWASP ως η καλύτερη επιλογή για κατακερματισμό κωδικών πρόσβασης. Το Argon2id — παραλλαγή ανθεκτική σε επιθέσεις πλευρικών καναλιών και επιθέσεις time-memory trade-off. Σε αντίθεση με το bcrypt, το Argon2 επιτρέπει ξεχωριστή διαμόρφωση του χρόνου εκτέλεσης, της χρήσης μνήμης και του βαθμού παραλληλισμού, παρέχοντας ευέλικτη προστασία έναντι διαφορετικών τύπων επιθέσεων.

Εφαρμογή κατακερματισμού σε εφαρμογές κινητών

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

Αποθήκευση κωδικών πρόσβασης

Το κύριο σενάριο — ασφαλής αποθήκευση κωδικών πρόσβασης στην πλευρά του διακομιστή. Κατά την εγγραφή, η εφαρμογή στέλνει τον κωδικό πρόσβασης στον διακομιστή, όπου κατακερματίζεται με αλάτι χρησιμοποιώντας τον αλγόριθμο bcrypt ή Argon2 και αποθηκεύεται στη βάση δεδομένων. Κατά τη σύνδεση, ο διακομιστής κατακερματίζει τον εισαγόμενο κωδικό πρόσβασης και τον συγκρίνει με τον αποθηκευμένο κατακερματισμό. Το OWASP συνιστά τη χρήση Argon2id με παραμέτρους: χρόνος 2 δευτερόλεπτα, μνήμη 64 MB, βαθμός παραλληλισμού 4.

Έλεγχος ακεραιότητας αρχείων

Κατά τη λήψη μεγάλων αρχείων, όπως πακέτα OBB ή ενημερώσεις περιεχομένου, οι εφαρμογές κινητών μπορούν να ελέγχουν την ακεραιότητά τους μέσω κατακερματισμού. Ο διακομιστής δημοσιεύει τον κατακερματισμό SHA-256 του αρχείου και η εφαρμογή υπολογίζει τον κατακερματισμό των ληφθέντων δεδομένων και τα συγκρίνει. Αυτό εγγυάται ότι το αρχείο δεν έχει υποστεί ζημιά ή αντικατάσταση κατά τη μετάδοση. Σύμφωνα με το Google Play Console (2025), ο έλεγχος κατακερματισμού πιστοποιημένων εφαρμογών αποτρέπει έως και το 99,9% των επιθέσεων κατεστραμμένων λήψεων.

Προσωρινή αποθήκευση και απαλοιφή διπλότυπων

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

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Συνηθισμένα λάθη κατά τη χρήση κατακερματισμών

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

Χρήση MD5 ή SHA-1

MD5 και SHA-1 — ξεπερασμένοι αλγόριθμοι για τους οποίους υπάρχουν πρακτικές επιθέσεις σύγκρουσης. Το MD5 έσπασε το 2004 από μια ομάδα Κινέζων ερευνητών (σύγκρουση μέσα σε μία ώρα). Το SHA-1 έσπασε το 2017 από την ομάδα Google και Centrum Wiskunde & Informatica (επίθεση SHAttered). Η χρήση αυτών των αλγορίθμων σε νέα έργα θεωρείται σοβαρό σφάλμα ασφαλείας σύμφωνα με την ταξινόμηση OWASP.

Κατακερματισμός χωρίς αλάτι

Ο κατακερματισμός κωδικών πρόσβασης χωρίς αλάτι — κρίσιμο τρωτό σημείο. Το αλάτι είναι μια τυχαία συμβολοσειρά, μοναδική για κάθε χρήστη, που προστίθεται στον κωδικό πρόσβασης πριν από τον κατακερματισμό. Χωρίς αλάτι, δύο ίδιοι κωδικοί πρόσβασης θα δώσουν τον ίδιο κατακερματισμό, επιτρέποντας τη χρήση πινάκων ουράνιου τόξου για ωμή βία. Το OWASP συνιστά τη χρήση κρυπτογραφικά ισχυρού αλατιού μήκους τουλάχιστον 32 byte, που παράγεται ξεχωριστά για κάθε χρήστη.

Ανεπαρκής αριθμός επαναλήψεων

Ακόμη και με χρήση bcrypt ή Argon2, μπορεί να εξασθενήσει η προστασία επιλέγοντας πολύ χαμηλή παράμετρο κόστους. Σύμφωνα με το OWASP (2025), ο ελάχιστος αριθμός επαναλήψεων bcrypt πρέπει να είναι 10 (2^10 = 1024 επαναλήψεις), και για Argon2id — χρόνος υπολογισμού τουλάχιστον 1 δευτερόλεπτο στην πλατφόρμα-στόχο. Οι πολύ χαμηλές παράμετροι καθιστούν τις επιθέσεις ωμής βίας πρακτικά εκτελέσιμες σε συστοιχίες GPU.

Συχνές Ερωτήσεις

Ποια είναι η διαφορά μεταξύ κατακερματισμού και κρυπτογράφησης;

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

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

Το OWASP συνιστά το Argon2id ως την καλύτερη επιλογή για κατακερματισμό κωδικών πρόσβασης χάρη στην προσαρμόσιμη προστασία έναντι επιθέσεων GPU και επιθέσεων πλευρικών καναλιών. Εναλλακτικές: bcrypt (δοκιμασμένο και εύκολο στη διαμόρφωση), scrypt (ανθεκτικό σε επιθέσεις ASIC) και PBKDF2. Τα SHA-256 και SHA-512 δεν είναι κατάλληλα για κωδικούς πρόσβασης — είναι πολύ γρήγορα και δεν προστατεύουν από μαζική ωμή βία.

Τι είναι η σύγκρουση συνάρτησης κατακερματισμού και γιατί είναι επικίνδυνη;

Σύγκρουση — κατάσταση κατά την οποία δύο διαφορετικά σύνολα δεδομένων εισόδου παράγουν τον ίδιο κατακερματισμό. Για κρυπτογραφικές συναρτήσεις κατακερματισμού, η εύρεση συγκρούσεων πρέπει να είναι υπολογιστικά αδύνατη. Για παράδειγμα, η πιθανότητα σύγκρουσης SHA-256 για δύο τυχαία μηνύματα είναι περίπου 1 προς 2^128 — μια αμελητέα μικρή τιμή.

Πρέπει να προστίθεται χειροκίνητα αλάτι στο bcrypt;

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

Μπορεί να χρησιμοποιηθεί ο κατακερματισμός για προστασία από κακόβουλο λογισμικό;

Ναι, οι κατακερματισμοί χρησιμοποιούνται για τη δημιουργία λευκών και μαύρων λιστών αρχείων. Οι βάσεις δεδομένων antivirus περιέχουν κατακερματισμούς γνωστού κακόβουλου λογισμικού. Ωστόσο, οι επιτιθέμενοι μπορούν να αλλάξουν ένα byte στο πρόγραμμα, το οποίο θα αλλάξει εντελώς τον κατακερματισμό. Γι' αυτό τα σύγχρονα συστήματα χρησιμοποιούν θολό κατακερματισμό (SSDeep, TLSH), που βρίσκει σημασιολογικά παρόμοια αρχεία, όχι μόνο ακριβείς αντιστοιχίες.

Σύνοψη

  • Κατακερματισμός — μονόδρομη μετατροπή δεδομένων σε συμβολοσειρά σταθερού μήκους με εγγύηση μη αναστρεψιμότητας.
  • Οι κρυπτογραφικές συναρτήσεις κατακερματισμού παρέχουν αντοχή σε συγκρούσεις και φαινόμενο χιονοστιβάδας.
  • SHA-256 — πρότυπο NIST για κρυπτογραφικό κατακερματισμό σε σύγχρονα συστήματα.
  • KDF κωδικών (bcrypt, Argon2, scrypt) είναι υποχρεωτικά για ασφαλή αποθήκευση κωδικών πρόσβασης.
  • Το αλάτι προστατεύει από πίνακες ουράνιου τόξου και πρέπει να είναι μοναδικό για κάθε χρήστη.
  • Τα MD5 και SHA-1 θεωρούνται σπασμένα και δεν πρέπει να χρησιμοποιούνται σε νέα έργα.
  • Ο κατακερματισμός εφαρμόζεται για αποθήκευση κωδικών πρόσβασης, έλεγχο ακεραιότητας δεδομένων, προσωρινή αποθήκευση και προστασία από ιούς.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης