ΤΕΙ ΚΡΗΤΗΣ ΤΜΉΜΑ ΜΗΧΑΝΙΚΏΝ ΠΛΗΡΟΦΟΡΙΚΉΣ Εργαστήριο Ασφάλεια Πληροφοριακών Συστημάτων Συναρτήσεις Κατακερματισμού
Ο όρος συνάρτηση κατακερματισμού (hash function) υποδηλώνει ένα μετασχηματισμό που παίρνει σαν είσοδο ένα μήνυμα m οποιουδήποτε μήκους και επιστρέφει στην έξοδο μία ακολουθία χαρακτήρων h περιορισμένου μήκους που καλείται hash value, δηλαδή είναι h = H(m).
Οι συναρτήσεις κατακερματισμού (hash functions) είναι συναρτήσεις της μορφής H(x)=y, με τις εξής ιδιότητες: η είσοδος είναι οποιουδήποτε μήκους η έξοδος έχει περιορισμένο (και συγκεριμένο) μήκος δεδομένου του x, ο υπολογισμός του y είναι εύκολος η H(x) είναι μη αντιστρέψιμη η H(x) είναι (ιδανικά) αμφιμονοσήμαντη (ένα προς ένα συνάρτηση)
Λέγοντας μη αντιστρέψιμη συνάρτηση εννοούμε ότι δεδομένου ενός y είναι υπολογιστικά πολύ δύσκολο έως αδύνατο να βρεθεί ο x. Λέγοντας αμφιμονοσήμαντη εννοούμε ότι για δύο x 1, x 2 για τα οποία ισχύει ότι x 1 x 2 είναι πάντα H(x 1 ) H(x 2 ). Σε καμία περίπτωση δεν πρέπει να είναι H(x 1 ) = H(x 2 ) όταν x 1 x 2.
Η hash value παρουσιάζει συνοπτικά το μεγαλύτερο μήνυμα ή έγγραφο, για αυτό καλείται και σύνοψη μηνύματος (message digest). Μπορούμε να φανταστούμε την σύνοψη του μηνύματος σαν "ψηφιακό αποτύπωμα" (digital fingerprint) του εγγράφου.
Ειδικότερα οι κρυπτογραφικές συναρτήσεις κατακερματισμού πρέπει να παρέχουν: Συμπίεση (compression) μικρού μήκους έξοδος. Αποδοτικότητα (efficiency) η συνάρτηση H(m) να μπορεί να υπολογιστεί για κάθε m. Μία κατεύθυνση (one-way) δεδομένου μία τιμής h ναι είναι αδύνατον να βρεθεί m ώστε να ισχύει h = H(m ). Αδύναμη αντίσταση σε σύγκρουση (weak collision resistance ή second preimage resistance) δεδομένου m να είναι αδύνατον να βρεθεί m m ώστε να ισχύει H(m) = H(m ). Ισχυρή αντίσταση σε σύγκρουση (strong collision resistance) να είναι αδύνατον να βρεθεί οποιοδήποτε ζευγάρι m, m με m m ώστε να ισχύει H(m) = H(m ). Όταν έχουμε ισχυρή αντίσταση σε σύγκρουση, αντίστροφο δεν ισχύει πάντα. έχουμε και αδύναμη αλλά το
Επειδή οι hash functions είναι πιο γρήγορες από τους αλγόριθμους κρυπτογράφησης και ψηφιακών υπογραφών, συνηθίζεται να παράγεται η υπογραφή των μηνυμάτων με την εφαρμογή κρυπτογραφικών διαδικασιών στο message digest, το οποίο είναι πιο μικρό και εύκολο στην διαχείριση. Επιπλέον ένα message digest μπορεί να δημοσιοποιηθεί χωρίς να αποκαλύπτει τα περιεχόμενα του αυθεντικού κειμένου
Πρακτικά, κάθε συνάρτηση συγχώνευσης μηνύματος έχει τρεις ιδιότητες: Με είσοδο το καθαρό κείμενο P, είναι εύκολο να υπολογιστεί το MD(P). Με έξοδο το MD(P) είναι πρακτικά απίθανο να βρεθεί το P. Είναι αδύνατη η παραγωγή δύο μηνυμάτων που παρουσιάζουν την ίδια συγχώνευση μηνύματος.
Οι Damgard και Merkle εισήγαγαν την έννοια της compression function. Αυτές οι συναρτήσεις παίρνουν είσοδο καθορισμένου μήκους και δίνουν έξοδο μικρότερου, περιορισμένου μήκους. Δεδομένου, λοιπόν, ενός compression function, μία hash function μπορεί να πραγματοποιηθεί με την επανειλημμένη εφαρμογή της compression function μέχρι ολόκληρο το μήνυμα να έχει υποστεί επεξεργασία.
Πιο αναλυτικά, το μήνυμα τεμαχίζεται σε blocks, των οποίων το μέγεθος εξαρτάται από την compression function, και συμπληρώνεται (padded) για λόγους ασφαλείας, ώστε το μήκος του μηνύματος να είναι πολλαπλάσιο του μήκους του block. Το παρακάτω σχήμα επιδεικνύει την λογική της διαδικασίας:
Ακολουθούν παραδείγματα γνωστών hash functions...
O SHA-0 αναπτύχθηκε και παρουσιάστηκε από το NIST το 1993. Λόγω κάποιων αδυναμιών, που εντοπίστηκαν σχεδόν αμέσως, διορθώθηκε και παρουσιάστηκε ως SHA-1 δύο χρόνια αργότερα.
Ο SHA-1 παίρνει είσοδο μήνυμα μήκους μικρότερο από 2 64 bits και παράγει message digest 160 bits. 2 64 bits = 2 exabytes Είναι ελαφρά πιο αργός από τον MD5, αλλά το μεγαλύτερο message digest που παράγει τον κάνει πιο ασφαλή απέναντι σε προσπάθειες αντιστροφής του
Το 2001 ο NIST παρουσίασε τον SHA-2 που στην αποτελείται από τους SHA-224, SHA-256, SHA-384 και SHA-512. Τα νούμερα αναφέρονται στα bits της σύνοψης που παράγει η κάθε παραλλαγή του αλγορίθμου.
Το 2007 ξεκίνησε ο διαγωνισμός του NIST για τον SHA-3. Ο διαγωνισμός ολοκληρώθηκε τον Οκτώβριο του 2012, και ο αλγόριθμος που επιλέχθηκε ήταν ο Keccak (που πλέον θα καλείται SHA-3). Δουλεύει με λέξεις 64bit και έχει μεταβλητή έξοδο. Δεν θα αντικαταστήσει τον SHA-2 αφού δεν έχουν ακόμα εντοπιστεί προβλήματα στην ασφάλεια του τελευταίου.
Οι αλγόριθμοι MD2,MD4,MD5 είναι hash functions που έχουν αναπτυχθεί από τον Ron Rivest. Προορίζονται, κυρίως, για την παραγωγή ψηφιακών υπογραφών. Το μήνυμα πρώτα σμικρύνεται με έναν από αυτούς τους αλγόριθμους και έπειτα το message digest του μηνύματος κρυπτογραφείται με την ιδιωτική κλείδα του αποστολέα.
Και οι τρεις παίρνουν στην είσοδο μήνυμα αυθαίρετου μήκους, δουλεύουν με «λέξεις» των 32bit και δίνουν στην έξοδο ένα message digest 128 bit. Παρ' όλο που η κατασκευή τους μοιάζει αρκετά, ο MD2 είχε σχεδιαστεί για μηχανές 8 bit, σε αντίθεση με τους MD4 και MD5 που προορίζονται για μηχανές 32 bit.
Ο MD4 αναπτύχθηκε το 1990. Το μήκος του μηνύματος συμπληρώνεται με κατάλληλο αριθμό bits, ώστε το μήκος του σε bits συν 448 να είναι διαιρέσιμο από το 512. Ο MD5 αναπτύχθηκε το 1991. Είναι μια βελτιωμένη έκδοση του MD4, γι' αυτό είναι και λίγο πιο αργός. Έχουν επανειλημμένα αναλυθεί με διάφορους τρόπους και δεν πρέπει να θεωρούνται πλέον ασφαλείς.
Message Authentication Code είναι ένα κώδικας (καλείται και checksum) που συνοδεύει το μήνυμα και πιστοποιεί την ταυτότητα του αποστολέα και την ακεραιότητα του μηνύματος. Για την παραγωγή τους εφαρμόζεται στο μήνυμα ένα από τα προαναφερθέντα κρυπτογραφικά εργαλεία σε συνδυασμό με ένα μυστικό κλειδί.
Σε αντίθεση με τις ψηφιακές υπογραφές, τα MACs υπολογίζονται και επαληθεύονται με το ίδιο κλειδί, έτσι ώστε να μπορούν να επαληθευθούν μόνο από τον προοριζόμενο παραλήπτη. Ένας τύπος MAC είναι αυτός που βασίζεται σε hash functions.
Τα MACs που βασίζονται σε hash functions χρησιμοποιούν ένα μυστικό κλειδί σε συνδυασμό με ένα hash function για την παραγωγή του checksum που συνοδεύει το μήνυμα. Το κλειδί χρησιμοποιείται για να κρυπτογραφήσει το message digest του μηνύματος. Ο παραλήπτης του μηνύματος, που μοιράζεται με τον αποστολέα το ίδιο κλειδί, αποκρυπτογραφεί το message digest και έπειτα το συγκρίνει με ένα message digest που παράγει ο ίδιος από το μήνυμα. Εάν η σύγκριση είναι επιτυχής, τότε ο παραλήπτης σιγουρεύεται ότι τα δεδομένα δεν έχουν αλλοιωθεί. Ένα παράδειγμα είναι ο keyed-md5.
Δημιουργία σύνοψης ενός τυχαίου κειμένου με τη χρήση του Crypt Tool. Cryptool Hash Demonstration Δημιουργία σύνοψης ενός τυχαίου κειμένου με τη χρήση του HashCalc.