MD5 vs SHA-256: διαφορές και συστάσεις
Το MD5 και το SHA-256 είναι δύο κρυπτογραφικές συναρτήσεις κατακερματισμού. Αυτοί παράγουν ένα δακτυλικό αποτύπωμα σταθερού μεγέθους από μια είσοδο αυθαίρετου μεγέθους. Τους συναντάμε παντού: επαλήθευση ακεραιότητας αρχείων, υπογραφές, μοναδικά αναγνωριστικά, πιστοποιητικά TLS, blockchain. Η κατάσταση ασφαλείας τους, ωστόσο, είναι πολύ διαφορετική: το MD5 είναι χαλασμένο από το 2004 για κρυπτογραφικές χρήσεις, το SHA-256 παραμένει ασφαλές το 2026. Αυτό το άρθρο κάνει απολογισμό.
Υπενθύμιση για συναρτήσεις κατακερματισμού
Μια κρυπτογραφική συνάρτηση κατακερματισμού μετατρέπει ένα μήνυμα οποιουδήποτε μήκους σε δακτυλικό αποτύπωμα σταθερού μεγέθους. Τρεις αναμενόμενες ιδιότητες:
- Αντίσταση προεικόνας: δεδομένου ενός κατακερματισμού, πρέπει να μην είναι εφικτό να βρεθεί το αρχικό μήνυμα.
- Δεύτερη αντίσταση προεικόνας: δεδομένου ενός μηνύματος, πρέπει να μην είναι εφικτό να βρεθεί άλλος που παράγει τον ίδιο κατακερματισμό.
- Αντοχή σε σύγκρουση: πρέπει να είναι ανέφικτο να βρείτε δύο διαφορετικά μηνύματα που παράγουν τον ίδιο κατακερματισμό.
Μια συνάρτηση λέγεται ότι σπάει μόλις πέσει μία από αυτές τις ιδιότητες. Για MD5, αντίσταση σε συγκρούσεις έπεσαν το 2004.
MD5: 128 bit, σπασμένα από το 2004
Το MD5 (Message Digest 5) είναι ένα χαρακτηριστικό που σχεδιάστηκε από τον Ronald Rivest το 1991 και τυποποιημένο από το RFC 1321. Αυτή παράγει ένα δακτυλικό αποτύπωμα 128 bit (16 byte, 32 δεκαεξαδικοί χαρακτήρες).
Το 2004, οι Wang και Yu δημοσίευσαν μια επίθεση που προκάλεσε συγκρούσεις MD5 μέσα σε λίγες ώρες σε έναν υπολογιστή. Από τότε, το κόστος δημιουργίας μιας σύγκρουσης μειώθηκε σε λίγα δευτερόλεπτα. Το 2008, ερευνητές έχουν κατασκευάσει ένα ψεύτικο πιστοποιητικό SSL με υπογραφή MD5 που αναγνωρίζεται ως έγκυρο από όλα τα προγράμματα περιήγησης. Το 2012, το Το κακόβουλο λογισμικό Flame χρησιμοποίησε μια σύγκρουση MD5 για να υπογράψει το εκτελέσιμο αρχείο του ως δυαδικό αρχείο της Microsoft θεμιτό.
Συμπέρασμα: Το MD5 δεν θα πρέπει πλέον να χρησιμοποιείται μόλις ένας εισβολέας μπορεί να επηρεάσει την είσοδο. Όλες οι κρυπτογραφικές χρήσεις (υπογραφές, ακεραιότητα έναντι αντιπάλου, εξαγωγή κλειδιού) είναι εξαιρούνται. Μόνο μερικές χρήσεις χωρίς εχθρότητα παραμένουν αποδεκτές, όπως ένα άθροισμα ελέγχου μεταφοράς δικτύου ή κλειδί κρυφής μνήμης: Το MD5 παραμένει γρήγορο και η ακούσια σύγκρουση παραμένει στατιστικά αδύνατο.
SHA-256: 256 bit, ασφαλές το 2026
Το SHA-256 ανήκει στην οικογένεια SHA-2 που δημοσιεύτηκε από το NIST το 2001 και τυποποιήθηκε από το FIPS 180-4. Αυτή παράγει ένα δακτυλικό αποτύπωμα 256 bit (32 byte, 64 δεκαεξαδικοί χαρακτήρες).
Δεν είναι γνωστές πρακτικές επιθέσεις κατά του SHA-256. Η καλύτερη θεωρητική επίθεση στις συγκρούσεις αφορά 31 γύρους από τους 64, χωρίς πρακτικές συνέπειες. Το κόστος της ωμής βίας για την εύρεση μιας σύγκρουσης είναι της τάξης των 2^128 λειτουργιών, πέρα από κάθε γνωστή υποδομή.
Το SHA-256 χρησιμοποιείται σε: TLS (πιστοποιητικά X.509), Git (από τη μετάβαση του SHA-256), Bitcoin (απόδειξη εργασία), υπογραφές πακέτων Linux, Windows Update κ.λπ. Σήμερα είναι το hash συνιστάται προεπιλογή για την πλειονότητα των γενικών κρυπτογραφικών χρήσεων.
Πρακτικές διαφορές
Μήκος εξόδου
MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 δεκαεξαδικοί χαρακτήρες)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 δεκαεξαδικοί χαρακτήρες)
Ταχύτητα
Το MD5 είναι περίπου 2-3 φορές πιο γρήγορο από το SHA-256 στο ίδιο μηχάνημα. Σε μια σύγχρονη CPU, MD5 επεξεργάζεται αρκετά GB/s ανά πυρήνα, το SHA-256 είναι της τάξης των GB/s. Σε πρόσφατες CPU με επέκταση SHA-NI, η διαφορά μειώνεται απότομα.
Ασφάλεια
Αυτή είναι η μόνη διαφορά που έχει πραγματικά σημασία: το MD5 είναι σπασμένο για συγκρούσεις, Το SHA-256 δεν είναι. Εάν διακυβεύεται η ασφάλεια έναντι ενός αντιπάλου, η επιλογή είναι σαφής.
Συγκριτικός πίνακας
| Κριτήριο | MD5 | SHA-256 |
|---|---|---|
| Έτος | 1991 | 2001 |
| Μέγεθος εξόδου | 128 bit / 32 hex | 256 bit / 64 hex |
| Αντοχή σε σύγκρουση | Χαλασμένη από το 2004 | Καμία πρακτική επίθεση |
| Σχετική ταχύτητα | 2 έως 3 φορές μεγαλύτερη | Αναφορά |
| Επιτάχυνση υλικού | Κανένα αποκλειστικό | SHA-NI σε πρόσφατες CPU |
| Κρυπτογραφική χρήση | Δεν συνιστάται | Συνιστάται |
| Μη εχθρική χρήση ακεραιότητας | Αποδεκτή | Συνιστάται |
| Κανονιστική συμμόρφωση | Απορρίφθηκε (PCI-DSS, FIPS) | Αποδοχή |
Θήκες χρήσης
Όταν το MD5 παραμένει αποδεκτό
- Κλειδί προσωρινής μνήμης εφαρμογής (Redis, memcached) χωρίς επιπτώσεις στην ασφάλεια
- Διπλότυπος εντοπισμός σε ένα μη εχθρικό σύνολο δεδομένων
- Άθροισμα ελέγχου μιας μεταφοράς δικτύου για τον εντοπισμό τυχαίας διαφθοράς
- Αποτύπωμα μιας αλυσίδας για διανομή (sharding) χωρίς αντίπαλους περιορισμούς
Όταν απαιτείται το SHA-256
- Έλεγχος ακεραιότητας έναντι εισβολέα (υπογεγραμμένες λήψεις, πακέτα)
- Ψηφιακές υπογραφές, πιστοποιητικά X.509
- Αναγνωριστικά Git για δεσμεύσεις και αντικείμενα
- Παραγωγή κλειδιού (σε συνδυασμό με HKDF)
- Οποιαδήποτε εφαρμογή υπόκειται σε κανονιστική απαίτηση (PCI-DSS, ANSSI, FIPS)
Συγκεκριμένα παραδείγματα
Στην PHP, και οι δύο συναρτήσεις είναι διαθέσιμες μέσω της συνάρτησης hash():
// Αποτύπωση συμβολοσειράς
$md5 = hash('md5', 'γεια σου κόσμε');
$sha256 = hash('sha256', 'γεια κόσμο');
// Δακτυλικό αποτύπωμα αρχείου (streaming)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Μπορείτε να δημιουργήσετε αυτές τις εκτυπώσεις απευθείας στο διαδίκτυο με τη δική μας δημιουργία κατακερματισμού κειμένου, κατακερματίστε ένα αρχείο με δημιουργία κατακερματισμού αρχείων, ή προσδιορίστε έναν άγνωστο τύπο κατακερματισμού με το αναγνωριστικό κατακερματισμού.
Σύσταση
Ο κανόνας 2026 είναι απλός: SHA-256 από προεπιλογή. Το MD5 δεν θα πρέπει πλέον να εμφανίζεται στο τον κωδικό σας μόλις ένας εισβολέας μπορεί να επηρεάσει την είσοδο, η οποία καλύπτει σχεδόν όλες τις περιπτώσεις διακομιστή. Η ανώτερη απόδοση του MD5 δεν δικαιολογεί πλέον τη χρήση του, το κενό έχει γίνει αμελητέο με επιταχύνσεις SHA-NI που υπάρχουν σε σύγχρονους επεξεργαστές x86 και ARM.
Συχνές ερωτήσεις
Είναι ακόμα ασφαλές το MD5 για κωδικούς πρόσβασης;
Όχι, ποτέ. Και αυτό το σημείο είναι ανεξάρτητο από συγκρούσεις: το MD5 είναι πολύ γρήγορο. Μια GPU σπάει αρκετά δισεκατομμύρια hashes MD5 ανά δευτερόλεπτο, κάνοντας οποιαδήποτε επίθεση λεξικό ή τετριμμένη ωμή δύναμη. Για κωδικούς πρόσβασης, χρησιμοποιήστε bcrypt, Argon2 ή scrypt (δείτε τη Σύγκριση Bcrypt εναντίον Argon2).
Ποια είναι η διαφορά μεταξύ SHA-256 και SHA-2;
Το SHA-2 είναι η οικογένεια, το SHA-256 είναι μέλος. Η οικογένεια περιλαμβάνει SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 και SHA-512/256. Διαφέρουν ως προς το μέγεθος εξόδου και το μέγεθος αρχείου. εσωτερικά μπλοκ. Το SHA-256 είναι η πιο χρησιμοποιούμενη παραλλαγή.
Θα πρέπει να μετακομίσουμε στο SHA-3;
Όχι απαραίτητα. Το SHA-3 (κυκλοφόρησε το 2015) βασίζεται σε μια ριζικά διαφορετική κατασκευή (Keccak/σφουγγάρι), αλλά το SHA-256 παραμένει ασφαλές. Το SHA-3 χρησιμεύει κυρίως ως σχέδιο Β σε περίπτωση προβλημάτων απροσδόκητο στο SHA-2. Επιλέξτε SHA-3 εάν το απαιτεί ένα πρότυπο ή εάν θέλετε ποικιλομορφία κρυπτογραφική. Διαφορετικά, το SHA-256 παραμένει η τυπική επιλογή.
Μπορούμε να αντιστρέψουμε έναν κατακερματισμό MD5 ή SHA-256;
Όχι, από κατασκευή: ένας κατακερματισμός χάνει πληροφορίες. Οι ιστότοποι «αποκρυπτογράφησης» MD5 δεν το κάνουν παρά να ρωτήσετε γιγαντιαίες βάσεις προυπολογισμένων κατακερματισμών (πίνακες ουράνιου τόξου) για εγγραφές κοινή. Για μεγάλα τυχαία δεδομένα, η εύρεση της καταχώρισης είναι αδύνατη και με τα δύο αλγόριθμους.
Θα σπάσει το SHA-256 από έναν κβαντικό υπολογιστή;
Ο αλγόριθμος του Grover μειώνει στο μισό την αποτελεσματική ασφάλεια των κατακερματισμών έναντι ενός εισβολέα quantum: Το SHA-256 θα προσφέρει τότε περίπου 128 bit ασφάλειας, η οποία παραμένει σε μεγάλο βαθμό επαρκής. Κανένα επείγον από την πλευρά του κατακερματισμού, σε αντίθεση με την ασύμμετρη κρυπτογραφία.