Οι γραμμές digest έχουν τη μορφή “ΑΛΓΟΡΙΘΜΟΣ hash”, ώστε να αντιγράφονται σε σημειώσεις έκδοσης ή manifest λήψης.
Γεννήτρια hash — κάθε αλγόριθμος εξηγημένος από το μηδέν
Σε μία πρόταση: μια κρυπτογραφική συνάρτηση κατακερματισμού είναι ένα μονόδρομο μίξερ — παίρνει οποιονδήποτε αριθμό byte και τα συμπιέζει σε ένα αποτύπωμα σταθερού μήκους, έτσι ώστε η ίδια είσοδος να δίνει πάντα το ίδιο αποτύπωμα, ενώ το αποτύπωμα δεν λέει τίποτα για το πώς να ανακατασκευαστεί η είσοδος. Αυτή η σελίδα εκτελεί έντεκα από αυτές εξ ολοκλήρου μέσα στην καρτέλα του προγράμματος περιήγησης.
Κάθε αλγόριθμος παρακάτω εξηγείται με τα ίδια τέσσερα βήματα: τι είναι με απλά λόγια, η διαίσθηση του τρόπου λειτουργίας του χωρίς τύπους, αν πρέπει ακόμη να χρησιμοποιηθεί σήμερα, και τα λάθη που κάνουν συχνότερα οι άνθρωποι με αυτόν.
MD5
Τι είναι. Το MD5 (1992) συμπιέζει οποιαδήποτε είσοδο σε αποτύπωμα 128 bit (32 δεκαεξαδικοί χαρακτήρες). Σχεδιάστηκε για να είναι γρήγορο στους υπολογιστές της δεκαετίας του 1990, και είναι — ακριβώς γι' αυτό είναι ακόμη παντού: σελίδες λήψης λογισμικού, cache αποδιπλασιασμού αρχείων, παλαιά κλειδιά βάσεων δεδομένων.
Πώς λειτουργεί, διαισθητικά. Η είσοδος κόβεται σε τμήματα των 64 byte. Κάθε τμήμα ανακατεύεται σε μια κυλιόμενη κατάσταση 128 bit τέσσερις φορές (τέσσερις ελαφρώς διαφορετικούς γύρους ανάμιξης), και μετά το τελευταίο τμήμα η κατάσταση εκτυπώνεται ως digest. Η ανάμιξη αποτελείται από προσθέσεις, περιστροφές και αναζητήσεις πινάκων — φθηνές τότε, φθηνές τώρα.
Αξίζει να χρησιμοποιηθεί; Για checksums όπου κανείς δεν επιχειρεί εξαπάτηση — ανίχνευση κατεστραμμένης λήψης, εύρεση διπλών αρχείων — ναι, εξακολουθεί να αναφέρει τέλεια τη φθορά. Για οτιδήποτε επιθετικό, όχι: από το 2004 οι ερευνητές μπορούν να κατασκευάσουν σε δευτερόλεπτα δύο διαφορετικά αρχεία με το ίδιο MD5, και πλαστά πιστοποιητικά με συγκρούσεις MD5 εμφανίστηκαν το 2008. Αντιμετωπίζεται ως αριθμός σειράς, όχι ως κλειδαριά.
Συνηθισμένα λάθη. Η χρήση του MD5 για κωδικούς πρόσβασης (πολύ γρήγορο — βλ. τη Γεννήτρια hash κωδικών για το τι ανήκει εκεί)· η εμπιστοσύνη σε ένα αρχείο επειδή “το MD5 ταιριάζει” όταν ο επιτιθέμενος δημοσίευσε και το MD5· και η επικόλληση ολόκληρης της γραμμής MD5 (file) = hash αντί μόνο του hash — το πλαίσιο Επαλήθευση παραπάνω δέχεται και τα δύο.
SHA-1
Τι είναι. Το SHA-1 (1995, NSA) παράγει digest 160 bit (40 δεκαεξαδικοί χαρακτήρες). Για είκοσι χρόνια ήταν το προεπιλεγμένο hash ακεραιότητας του Git, των πιστοποιητικών TLS και των υπογραφών PGP.
Πώς λειτουργεί, διαισθητικά. Η ίδια οικογένεια συνταγής με το MD5 αλλά με κατάσταση 160 bit, 80 γύρους ανάμιξης ανά τμήμα των 64 byte, και ευρύτερο σύνολο πράξεων. Οι επιπλέον γύροι είχαν σκοπό να κάνουν τον μίξερ δυσκολότερο στην αντίστροφη μηχανική.
Αξίζει να χρησιμοποιηθεί; Όχι, για οτιδήποτε επιθετικό. Η θεωρητική διάσπαση έγινε πρακτική το 2017, όταν η Google παρήγαγε δύο διαφορετικά PDF με πανομοιότυπες τιμές SHA-1 (η επίθεση SHAttered, περίπου 6500 έτη CPU). Το Git αποθηκεύει ακόμη αντικείμενα με SHA-1 αλλά το αντιμετωπίζει μόνο ως αναγνωριστικό, και έκτοτε προσέθεσε ανίχνευση συγκρούσεων. Για νέα έργα χρησιμοποιείται SHA-256 ή SHA-3.
Συνηθισμένα λάθη. Η πεποίθηση ότι τα 160 bit “είναι ακόμη αρκετά μακριά” — η διάσπαση αφορά την εσωτερική δομή, όχι τη βίαιη αναζήτηση· και η σύγχυση του RIPEMD-160 με το SHA-1 επειδή και τα δύο έχουν 40 δεκαεξαδικούς χαρακτήρες (το πλαίσιο αναγνώρισης παραπάνω τα ξεχωρίζει).
SHA-2: SHA-256, SHA-384 και SHA-512
Τι είναι. Η οικογένεια SHA-2 (2001, NSA) είναι το άλογο εργασίας του σύγχρονου ελέγχου ακεραιότητας. Το SHA-256 δίνει 256 bit (64 δεκαεξαδικοί χαρακτήρες), το SHA-512 δίνει 512 bit, και το SHA-384 είναι το SHA-512 με το αποτέλεσμα περικομμένο σε 384 bit — χρήσιμο όταν ένα πρωτόκολλο ορίζει μικρότερη ετικέτα.
Πώς λειτουργεί, διαισθητικά. Τμήματα των 64 byte (ή 128 byte για τις παραλλαγές 512 bit) διπλώνονται σε μια κατάσταση 8 λέξεων μέσω 64 (ή 80) γύρων βημάτων πρόσθεσης, περιστροφής και ανάμιξης. Σε αντίθεση με το MD5, το πρόγραμμα χρονοδιαγράμματος πρώτα επεκτείνει κάθε τμήμα σε ένα ευρύτερο προσωρινό buffer, και αυτό ακριβώς ανέτρεψε το είδος της επίθεσης που έσπασε το MD5 και το SHA-1. Μια περιέργεια που αξίζει να ξέρει κανείς: σε επεξεργαστές 64 bit το SHA-512 είναι ταχύτερο από το SHA-256, επειδή επεξεργάζεται διπλάσια δεδομένα ανά γύρο με αριθμητική 64 bit.
Αξίζει να χρησιμοποιηθεί; Ναι — το SHA-256 είναι η προεπιλεγμένη απάντηση για checksums αρχείων, υπογραφή κώδικα και αποτυπώματα πιστοποιητικών σήμερα, χωρίς γνωστή πρακτική διάσπαση μετά από δύο δεκαετίες ανάλυσης. Το SHA-384/512 χρησιμοποιείται όταν θέλει κανείς περισσότερο περιθώριο ή όταν η πλατφόρμα τα εκτελεί ταχύτερα.
Συνηθισμένα λάθη. Η χρήση μόνο του SHA-256 για κωδικούς πρόσβασης — είναι ένας γρήγορος κατακερματισμός, και η ταχύτητα είναι ο εχθρός εκεί (χρησιμοποιούνται bcrypt/scrypt/Argon2id)· και η σύγχυση του μήκους του digest με την αντοχή σε ρυθμίσεις επιθετικής αντίστασης σε συγκρούσεις — το μήκος ορίζει μόνο το ταβάνι.
SHA-3 (SHA3-256 / SHA3-512) και Keccak-256
Τι είναι. Το SHA-3 (2015, τυποποιημένο από την υποβολή Keccak από τους Bertoni, Daemen, Peeters και Van Assche) είναι το τρίτο πρότυπο κατακερματισμού του NIST. Δεν μοιράζεται τίποτα με τα εσωτερικά του SHA-2 — επιλέχθηκε ακριβώς για να είναι ανεξάρτητο εφεδρικό, σε περίπτωση που το SHA-2 πέσει ποτέ.
Πώς λειτουργεί, διαισθητικά. Αντί να ανακατεύει τα τμήματα μέσα από μια μικρή κατάσταση, το Keccak επαναλαμβανόμενα “απορροφά και στύβει”: η είσοδος απορροφάται bit προς bit σε ένα σφουγγάρι 5×5×64 bit, ολόκληρο το σφουγγάρι ανακατεύεται με μια σταθερή μετάθεση (24 γύροι bitwise πράξεων στην ολότητα της κατάστασης), και στη συνέχεια στύβονται τα bit του digest. Η εικόνα του σφουγγαριού είναι όλη η ιδέα: τα bit χωρητικότητας δεν εξάγονται ποτέ, και ακριβώς αυτά κάνουν τη συνάρτηση μονόδρομη.
Keccak-256 έναντι SHA3-256. Διαφέρουν σε ακριβώς ένα byte padding. Η αρχική υποβολή της ομάδας Keccak έκανε padding στο τελευταίο μπλοκ με 0x01· το NIST άλλαξε το τυπικό padding σε 0x06 (διαχωρισμός τομέα που χρησιμοποιεί το Keccak της εποχής του SHA-2). Το Ethereum υιοθέτησε το αρχικό padding, οπότε το “keccak256” του διαφέρει από το τυπικό SHA3-256 για κάθε είσοδο. Αυτή η σελίδα προσφέρει και τα δύο, επιλεγμένα χωριστά.
Αξίζει να χρησιμοποιηθεί; Ναι — είτε ως κύρια επιλογή όταν η πολιτική ζητά αλγόριθμο εκτός SHA-2, είτε όπου το οικοσύστημα το μιλά ήδη. Συνηθισμένα λάθη: η υπόθεση ότι το SHA3-256 και το Keccak-256 είναι εναλλάξιμα (δεν είναι — συγκρίνονται οι δύο γραμμές που παράγει αυτή η σελίδα για την ίδια είσοδο)· και η υπόθεση ότι το “SHA-3” αντικαθιστά το SHA-2 — και τα δύο είναι ασφαλή, και το SHA-2 παραμένει το πιο ευρέως χρησιμοποιούμενο.
RIPEMD-160
Τι είναι. Το RIPEMD-160 (1996, από την κοινοπραξία RIPE ευρωπαίων ακαδημαϊκών, ενισχυμένο από τους Dobbertin, Bosselaers και Preneel) παράγει 160 bit. Είναι εξ ολοκλήρου ευρωπαϊκός σχεδιασμός, σκόπιμα ανεξάρτητος από την οικογένεια SHA που σχεδίασε η NSA.
Πώς λειτουργεί, διαισθητικά. Κάθε τμήμα των 64 byte υφίσταται επεξεργασία από δύο παράλληλες γραμμές των 80 γύρων με διαφορετικές σταθερές και ποσά περιστροφής· στο τέλος οι δύο γραμμές και η παλιά κατάσταση συνδυάζονται. Η δομή των δύο τροχιών ήταν ο τρόπος των σχεδιαστών να αντισταθούν στις διαφορικές επιθέσεις που έσπαγαν άλλους κατακερματισμούς της δεκαετίας του 1990.
Αξίζει να χρησιμοποιηθεί; Στην πράξη επιβιώνει κυρίως μέσα σε άλλα συστήματα: οι διευθύνσεις Bitcoin κάνουν hash τα δημόσια κλειδιά τους με RIPEMD-160(SHA-256(pk)), τα παλαιότερα κλειδιά OpenPGP το προσφέρουν ως επιλογή hash, και είναι ο παραδοσιακός κατακερματισμός για τα κομμάτια BitTorrent v1 μαζί με το SHA-1. Δεν υπάρχει πρακτική επίθεση σύγκρουσης, αλλά το μέγεθος των 160 bit του δίνει το μικρότερο περιθώριο ασφαλείας σε αυτή τη σελίδα. Για νέα αυτόνομη χρήση προτιμάται το SHA-256 ή το SHA-3.
Συνηθισμένα λάθη. Η πεποίθηση ότι οι δύο παράλληλες γραμμές το κάνουν “διπλά ισχυρό” — το μέγεθος εξόδου είναι αυτό που περιορίζει την αντίσταση σε συγκρούσεις· και η σύγχυση με το SHA-1 (ίδιο μήκος 40 δεκαεξαδικών χαρακτήρων· το πλαίσιο αναγνώρισης παραπάνω τα απαριθμεί και τα δύο δίπλα-δίπλα).
BLAKE2b-512 και BLAKE2s-256
Τι είναι. Το BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn και Winnerlein) είναι κατακερματισμός σχεδιασμένος για ταχύτητα λογισμικού: το BLAKE2b στοχεύει σε πλατφόρμες 64 bit με έξοδο έως 512 bit, το BLAKE2s σε πλατφόρμες 32 bit με έξοδο έως 256 bit.
Πώς λειτουργεί, διαισθητικά. Προέρχεται από τον τελικό υποψήφιο του SHA-3, το BLAKE, του οποίου ο πυρήνας είναι μια μετάθεση με κλειδί δανεισμένη από τον κρυπτογράφο ροής ChaCha: ένας πίνακας 4×4 λέξεων ανακατεύεται εναλλάξ με βήματα ανάμειξης στήλης και διαγωνίου — σαν να ανακατεύεται ένα πλέγμα πρώτα από πάνω προς τα κάτω και έπειτα κατά μήκος των διαγωνίων — για 12 (BLAKE2b) ή 10 (BLAKE2s) γύρους ανά τμήμα. Επειδή αυτά τα βήματα αντιστοιχίζονται πολύ καλά σε εντολές CPU, το BLAKE2 είναι συχνά ταχύτερο από το MD5, προσφέροντας ασφάλεια συγκρίσιμη με το SHA-3.
Αξίζει να χρησιμοποιηθεί; Ναι — είναι πλήρως σύγχρονος, απαρασάλευτος σχεδιασμός, δημοφιλής σε λογισμικό που εξαρτάται από την απόδοση (ακεραιότητα πακέτων σε ορισμένα οικοσυστήματα, αποθήκευση με βάση το περιεχόμενο, αποδιπλασιασμός αντιγράφων ασφαλείας) και ως γρήγορο MAC. Σε αυτή τη σελίδα, το BLAKE2b-512 δίνει τα μακρύτερα digests και το BLAKE2s-256 τη συμπαγή σύγχρονη επιλογή.
Συνηθισμένα λάθη. Η σκέψη ότι “το ταχύτερο σημαίνει αδύναμο” — το BLAKE2 είναι ταχύ εκ σχεδιασμού, όχι λόγω συντομεύσεων· και η άγνοια ότι το BLAKE2 δέχεται επίσης κλειδί (καθιστώντας το MAC) ή συμβολοσειρά εξατομίκευσης — αυτή η σελίδα το χρησιμοποιεί πάντα σε απλή λειτουργία χωρίς κλειδί.
Ανάγνωση των πλαισίων Επαλήθευση και Αναγνώριση
Επαλήθευση. Το πλαίσιο επαλήθευσης κανονικοποιεί ό,τι επικολληθεί — κεφαλαία ή πεζά, άνω και κάτω τελεία ανά δύο ψηφία, πρόθεμα sha256=, το περιτύλιγμα SHA256 (file) = hash τύπου BSD, μια γραμμή md5sum τύπου GNU με το όνομα αρχείου μετά το hash, αδέσποτα \r\n — και στη συνέχεια υπολογίζει ξανά κάθε επιλεγμένο αλγόριθμο πάνω στην τρέχουσα είσοδο (κείμενο ή επιλεγμένο αρχείο) και αναφέρει κάθε αλγόριθμο που ταιριάζει. Η πράσινη αντιστοιχία σημαίνει “αυτά τα byte είναι ακριβώς ό,τι κατακερμάτισε ο εκδότης”· το κόκκινο σημαίνει ότι κανένας επιλεγμένος αλγόριθμος δεν το παρήγαγε — δοκιμή επιλογής περισσότερων αλγορίθμων ή έλεγχος αν η επικόλληση κόπηκε.
Αναγνώριση. Το πλαίσιο αναγνώρισης δεν κάνει hash τίποτα· διαβάζει το σχήμα της συμβολοσειράς. Το μήκος περιορίζει τους υποψηφίους: 32 δεκαεξαδικοί χαρακτήρες θα μπορούσαν να είναι MD5, 40 SHA-1 ή RIPEMD-160, 64 SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 SHA-384, 128 SHA-512 / SHA3-512 / BLAKE2b-512. Τα πρόθεματα αποκαλύπτουν κατακερματισμούς κωδικών ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — αυτά είναι διαφορετικό είδος (βλ. τη Γεννήτρια hash κωδικών) και σκόπιμα δεν υπολογίζονται από αυτή τη σελίδα. Μια συμβολοσειρά με +, / και = της οποίας το μήκος είναι πολλαπλάσιο του 4 είναι πιθανότερα δεδομένα κωδικοποιημένα σε Base64 παρά hex digest· το εργαλείο την αποκωδικοποιεί και αναφέρει το μήκος byte που θα αντιστοιχούσε.
Τι μπορεί και τι δεν μπορεί να πει η αναγνώριση. Το μήκος και το σύνολο χαρακτήρων είναι αποτυπώματα της μορφής, όχι απόδειξη του αλγορίθμου: δύο συμβολοσειρές 64 δεκαεξαδικών χαρακτήρων μπορεί να προέρχονται από SHA-256 ή από περικομμένο SHA-512. Ο αναγνωριστής κατατάσσει τις πιθανότητες· το πλαίσιο Επαλήθευση είναι εκείνο που αποδεικνύει ποιον αλγόριθμο ταιριάζουν πραγματικά τα byte.
Και τα έντεκα με μία ματιά
| Αλγόριθμος |
Πέψη |
Ανακαλύφθηκε |
Digest του “The quick brown fox jumps over the lazy dog” |
| MD5 | 128 bit | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 bit | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 bit | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 bit | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 bit | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 bit | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 bit | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 bit | πριν το 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 bit | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 bit | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 bit | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Κάθε digest στον παραπάνω πίνακα παράγεται από τις μηχανές αυτής της ίδιας σελίδας — επιλογή όλων των αλγορίθμων, κλικ στο Δείγμα, και σύγκριση. Οι γραμμές SHA-3, Keccak, RIPEMD-160 και BLAKE2 προέρχονται από τον αυτοφιλοξενούμενο πυρήνα crypto-shared.js που χρησιμοποιείται σε όλα τα εργαλεία κρυπτογραφίας του ιστότοπου.
Συχνές ερωτήσεις
Ποιο πλαίσιο να εμπιστευτεί κανείς για μια λήψη; Το πλαίσιο Επαλήθευση, με το SHA-256 επιλεγμένο — οι περισσότεροι εκδότες υπογράφουν σήμερα με SHA-256 ή SHA-512. Το πλαίσιο Αναγνώριση μόνο ονομάζει υποψηφίους· δεν αποδεικνύει ποτέ τίποτα για το αρχείο.
Γιατί υπάρχει το Keccak-256 στη λίστα; Επειδή το Ethereum, το Swarm και μερικά συστήματα καθολικών λογιστικών τυποποίησαν το προ-τυποποιημένο padding. Αν επαληθεύεται ένα keccak256 του Ethereum, πρέπει να χρησιμοποιηθεί αυτή η γραμμή, όχι το SHA3-256.
Μπορούν δύο διαφορετικές είσοδοι να μοιράζονται ένα digest; Θεωρητικά, ναι — άπειρες είσοδοι απεικονίζονται σε ένα πεπερασμένο σύνολο digests (αρχή του περιστερώνα). Στην πράξη, το να βρεθεί ένα τέτοιο ζεύγος πριν από τον θερμικό θάνατο του σύμπαντος είναι αυτό που σημαίνει “αντίσταση σε συγκρούσεις”, και κάθε αλγόριθμος παραπάνω εκτός από το MD5 και το SHA-1 εξακολουθεί να στέκει.
Οι hash είναι κρυπτογράφηση; Όχι. Η κρυπτογράφηση αναστρέφεται με κλειδί· ένα hash είναι ένας μονόδρομος μίξερ. Τίποτα σε αυτή τη σελίδα δεν μπορεί να “αποκρυπτογραφηθεί” ξανά σε κείμενο — και αυτό είναι χαρακτηριστικό, όχι περιορισμός.