Κρυπτογραφικές συναρτήσεις κατακερματισμού. Λειτουργία κατακερματισμού: τι είναι, γιατί χρειάζεται και τι είναι;

Αυτο 25.08.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

ChercherΑυτο

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

Πώς γίνεται αυτό;Αρχικά, καθορίστε την ακεραιότητα των αρχείων που πρέπει να παρακολουθούνται. Για κάθε αρχείο, η τιμή κατακερματισμού του υπολογίζεται χρησιμοποιώντας έναν ειδικό αλγόριθμο και το αποτέλεσμα αποθηκεύεται. Μετά τον απαιτούμενο χρόνο, γίνεται ανάλογος υπολογισμός και συγκρίνονται τα αποτελέσματα. Εάν οι τιμές είναι διαφορετικές, τότε οι πληροφορίες που περιέχονται στο αρχείο έχουν αλλάξει.

Ποια χαρακτηριστικά πρέπει να έχει μια συνάρτηση κατακερματισμού;

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

Ποιοι είναι οι δημοφιλείς αλγόριθμοι κατακερματισμού;Επί του παρόντος χρησιμοποιούνται οι ακόλουθες συναρτήσεις κατακερματισμού:

  • CRC – κυκλικός κωδικός πλεονασμού ή άθροισμα ελέγχου. Ο αλγόριθμος είναι πολύ απλός και έχει μεγάλο αριθμό παραλλαγών ανάλογα με το απαιτούμενο μήκος εξόδου. Όχι κρυπτογραφικό!
  • Ο MD 5 είναι ένας πολύ δημοφιλής αλγόριθμος. Όπως και η προηγούμενη έκδοσή του, το MD 4 είναι μια κρυπτογραφική λειτουργία. Το μέγεθος κατακερματισμού είναι 128 bit.
  • Το SHA -1 είναι επίσης μια πολύ δημοφιλής συνάρτηση κρυπτογράφησης. Το μέγεθος κατακερματισμού είναι 160 bit.
  • Το GOST R 34.11-94 είναι ένα ρωσικό κρυπτογραφικό πρότυπο για υπολογισμούς συνάρτησης κατακερματισμού. Το μέγεθος κατακερματισμού είναι 256 bit.

Πότε μπορεί ένας διαχειριστής συστήματος να χρησιμοποιήσει αυτούς τους αλγόριθμους;Συχνά, κατά τη λήψη οποιουδήποτε περιεχομένου, για παράδειγμα, προγραμμάτων από τον ιστότοπο του κατασκευαστή, μουσική, ταινίες ή άλλες πληροφορίες, υπάρχει μια τιμή αθροίσματος ελέγχου που υπολογίζεται χρησιμοποιώντας έναν συγκεκριμένο αλγόριθμο. Για λόγους ασφαλείας, μετά τη λήψη, πρέπει να υπολογίσετε ανεξάρτητα τη συνάρτηση κατακερματισμού και να συγκρίνετε την τιμή με αυτό που υποδεικνύεται στον ιστότοπο ή στο συνημμένο στο αρχείο. Το έχεις κάνει ποτέ αυτό;

Τι είναι πιο βολικό για τον υπολογισμό ενός κατακερματισμού;Τώρα υπάρχει ένας μεγάλος αριθμός παρόμοιων βοηθητικών προγραμμάτων, τόσο επί πληρωμή όσο και δωρεάν για χρήση. Προσωπικά μου άρεσε το HashTab. Πρώτον, κατά την εγκατάσταση το βοηθητικό πρόγραμμα είναι ενσωματωμένο ως καρτέλα στις ιδιότητες του αρχείου, δεύτερον, σας επιτρέπει να επιλέξετε μεγάλο αριθμό αλγορίθμων κατακερματισμού και, τρίτον, είναι δωρεάν για ιδιωτική μη εμπορική χρήση.

Τι είναι το ρωσικό;Όπως αναφέρθηκε παραπάνω, στη Ρωσία υπάρχει ένα πρότυπο κατακερματισμού GOST R 34.11-94, το οποίο χρησιμοποιείται ευρέως από πολλούς κατασκευαστές εργαλείων ασφάλειας πληροφοριών. Ένα από αυτά τα εργαλεία είναι το πρόγραμμα επιδιόρθωσης και παρακολούθησης της αρχικής κατάστασης του πακέτου λογισμικού FIX. Αυτό το πρόγραμμα είναι ένα μέσο παρακολούθησης της αποτελεσματικότητας της χρήσης της ασφάλειας πληροφοριών.

ΕΠΙΔΙΟΡΘΩΣΗ (έκδοση 2.0.1) για Windows 9x/NT/2000/XP

  • Υπολογισμός αθροισμάτων ελέγχου δεδομένων αρχείων χρησιμοποιώντας έναν από τους 5 εφαρμοσμένους αλγόριθμους.
  • Στερέωση και επακόλουθη παρακολούθηση της αρχικής κατάστασης του πακέτου λογισμικού.
  • Σύγκριση εκδόσεων πακέτων λογισμικού.
  • Στερέωση και έλεγχος καταλόγων.
  • Παρακολούθηση αλλαγών σε καθορισμένα αρχεία (καταλόγους).
  • Δημιουργία αναφορών σε μορφές TXT, HTML, SV.
  • Το προϊόν διαθέτει πιστοποιητικό FSTEC για NDV 3 Νο. 913 έως την 1η Ιουνίου 2013.

Τι γίνεται με την ψηφιακή υπογραφή;Το αποτέλεσμα του υπολογισμού της συνάρτησης κατακερματισμού, μαζί με το μυστικό κλειδί του χρήστη, πηγαίνει στην είσοδο του κρυπτογραφικού αλγορίθμου, όπου υπολογίζεται η ηλεκτρονική ψηφιακή υπογραφή. Αυστηρά μιλώντας, η συνάρτηση κατακερματισμού δεν αποτελεί μέρος του αλγόριθμου ψηφιακής υπογραφής, αλλά συχνά αυτό γίνεται επίτηδες προκειμένου να αποκλειστεί μια επίθεση με χρήση δημόσιου κλειδιού.

Επί του παρόντος, πολλές εφαρμογές ηλεκτρονικού εμπορίου σάς επιτρέπουν να αποθηκεύετε το μυστικό κλειδί του χρήστη σε μια ιδιωτική περιοχή διακριτικών (ruToken, eToken) χωρίς την τεχνική δυνατότητα να το ανακτήσετε από εκεί. Το ίδιο το διακριτικό έχει μια πολύ περιορισμένη περιοχή μνήμης, μετρημένη σε kilobyte. Για να υπογράψετε ένα έγγραφο, δεν υπάρχει τρόπος να μεταφέρετε το έγγραφο στο ίδιο το διακριτικό, αλλά είναι πολύ απλό να μεταφέρετε τον κατακερματισμό του εγγράφου στο διακριτικό και να λάβετε μια ηλεκτρονική ψηφιακή υπογραφή στην έξοδο.

Ή Η συνάρτηση κατακερματισμού είναιλειτουργία, μετατρέπει δεδομένα εισόδου οποιουδήποτε (συνήθως μεγάλου) μεγέθους σε δεδομένα σταθερού μεγέθους. Κατακερματισμός(Μερικές φορές σολ Yeshuvanya, αγγλικά Κατακερματισμός)— μετατροπή μιας συστοιχίας δεδομένων εισόδου αυθαίρετου μήκους σε μια συμβολοσειρά bit εξόδου σταθερού μήκους. Τέτοιοι μετασχηματισμοί ονομάζονται επίσης συναρτήσεις κατακερματισμούή συναρτήσεις συνέλιξης,και τα αποτελέσματά τους ονομάζονται κατακερματισμός, κωδικός κατακερματισμού άθροισμα κατακερματισμού,ή σύνοψη μηνύματος(Αγγλικός) Σύνοψη μηνυμάτων).

Η συνάρτηση κατακερματισμού χρησιμοποιείται ιδιαίτερα σε δομές δεδομένων - πίνακες κατακερματισμού και χρησιμοποιείται ευρέως σε λογισμικό για γρήγορη ανάκτηση δεδομένων. Οι συναρτήσεις κατακερματισμού χρησιμοποιούνται για τη βελτιστοποίηση πινάκων και βάσεων δεδομένων διασφαλίζοντας ότι οι ίδιες εγγραφές έχουν την ίδια τιμή κατακερματισμού. Αυτή η προσέγγιση για την εύρεση διπλότυπων είναι αποτελεσματική σε μεγάλα αρχεία. Ένα παράδειγμα αυτού είναι η εύρεση παρόμοιων περιοχών σε αλληλουχίες DNA. Μια κρυπτογραφική συνάρτηση κατακερματισμού διευκολύνει την επαλήθευση ότι κάποια είσοδος ταιριάζει με μια δεδομένη τιμή κατακερματισμού, αλλά εάν η είσοδος είναι άγνωστη, είναι σκόπιμα δύσκολο να ανακατασκευαστεί η τιμή εισόδου (ή μια ισοδύναμη εναλλακτική) γνωρίζοντας την αποθηκευμένη τιμή κατακερματισμού. Αυτό χρησιμοποιείται για τη διασφάλιση της ακεραιότητας των μεταδιδόμενων δεδομένων και είναι το δομικό στοιχείο για τα HMAC που παρέχουν έλεγχο ταυτότητας μηνυμάτων.

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

Ιστορία

Ο Donald Knuth πιστώνει την πρώτη συστηματική ιδέα του κατακερματισμού στον υπάλληλο της IBM Hans Peter Luhn, ο οποίος πρότεινε το hash τον Ιανουάριο του 1953.

Το 1956, ο Arnold Duma, στο έργο του Computers and Automation, ήταν ο πρώτος που εισήγαγε την έννοια του κατακερματισμού όπως τη γνωρίζουν σήμερα οι περισσότεροι προγραμματιστές. Η Ντούμα θεώρησε τον κατακερματισμό ως λύση στο «Πρόβλημα του Λεξικού» και πρότεινε επίσης τη χρήση του υπολοίπου της διαίρεσης με έναν πρώτο αριθμό ως κατακερματισμένη διεύθυνση.

Η πρώτη σημαντική εργασία που ασχολήθηκε με την αναζήτηση μεγάλων αρχείων ήταν το άρθρο του Wesley Peterson IBM Journal of Research and Development 1957, όπου όρισε την ανοιχτή διεύθυνση και επίσης επεσήμανε την υποβάθμιση της απόδοσης της απομακρυσμένης διευθυνσιοδότησης. Έξι χρόνια αργότερα, δημοσιεύτηκε το έργο του Werner Buchholz, το οποίο διερεύνησε σε μεγάλο βαθμό τις συναρτήσεις κατακερματισμού. Τα επόμενα χρόνια, ο κατακερματισμός χρησιμοποιήθηκε ευρέως, αλλά δεν δημοσιεύτηκε καμία σημαντική εργασία.

Το 1967, το κατακερματισμό με τη σύγχρονη έννοια αναφέρθηκε στο βιβλίο του Herbert Hellerman, Principles of Digital Computing Systems. Το 1968, ο Robert Morris δημοσίευσε στο Επικοινωνίες της ACMεξαιρετική επισκόπηση σχετικά με τον κατακερματισμό. Αυτή η εργασία θεωρείται μια δημοσίευση που εισάγει την έννοια του κατακερματισμού στην επιστημονική κυκλοφορία και τελικά ενοποιεί τον όρο «hash» μεταξύ των ειδικών.

Στις αρχές της δεκαετίας του 1990, το ισοδύναμο του όρου "hashing", χάρη στο έργο του Andrei Ershov, ήταν η λέξη "arrangement" (ρωσικά) και για τις συγκρούσεις χρησιμοποιήθηκε ο όρος "conflict" (ρωσικά) (ο Ershov χρησιμοποιούσε "Arrangements" από το 1956, καθώς και στη ρωσική έκδοση του βιβλίου του Niklaus Wirth "Algorithms and Data Structures" (1989) αυτός ο όρος χρησιμοποιείται, ωστόσο, καμία από αυτές τις επιλογές δεν έχει ριζώσει, και στη βιβλιογραφία ο όρος "). κατακερματισμός» χρησιμοποιείται κυρίως.

Περιγραφή

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

Γενικά, δεν υπάρχει αντιστοιχία ένα προς ένα μεταξύ των δεδομένων πηγής και του κωδικού κατακερματισμού, λόγω του γεγονότος ότι ο αριθμός των τιμών συνάρτησης κατακερματισμού είναι μικρότερος από τον αριθμό των παραλλαγών τιμών του πίνακα εισόδου. Υπάρχουν πολλοί πίνακες με διαφορετικό περιεχόμενο, αλλά δίνουν τους ίδιους κωδικούς κατακερματισμού - τα λεγόμενα collisions. Η πιθανότητα συγκρούσεων παίζει σημαντικό ρόλο στην αξιολόγηση της ποιότητας των συναρτήσεων κατακερματισμού.

Υπάρχουν πολλοί αλγόριθμοι κατακερματισμού με διαφορετικές ιδιότητες (χωρητικότητα bit, υπολογιστική πολυπλοκότητα, κρυπτογραφική ισχύς κ.λπ.). Η επιλογή μιας ή άλλης συνάρτησης κατακερματισμού καθορίζεται από τις ιδιαιτερότητες του προβλήματος που επιλύεται. Τα πιο απλά παραδείγματα συναρτήσεων κατακερματισμού είναι ένα άθροισμα ελέγχου ή CRC.

Τύποι συναρτήσεων κατακερματισμού

Μια καλή συνάρτηση κατακερματισμού πρέπει να ικανοποιεί δύο ιδιότητες:

  • να υπολογιστεί γρήγορα?
  • Ελαχιστοποιήστε τον αριθμό των συγκρούσεων

Ας υποθέσουμε, για βεβαιότητα, ο αριθμός των κλειδιών και η συνάρτηση κατακερματισμού δεν έχουν περισσότερες από διαφορετικές τιμές:

Ένα παράδειγμα μιας "κακής" συνάρτησης κατακερματισμού είναι η συνάρτηση c, η οποία ταιριάζει με έναν δεκαψήφιο φυσικό αριθμό με τρία ψηφία που επιλέγονται από τη μέση του εικοσαψήφιου τετραγώνου του αριθμού. Φαίνεται ότι οι τιμές του κωδικού κατακερματισμού θα πρέπει να κατανέμονται ομοιόμορφα μεταξύ "000" και "999", αλλά για πραγματικά δεδομένα αυτή η μέθοδος είναι κατάλληλη μόνο εάν τα κλειδιά δεν έχουν μεγάλο αριθμό μηδενικών στα αριστερά ή στα δεξιά.

Ωστόσο, υπάρχουν πολλές άλλες απλές και αξιόπιστες μέθοδοι στις οποίες βασίζονται πολλές συναρτήσεις κατακερματισμού.

Συναρτήσεις κατακερματισμού βάσει διαίρεσης

Η πρώτη μέθοδος είναι ότι χρησιμοποιούμε ως κατακερματισμό το υπόλοιπο της διαίρεσης με, όπου είναι ο αριθμός όλων των πιθανών κατακερματισμών:

Ταυτόχρονα, είναι προφανές ότι με ένα ζευγάρι, η λειτουργία αποθήκευσης ζευγαρώνεται, με ένα ζευγάρι. Και περίεργο - πότε περίεργο, το οποίο μπορεί να οδηγήσει σε σημαντική μετατόπιση των δεδομένων στα αρχεία. Επίσης, δεν πρέπει να χρησιμοποιείτε το σύστημα αριθμών ενός υπολογιστή ως βάση, καθώς ο κατακερματισμός θα εξαρτηθεί μόνο από μερικά ψηφία του αριθμού που βρίσκεται στα δεξιά, γεγονός που θα οδηγήσει σε μεγάλο αριθμό συγκρούσεων. Στην πράξη, συνήθως επιλέγουν το απλό - στις περισσότερες περιπτώσεις αυτή η επιλογή είναι αρκετά ικανοποιητική.

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

Εάν επιλεγεί σωστά, αυτή η μέθοδος εγγυάται την απουσία συγκρούσεων μεταξύ σχεδόν πανομοιότυπων πλήκτρων.

Πολλαπλασιαστικό σχήμα κατακερματισμού

Η δεύτερη μέθοδος είναι να επιλέξετε κάποια ακέραια σταθερά coprime, όπου είναι ο αριθμός των πιθανών τιμών με τη μορφή λέξης μηχανής (σε υπολογιστές IBM PC). Τότε μπορούμε να πάρουμε μια συνάρτηση κατακερματισμού της φόρμας:

Σε αυτήν την περίπτωση, σε έναν υπολογιστή με δυαδικό σύστημα αριθμών, είναι δύναμη δύο και αποτελείται από τα πιο σημαντικά bits του δεξιού μισού του γινομένου.

Μεταξύ των πλεονεκτημάτων αυτών των δύο μεθόδων, αξίζει να σημειωθεί ότι εκμεταλλεύονται το γεγονός ότι τα πραγματικά κλειδιά δεν είναι τυχαία. Για παράδειγμα, εάν τα πλήκτρα αντιπροσωπεύουν μια αριθμητική πρόοδο (ας πούμε την ακολουθία ονομάτων "όνομα1", "όνομα2", "όνομα3"). Η πολλαπλασιαστική μέθοδος θα χαρτογραφήσει μια αριθμητική πρόοδο σε μια κατά προσέγγιση αριθμητική πρόοδο διαφορετικών τιμών κατακερματισμού, μειώνοντας τον αριθμό των συγκρούσεων σε σύγκριση με μια τυχαία κατάσταση.

Μία από τις παραλλαγές αυτής της μεθόδου είναι ο κατακερματισμός Fibonacci, με βάση τις ιδιότητες της χρυσής αναλογίας. Η τιμή που επιλέγεται εδώ είναι αυτή που βρίσκεται πλησιέστερα στον ακέραιο με τον οποίο είναι συμπρώτη

Κατακερματισμοί συμβολοσειρών μεταβλητού μήκους

Οι παραπάνω μέθοδοι ισχύουν επίσης όταν πρέπει να εξετάσουμε τα κλειδιά που αποτελούνται από πολλές λέξεις ή κλειδιά με μεταβλητό μήκος. Για παράδειγμα, μπορείτε να συνδυάσετε λέξεις σε μία χρησιμοποιώντας προσθήκη modulo ή προσθήκη modulo 2. Ένας από τους αλγόριθμους που λειτουργεί με βάση αυτή την αρχή είναι η συνάρτηση κατακερματισμού Pearson.

Ο κατακερματισμός Pearson είναι ένας αλγόριθμος που προτείνεται από τον Peter Pearson. Peter Pearson)για επεξεργαστές με καταχωρητές 8-bit, η αποστολή των οποίων είναι ο γρήγορος υπολογισμός ενός κωδικού κατακερματισμού για μια συμβολοσειρά αυθαίρετου μήκους. Η συνάρτηση λαμβάνει ως είσοδο μια λέξη που αποτελείται από χαρακτήρες, κάθε 1 byte σε μέγεθος, και επιστρέφει μια τιμή στην περιοχή από 0 έως 255. Η τιμή του κωδικού κατακερματισμού εξαρτάται από κάθε χαρακτήρα της λέξης εισόδου.

Ο αλγόριθμος μπορεί να περιγραφεί από τον ακόλουθο ψευδοκώδικα, ο οποίος παίρνει μια συμβολοσειρά ως είσοδο και χρησιμοποιεί έναν πίνακα μετάθεσης

h:=0 Για το καθέναντο σε W βρόχοςευρετήριο:=η xor ch:=T Τελικός βρόχος Απόδοσηη

Μεταξύ των πλεονεκτημάτων του αλγορίθμου πρέπει να σημειωθεί:

  • ευκολία υπολογισμού?
  • δεν υπάρχουν δεδομένα εισόδου για τα οποία η πιθανότητα σύγκρουσης είναι η υψηλότερη.
  • δυνατότητα τροποποίησης σε ιδανική συνάρτηση κατακερματισμού.

Ως εναλλακτικός τρόπος κατακερματισμού κλειδιών που αποτελούνται από σύμβολα (), μπορεί κανείς να προτείνει τους υπολογισμούς

Χρήση συναρτήσεων κατακερματισμού

Οι συναρτήσεις κατακερματισμού χρησιμοποιούνται ευρέως στην κρυπτογραφία, καθώς και σε πολλές δομές δεδομένων - πίνακες κατακερματισμού, φίλτρα Bloom και καρτεσιανά δέντρα.

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

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

  • Μη αναστρέψιμη:για μια δεδομένη τιμή κατακερματισμού mΠρέπει να είναι υπολογιστικά αδύνατο να βρεθεί το μπλοκ δεδομένων για το οποίο.
  • βιωσιμότητα συγκρούσεις πρώτου είδους:για ένα δεδομένο μήνυμα Μπρέπει να είναι υπολογιστικά αδύνατο να βρεθεί άλλος μήνυμαΝ, για το οποίο.
  • βιωσιμότητα Νασυγκρούσεις δεύτερο είδος:Θα πρέπει να είναι υπολογιστικά αδύνατο να βρείτε ζεύγη μηνυμάτων που έχουν τον ίδιο κατακερματισμό.

Αυτές οι απαιτήσεις εξαρτώνται η μία από την άλλη:

  • Η αντίστροφη συνάρτηση είναι ασταθής σε συγκρούσεις πρώτου και δεύτερου είδους.
  • Μια συνάρτηση που είναι ασταθής σε συγκρούσεις πρώτου είδους, ασταθής σε συγκρούσεις δεύτερου είδους. το αντίστροφο δεν ισχύει.

Πρέπει να σημειωθεί ότι δεν έχει αποδειχθεί η ύπαρξη μη αναστρέψιμων συναρτήσεων κατακερματισμού, για τις οποίες ο υπολογισμός οποιασδήποτε αντίστροφης εικόνας μιας δεδομένης τιμής κατακερματισμού είναι θεωρητικά αδύνατος. Συνήθως η εύρεση της αντίστροφης τιμής είναι μόνο μια υπολογιστικά δύσκολη εργασία.

Η επίθεση γενεθλίων σάς επιτρέπει να βρείτε συγκρούσεις για μια συνάρτηση κατακερματισμού με το μήκος των τιμών n bit κατά μέσο όρο ανά περίπου υπολογισμό συνάρτησης κατακερματισμού. Γι' αυτό n —Μια συνάρτηση κατακερματισμού bit θεωρείται κρυπτογράφηση εάν η υπολογιστική πολυπλοκότητα της εύρεσης συγκρούσεων για αυτήν είναι κοντά.

Για κρυπτογραφικές συναρτήσεις κατακερματισμού, είναι επίσης σημαντικό ότι με την παραμικρή αλλαγή στο όρισμα, η τιμή της συνάρτησης αλλάζει πολύ (φαινόμενο χιονοστιβάδας). Συγκεκριμένα, η τιμή κατακερματισμού δεν πρέπει να διαρρέει πληροφορίες, ακόμη και για μεμονωμένα bits του ορίσματος. Αυτή η απαίτηση είναι το κλειδί για την κρυπτογραφική δύναμη των αλγορίθμων κατακερματισμού που κατακερματίζουν τον κωδικό πρόσβασης του χρήστη για να αποκτήσει το κλειδί.

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

Γεωμετρικός κατακερματισμός

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

Επιταχύνετε την ανάκτηση δεδομένων

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

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

Οι αλγόριθμοι αναζήτησης που εξετάσαμε βασίζονται συνήθως σε μια λειτουργία αφηρημένης σύγκρισης. Αυτό που ξεχωρίζει από αυτήν τη σειρά είναι η μέθοδος διανεμητικής αναζήτησης, που περιγράφεται στους «Πίνακες συμβόλων και δυαδικά δέντρα αναζήτησης», στην οποία το στοιχείο με το κλειδί i αποθηκεύεται στην i-η θέση του πίνακα, η οποία σας επιτρέπει να έχετε άμεση πρόσβαση σε αυτό. Η διανεμητική αναζήτηση χρησιμοποιεί βασικές τιμές ως δείκτες πίνακα αντί για τελεστές μιας πράξης σύγκρισης. Η ίδια η μέθοδος βασίζεται στο γεγονός ότι τα κλειδιά είναι διαφορετικοί ακέραιοι αριθμοί από το ίδιο εύρος με τα ευρετήρια του πίνακα. Σε αυτό το κεφάλαιο, θα εξετάσουμε τον κατακερματισμό, μια προηγμένη μορφή διανεμητικής αναζήτησης που χρησιμοποιείται σε πιο τυπικές εφαρμογές αναζήτησης όπου τα κλειδιά δεν έχουν τόσο βολικές ιδιότητες. Το τελικό αποτέλεσμα αυτής της προσέγγισης είναι εντελώς διαφορετικό από τις μεθόδους που βασίζονται σε σύγκριση - αντί να περιηγούμαστε σε δομές δεδομένων λεξικού συγκρίνοντας κλειδιά αναζήτησης με κλειδιά στα στοιχεία, προσπαθούμε να αποκτήσουμε απευθείας πρόσβαση στα στοιχεία του πίνακα εκτελώντας μια αριθμητική μετατροπή των κλειδιών σε διευθύνσεις πίνακα.

Οι αλγόριθμοι αναζήτησης που χρησιμοποιούν κατακερματισμό έχουν δύο διακριτά μέρη. Το πρώτο βήμα είναι να υπολογίσετε μια συνάρτηση κατακερματισμού που μετατρέπει το κλειδί αναζήτησης σε διεύθυνση στον πίνακα. Στην ιδανική περίπτωση, διαφορετικά κλειδιά θα αντιστοιχούν σε διαφορετικές διευθύνσεις, αλλά συχνά δύο ή περισσότερα διαφορετικά κλειδιά μπορούν να αντιστοιχιστούν στην ίδια διεύθυνση στον πίνακα. Επομένως, το δεύτερο μέρος της αναζήτησης κατακερματισμού είναι η διαδικασία επίλυσης σύγκρουσης, η οποία χειρίζεται τέτοια κλειδιά. Μία από τις τεχνικές επίλυσης διενέξεων που θα εξετάσουμε σε αυτό το κεφάλαιο χρησιμοποιεί συνδεδεμένες λίστες, επομένως έχει άμεση εφαρμογή σε δυναμικές καταστάσεις όπου είναι δύσκολο να προβλεφθεί εκ των προτέρων ο αριθμός των κλειδιών αναζήτησης. Οι άλλες δύο μέθοδοι επίλυσης σύγκρουσης επιτυγχάνουν υψηλά επίπεδα εκτέλεσηαναζήτηση επειδή τα στοιχεία είναι αποθηκευμένα σε σταθερό πίνακα. Θα εξετάσουμε έναν τρόπο βελτίωσης αυτών των μεθόδων, επιτρέποντάς τους να χρησιμοποιηθούν σε περιπτώσεις όπου το μέγεθος του πίνακα δεν μπορεί να προβλεφθεί εκ των προτέρων.

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

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

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

Λειτουργίες κατακερματισμού

Πρώτα απ 'όλα, είναι απαραίτητο να λυθεί το πρόβλημα του υπολογισμού μιας συνάρτησης κατακερματισμού που μετατρέπει τα κλειδιά σε διευθύνσεις πίνακα. Συνήθως, η εφαρμογή αυτού του αριθμητικού υπολογισμού δεν είναι δύσκολη, αλλά πρέπει να προσέχετε να μην συναντήσετε διάφορες ανεπαίσθητες παγίδες. Εάν έχετε έναν πίνακα που μπορεί να περιέχει στοιχεία M, χρειάζεστε μια συνάρτηση που μετατρέπει τα κλειδιά σε ακέραιους αριθμούς στην περιοχή. Μια ιδανική συνάρτηση κατακερματισμού θα πρέπει να είναι εύκολο να υπολογιστεί και θα πρέπει να είναι παρόμοια με μια τυχαία συνάρτηση: για κάθε δεδομένο όρισμα, τα αποτελέσματα πρέπει να είναι κατά κάποιο τρόπο εξίσου πιθανά.

Η συνάρτηση κατακερματισμού εξαρτάται από τον τύπο του κλειδιού. Αυστηρά μιλώντας, κάθε πιθανός τύπος κλειδιού απαιτεί ξεχωριστή συνάρτηση κατακερματισμού. Για να βελτιωθεί η αποτελεσματικότητα, είναι συνήθως επιθυμητό να αποφεύγεται η ρητή μετατροπή τύπων, στρέφοντας αντ' αυτού στην ιδέα της αντιμετώπισης της δυαδικής αναπαράστασης κλειδιών σε μια λέξη μηχανής ως ακέραιο που μπορεί να χρησιμοποιηθεί σε αριθμητικούς υπολογισμούς. Ο κατακερματισμός προηγείται των γλωσσών υψηλού επιπέδου - στους πρώιμους υπολογιστές ήταν συνηθισμένο να αντιμετωπίζεται μια τιμή είτε ως κλειδί συμβολοσειράς είτε ως ακέραιος αριθμός. Ορισμένες γλώσσες υψηλού επιπέδου καθιστούν δύσκολη τη σύνταξη προγραμμάτων που εξαρτώνται από την αναπαράσταση των κλειδιών σε έναν συγκεκριμένο υπολογιστή, επειδή τέτοια προγράμματα εξαρτώνται από τη μηχανή εγγενώς και επομένως είναι δύσκολο να μεταφερθούν σε άλλον υπολογιστή. Συνήθως οι συναρτήσεις κατακερματισμού εξαρτώνται από τη διαδικασία μετατροπής κλειδιών σε ακέραιους αριθμούς, επομένως μπορεί να είναι δύσκολο για τις υλοποιήσεις κατακερματισμού να είναι τόσο ανεξάρτητες από τη μηχανή όσο και αποτελεσματικές. Γενικά, τα απλά πλήκτρα ακέραιου αριθμού ή πλήκτρων κινητής υποδιαστολής μπορούν να μετατραπούν με μία μόνο λειτουργία του μηχανήματος, αλλά τα πλήκτρα συμβολοσειράς και άλλοι τύποι σύνθετων κλειδιών απαιτούν μεγαλύτερη επιβάρυνση και μεγαλύτερη προσοχή στην αποτελεσματικότητα.

Πιθανώς η απλούστερη κατάσταση είναι όταν τα πλήκτρα είναι αριθμοί κινητής υποδιαστολής από ένα σταθερό εύρος. Για παράδειγμα, εάν τα κλειδιά είναι αριθμοί μεγαλύτεροι από 0 και μικρότεροι από 1, μπορείτε απλά να τους πολλαπλασιάσετε με το M, να στρογγυλοποιήσετε το αποτέλεσμα στον χαμηλότερο ακέραιο αριθμό και να λάβετε μια διεύθυνση στην περιοχή μεταξύ 0 και M - 1. ένα τέτοιο παράδειγμα φαίνεται στο Σχ.


14.1. Εάν τα πλήκτρα είναι μεγαλύτερα από s και μικρότερα από t, μπορούν να κλιμακωθούν αφαιρώντας το s και διαιρώντας με t-s, φέρνοντάς τα στο εύρος τιμών μεταξύ 0 και 1 και, στη συνέχεια, πολλαπλασιάζοντας με το M για να λάβετε τη διεύθυνση στον πίνακα .

Ρύζι. 14.1.

Εάν τα κλειδιά είναι ακέραιοι αριθμοί w-bit, μπορούν να μετατραπούν σε floats και να διαιρεθούν με 2 w για να παράγουν πλωτήρες στην περιοχή μεταξύ 0 και 1 και στη συνέχεια να πολλαπλασιαστούν με το M όπως στην προηγούμενη παράγραφο. Εάν οι πράξεις κινητής υποδιαστολής διαρκούν πολύ και οι αριθμοί δεν είναι αρκετά μεγάλοι για να προκαλέσουν υπερχείλιση, το ίδιο αποτέλεσμα μπορεί να ληφθεί χρησιμοποιώντας ακέραια αριθμητική αριθμητική: πολλαπλασιάστε το κλειδί με το M και, στη συνέχεια, μετατοπίστε τα bits w προς τα δεξιά για να διαιρέσετε με 2 w (ή, εάν ο πολλαπλασιασμός οδηγεί σε υπερχείλιση, κάντε μια μετατόπιση και μετά έναν πολλαπλασιασμό). Τέτοιες μέθοδοι είναι άχρηστες για κατακερματισμό εκτός εάν τα κλειδιά κατανέμονται ομοιόμορφα σε όλο το εύρος, καθώς η τιμή κατακερματισμού καθορίζεται μόνο από τα αρχικά ψηφία του κλειδιού.

Μια απλούστερη και πιο αποτελεσματική μέθοδος για ακέραιους αριθμούς w-bit είναι ίσως μια από τις πιο συχνά χρησιμοποιούμενες μεθόδους κατακερματισμού - επιλέγοντας έναν πρώτο αριθμό ως το μέγεθος M του πίνακα και υπολογίζοντας το υπόλοιπο κατά τη διαίρεση του k με το M, δηλ. h(k) = k mod M για οποιοδήποτε ακέραιο κλειδί k. Αυτή η συνάρτηση ονομάζεται αρθρωτή συνάρτηση κατακερματισμού. Είναι πολύ εύκολο να υπολογιστεί (k % M σε C++) και είναι αποτελεσματικό για την επίτευξη ομοιόμορφης κατανομής βασικών τιμών μεταξύ τιμών μικρότερων από το M. Ένα μικρό παράδειγμα φαίνεται στο Σχήμα 1.


14.2.

Ρύζι. 14.2.

Οι τρεις στήλες στα δεξιά δείχνουν το αποτέλεσμα του κατακερματισμού των πλήκτρων 16-bit που εμφανίζονται στα αριστερά χρησιμοποιώντας τις ακόλουθες λειτουργίες:

v% 97 (αριστερά)

v% 100 (κέντρο) και

(int) (a * v) % 100 (δεξιά),

όπου a = .618033. Τα μεγέθη του πίνακα για αυτές τις συναρτήσεις είναι αντίστοιχα 97, 100 και 100. Οι τιμές εμφανίζονται τυχαίες (επειδή τα πλήκτρα είναι τυχαία). Η δεύτερη συνάρτηση (v % 100) χρησιμοποιεί μόνο τα δύο δεξιά ψηφία των πλήκτρων και επομένως μπορεί να εμφανίζει κακή απόδοση για μη τυχαία πλήκτρα.

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

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

14.3. Σε αυτό το παράδειγμα δεδομένων χαρακτήρων 7 bit, το κλειδί αντιμετωπίζεται ως βασικός αριθμός 128 - ένα ψηφίο για κάθε χαρακτήρα του κλειδιού. Η λέξη αντιστοιχεί πλέον στον αριθμό 1816567, ο οποίος μπορεί να γραφτεί και ως


γιατί στον κώδικα ASCII οι χαρακτήρες n, o και w αντιστοιχούν στους αριθμούς 1568 = 110, 1578 = 111 και 1678 = 119. Η επιλογή μεγέθους πίνακα M = 64 για αυτόν τον τύπο κλειδιού είναι ατυχής, επειδή η προσθήκη πολλαπλασίων του 64 (ή του 128) στο x δεν αλλάζει την τιμή του x mod 64 - για οποιοδήποτε κλειδί, η τιμή κατακερματισμού είναι η τιμή των τελευταίων 6 ψηφίων αυτού του κλειδιού. Φυσικά, μια καλή συνάρτηση κατακερματισμού πρέπει να λαμβάνει υπόψη όλα τα bit του κλειδιού, ειδικά για τα πλήκτρα χαρακτήρων. Παρόμοιες καταστάσεις μπορεί να προκύψουν όταν το M περιέχει έναν παράγοντα που είναι δύναμη 2. Ο απλούστερος τρόπος για να αποφευχθεί αυτό είναι να επιλέξετε έναν πρώτο αριθμό για τον M.

Ρύζι. 14.3.

Ο αρθρωτός κατακερματισμός είναι πολύ απλός στην εφαρμογή, εκτός από το ότι το μέγεθος του πίνακα πρέπει να είναι πρώτος αριθμός. Για ορισμένες εφαρμογές, μπορείτε να αρκεστείτε σε έναν μικρό γνωστό πρώτο αριθμό ή μπορείτε να πραγματοποιήσετε αναζήτηση στη λίστα των γνωστών πρώτων αριθμών για έναν που είναι κοντά στο απαιτούμενο μέγεθος πίνακα. Για παράδειγμα, αριθμοί ίσοι με 2 t - 1 είναι πρώτοι όταν t = 2, 3, 5, 7, 13, 17, 19 και 31(και για καμία άλλη τιμή του t< 31 ): это известные простые числа Мерсенна. Чтобы динамически распределить таблицу нужного размера, нужно вычислить простое число, близкое к этому значению. Такое вычисление нетривиально (хотя для этого и существует остроумный алгоритм, который будет рассмотрен в части 5), поэтому на практике обычно используют таблицу заранее вычисленных значений (см. рис. 14.4). Использование модульного хеширования - не единственная причина, по которой размер таблицы стоит сделать простым числом; еще одна причина рассматривается в разделе 14.4.


Ρύζι. 14.4.

Αυτός ο πίνακας με τους μεγαλύτερους πρώτους αριθμούς μικρότερους από 2 n είναι για , μπορεί να χρησιμοποιηθεί για τη δυναμική εκχώρηση ενός πίνακα κατακερματισμού όταν θέλετε το μέγεθος του πίνακα να είναι πρώτος αριθμός. Για οποιαδήποτε δεδομένη θετική τιμή στο εύρος που καλύπτεται, αυτός ο πίνακας μπορεί να χρησιμοποιηθεί για τον προσδιορισμό του πρώτου αριθμού που διαφέρει κατά λιγότερο από έναν παράγοντα 2.

Μια άλλη επιλογή για το χειρισμό ακέραιων κλειδιών είναι ο συνδυασμός των πολλαπλασιαστικών και σπονδυλωτών μεθόδων: πολλαπλασιάζετε το κλειδί με μια σταθερά μεταξύ 0 και 1 και, στη συνέχεια, διαιρείτε το modulo M. Με άλλα λόγια, πρέπει να χρησιμοποιήσετε τη συνάρτηση . Υπάρχει μια σχέση μεταξύ των τιμών του, M και της αποτελεσματικής ρίζας του κλειδιού που θα μπορούσε θεωρητικά να οδηγήσει σε ανώμαλη συμπεριφορά, αλλά εάν χρησιμοποιηθεί μια αυθαίρετη τιμή του a, είναι απίθανο να προκύψει κάποιο πρόβλημα σε μια πραγματική εφαρμογή. Συχνά η τιμή φ = 0,618033... (χρυσή αναλογία) επιλέγεται ως α.

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

Σε πολλές εφαρμογές που χρησιμοποιούν πίνακες συμβόλων, τα πλήκτρα δεν είναι αριθμοί και δεν είναι απαραίτητα σύντομα. πιο συχνά πρόκειται για αλφαριθμητικές χορδές που μπορεί να είναι αρκετά μεγάλες. Πώς λοιπόν υπολογίζετε μια συνάρτηση κατακερματισμού για μια λέξη όπως το averylongkey;

Στον κώδικα ASCII 7-bit, αυτή η λέξη αντιστοιχεί σε έναν αριθμό 84-bit \begin(align*) 97 \cdot 128^(11) &+ 118 \cdot 128^(10) + 101 \cdot 128^(9) + 114 \ cdot 128^(8) + 121 \cdot 128^(7)\\ &+ 108 \cdot 128^(6) + 111 \cdot 128^(5) + 110 \cdot 128^(4) + 103 \ cdot 128 ^(3)\\ &+ 107 \cdot 128^(2) + 101 \cdot 128^(1) + 121 \cdot 128^(0), \end(align*),

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

Για τον υπολογισμό μιας αρθρωτής συνάρτησης κατακερματισμού για μεγάλα πλήκτρα, μετατρέπονται κομμάτι προς θραύσμα. Μπορείτε να επωφεληθείτε από τις αριθμητικές ιδιότητες της συνάρτησης συντελεστή και να χρησιμοποιήσετε τον αλγόριθμο του Horner (βλ. Ενότητα 4.9 «Αφηρημένοι τύποι δεδομένων»). Αυτή η μέθοδος βασίζεται σε έναν άλλο τρόπο εγγραφής αριθμών που αντιστοιχούν σε κλειδιά. Για το υπό εξέταση παράδειγμα, γράφουμε την ακόλουθη έκφραση: \begin(align*) ((((((((97 \cdot 128^(11) &+ 118) \cdot 128^(10) + 101) \ cdot 128^( 9) + 114) \cdot 128^(8) + 121) \cdot 128^(7)\\ &+ 108) \cdot 128^(6) + 111) \cdot 128^(5) + 110) \cdot 128^(4) + 103) \cdot 128^(3)\\ &+ 107) \cdot 128^(2) + 101) \cdot 128^(1) + 121. \end(align* )

Δηλαδή, ο δεκαδικός αριθμός που αντιστοιχεί στην κωδικοποίηση χαρακτήρων μιας συμβολοσειράς μπορεί να υπολογιστεί σαρώνοντάς την από αριστερά προς τα δεξιά, πολλαπλασιάζοντας τη συσσωρευμένη τιμή επί 128 και στη συνέχεια προσθέτοντας την τιμή κωδικοποίησης του επόμενου χαρακτήρα. Στην περίπτωση μιας μεγάλης συμβολοσειράς, αυτή η μέθοδος υπολογισμού θα οδηγήσει τελικά σε έναν αριθμό μεγαλύτερο από αυτόν που μπορεί γενικά να αναπαρασταθεί σε έναν υπολογιστή. Ωστόσο, αυτός ο αριθμός δεν χρειάζεται, αφού απαιτείται μόνο το (μικρό) υπόλοιπο της διαίρεσης του με το M Το αποτέλεσμα μπορεί να ληφθεί χωρίς καν να αποθηκεύσετε μια μεγάλη συσσωρευμένη τιμή, γιατί σε οποιοδήποτε σημείο του υπολογισμού, μπορούμε να απορρίψουμε ένα πολλαπλάσιο του M - κάθε φορά που εκτελούμε πολλαπλασιασμό και πρόσθεση, χρειάζεται μόνο να αποθηκεύουμε το υπόλοιπο του modulo διαίρεσης M. Το αποτέλεσμα θα είναι το ίδιο σαν να είχαμε την ευκαιρία να υπολογίσουμε έναν μεγάλο αριθμό και μετά εκτελέστε διαίρεση (βλ. άσκηση 14.10). Αυτή η παρατήρηση οδηγεί σε μια απλή αριθμητική μέθοδο για τον υπολογισμό αρθρωτών συναρτήσεων κατακερματισμού για μεγάλες συμβολοσειρές - βλέπε Πρόγραμμα 14.1. Αυτό το πρόγραμμα χρησιμοποιεί ένα τελευταίο τέχνασμα: αντί να χρησιμοποιεί τη βάση 128, χρησιμοποιεί τον πρώτο αριθμό 127. Ο λόγος για αυτήν την αλλαγή συζητείται στην επόμενη παράγραφο.

Υπάρχουν πολλοί τρόποι υπολογισμού συναρτήσεων κατακερματισμού με περίπου το ίδιο κόστος με το αρθρωτό κατακερματισμό χρησιμοποιώντας τη μέθοδο του Horner (μία ή δύο αριθμητικές πράξεις για κάθε χαρακτήρα στο κλειδί). Για τα τυχαία κλειδιά, αυτές οι μέθοδοι είναι πρακτικά οι ίδιες, αλλά τα πραγματικά κλειδιά σπάνια είναι τυχαία. Η δυνατότητα τυχαιοποίησης πραγματικών κλειδιών με χαμηλό κόστος μάς οδηγεί να εξετάσουμε τυχαιοποιημένους αλγόριθμους κατακερματισμού, καθώς απαιτούμε συναρτήσεις κατακερματισμού που δημιουργούν τυχαίους δείκτες σε έναν πίνακα ανεξάρτητα από την κατανομή του κλειδιού. Η τυχαιοποίηση δεν είναι δύσκολο να οργανωθεί, καθώς δεν είναι καθόλου απαραίτητο να τηρήσουμε κυριολεκτικά τον ορισμό του αρθρωτού κατακερματισμού - είναι απαραίτητο μόνο στον υπολογισμό ενός ακέραιου αριθμού μικρότερου από M, να χρησιμοποιούνται όλα τα bit του κλειδιού.

Πρόγραμμα 14.1. Λειτουργία κατακερματισμού για πλήκτρα συμβολοσειράς

M = 96 και a = 128 (πάνω),

M = 97 και a = 128 (κέντρο) και

M=96 και a=127 (κάτω)

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

Το πρόγραμμα 14.1 δείχνει έναν τρόπο για να το κάνετε αυτό: χρησιμοποιώντας έναν βασικό πρώτο αντί για δύναμη 2 και έναν ακέραιο που αντιστοιχεί στην αναπαράσταση ASCII της συμβολοσειράς. Στο Σχ. 14.5 Εικ.

Θεωρητικά, μια ιδανική καθολική συνάρτηση κατακερματισμού είναι αυτή για την οποία η πιθανότητα σύγκρουσης μεταξύ δύο διαφορετικών κλειδιών σε έναν πίνακα μεγέθους M είναι ακριβώς 1/M. Μπορεί να αποδειχθεί ότι η χρήση μιας ακολουθίας τυχαίων διακριτών τιμών ως συντελεστής a στο Πρόγραμμα 14.1, αντί για μια σταθερή αυθαίρετη τιμή, μετατρέπει τον αρθρωτό κατακερματισμό σε μια καθολική συνάρτηση κατακερματισμού. Ωστόσο, το κόστος δημιουργίας ενός νέου τυχαίου αριθμού για κάθε χαρακτήρα στο κλειδί είναι συνήθως απαράδεκτο. Στην πράξη, ο συμβιβασμός που φαίνεται στο Πρόγραμμα 14.1 μπορεί να επιτευχθεί με το να μην αποθηκεύεται ένας πίνακας διαφορετικών τυχαίων αριθμών για κάθε βασικό χαρακτήρα, αλλά μεταβάλλοντας τους συντελεστές δημιουργώντας μια απλή ψευδοτυχαία ακολουθία.

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

Και τα λοιπά.). Η επιλογή μιας ή άλλης συνάρτησης κατακερματισμού καθορίζεται από τις ιδιαιτερότητες του προβλήματος που επιλύεται. Τα πιο απλά παραδείγματα συναρτήσεων κατακερματισμού είναι το checksum ή το CRC.

Γενικά, δεν υπάρχει αντιστοιχία ένας προς έναν μεταξύ των δεδομένων πηγής και του κώδικα κατακερματισμού. Επομένως, υπάρχουν πολλά σύνολα δεδομένων που δίνουν τους ίδιους κωδικούς κατακερματισμού - τις λεγόμενες συγκρούσεις. Η πιθανότητα συγκρούσεων παίζει σημαντικό ρόλο στην αξιολόγηση της «ποιότητας» των συναρτήσεων κατακερματισμού.

Αθροίσματα ελέγχου

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

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

Το τίμημα για μια τόσο υψηλή ταχύτητα είναι η έλλειψη κρυπτογραφικής ισχύος - μια εύκολη ευκαιρία να προσαρμόσετε το μήνυμα σε ένα προκαθορισμένο ποσό. Επίσης, τα αθροίσματα ελέγχου (τυπικά: 32 bit) είναι συνήθως χαμηλότερα σε πλάτος από τα κρυπτογραφικά κατακερματισμένα (συνήθη: 128, 160 και 256 bit), που σημαίνει ότι μπορεί να προκύψουν ακούσιες συγκρούσεις.

Η απλούστερη περίπτωση ενός τέτοιου αλγορίθμου είναι να διαιρέσουμε ένα μήνυμα σε λέξεις 32 ή 16 bit και να τις αθροίσουμε, κάτι που χρησιμοποιείται, για παράδειγμα, στο TCP/IP.

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

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

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

Χρήση κατακερματισμού

Οι συναρτήσεις κατακερματισμού χρησιμοποιούνται επίσης σε ορισμένες δομές δεδομένων - πίνακες κατακερματισμού και καρτεσιανά δέντρα. Οι απαιτήσεις για τη συνάρτηση κατακερματισμού σε αυτήν την περίπτωση είναι διαφορετικές:

  • καλή δυνατότητα ανάμειξης δεδομένων
  • αλγόριθμος γρήγορου υπολογισμού

Συμφωνία δεδομένων

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

Έλεγχος για σφάλματα

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

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

Έλεγχος φράσης πρόσβασης

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

Ένα παράδειγμα σε αυτήν την περίπτωση θα ήταν το GNU/Linux και τα Microsoft Windows XP. Αποθηκεύουν μόνο τιμές κατακερματισμού των φράσεων πρόσβασης από λογαριασμούς χρηστών.

Επιταχύνετε την ανάκτηση δεδομένων

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

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

Λίστα αλγορίθμων

  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • RIPEMD-160
  • RIPEMD-320
  • Σνέφρου
  • Τίγρης (Whirlpool
  • Άθροισμα ελέγχου IP Internet (RFC 1071)

Εδαφος διά παιγνίδι γκολφ

Ίδρυμα Wikimedia.

2010.

    Δείτε τι είναι ο "Κωδικός κατακερματισμού" σε άλλα λεξικά:Κωδικός κατακερματισμού - το αποτέλεσμα ενός αριθμητικού συνδυασμού με όλα τα byte του κώδικα προγράμματος ή του συνόλου δεδομένων. Το αποτέλεσμα του αλγορίθμου κατακερματισμού περιλαμβάνει μόνο μερικά byte και ο αλγόριθμος είναι σχεδιασμένος με τέτοιο τρόπο ώστε οποιαδήποτε τροποποίηση του κώδικα προγράμματος ή των δεδομένων με... ...

    Δείτε τι είναι ο "Κωδικός κατακερματισμού" σε άλλα λεξικά:Επίσημη ορολογία

    - το αποτέλεσμα ενός αριθμητικού συνδυασμού με όλα τα byte του κώδικα προγράμματος ή του συνόλου δεδομένων. Το αποτέλεσμα του αλγορίθμου κατακερματισμού περιλαμβάνει μόνο μερικά byte και ο αλγόριθμος είναι σχεδιασμένος με τέτοιο τρόπο ώστε οποιαδήποτε τροποποίηση του κώδικα προγράμματος ή των δεδομένων με... ...κωδικός ελέγχου ταυτότητας μηνύματος χρησιμοποιώντας μια συνάρτηση κατακερματισμού - (ITU T N.235.3, ITU T N.235.1).

    Θέματα: τηλεπικοινωνίες, βασικές έννοιες EN κωδικός ελέγχου ταυτότητας κατακερματισμένου μηνύματοςHMAC...

    Οδηγός Τεχνικού Μεταφραστή

    Στον προγραμματισμό, ένας πίνακας κατακερματισμού είναι μια δομή δεδομένων που υλοποιεί τη διεπαφή συσχετιστικού πίνακα, δηλαδή, σας επιτρέπει να αποθηκεύσετε ζεύγη (κλειδί, τιμή) και να εκτελέσετε τρεις λειτουργίες: τη λειτουργία προσθήκης νέου ζεύγους, τη λειτουργία αναζήτησης και τη λειτουργία διαγραφής ... Βικιπαίδεια

    Αυτό το άρθρο αφορά τον κώδικα. Για τη μέθοδο καταιγισμού ιδεών, δείτε την κάρτα CRC. Ο κυκλικός έλεγχος πλεονασμού (CRC) είναι ένας αλγόριθμος για τον υπολογισμό ενός αθροίσματος ελέγχου που έχει σχεδιαστεί για να ελέγχει την ακεραιότητα του... ... Wikipedia

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

    ΜΙ 2891-2004: Σύσταση. ΓΣΟΕΙ. Γενικές απαιτήσεις για λογισμικό οργάνων μέτρησης- Ορολογία MI 2891 2004: Σύσταση. ΓΣΟΕΙ. Γενικές απαιτήσεις για λογισμικό οργάνων μέτρησης: Πληροφορίες μετρήσεων δεδομένων που παρουσιάζονται σε μορφή κατάλληλη για μετάδοση, ερμηνεία ή επεξεργασία. Ορισμοί του όρου από... ... Λεξικό-βιβλίο αναφοράς όρων κανονιστικής και τεχνικής τεκμηρίωσης

Κατακερματισμός(μερικές φορές κατακερματισμός, κατακερματισμός στα αγγλικά) - μετατροπή ενός πίνακα δεδομένων εισόδου αυθαίρετου μήκους σε μια συμβολοσειρά εξόδου σταθερού μήκους. Τέτοιοι μετασχηματισμοί ονομάζονται επίσης συναρτήσεις κατακερματισμούή συναρτήσεις συνέλιξης, πίνακας εισόδου – πρωτότυπο, και τα αποτελέσματα μετασχηματισμού είναι hash, hash code, hash εικόνα, ψηφιακό δακτυλικό αποτύπωμαή σύνοψη μηνύματος(Αγγλική σύνοψη μηνυμάτων).

Λειτουργία κατακερματισμού– μια εύκολα υπολογίσιμη συνάρτηση που μετατρέπει ένα αρχικό μήνυμα αυθαίρετου μήκους (preimage) σε μήνυμα σταθερού μήκους (hash image), για το οποίο δεν υπάρχει αποτελεσματικός αλγόριθμος αναζήτησης σύγκρουσης.

Σύγκρουσηγια λειτουργία ηονομάζεται ζεύγος τιμών x, y, x ≠ y, τέτοιο που h(x) = h(y). Οτι. Η συνάρτηση κατακερματισμού πρέπει να έχει τις ακόλουθες ιδιότητες:

Για μια δεδομένη τιμή h(x)δεν μπορώ να βρω την τιμή του ορίσματος x. Τέτοιες συναρτήσεις κατακερματισμού ονομάζονται επίμονη όσον αφορά τη θεραπείαή επίμονος με την ισχυρή έννοια;

Για ένα δεδομένο επιχείρημα xδεν μπορώ να βρω άλλο επιχείρημα yτέτοια που h(x) = h(y). Τέτοιες συναρτήσεις κατακερματισμού ονομάζονται στιβαρή όσον αφορά τους υπολογισμούς σύγκρουσηςή επίμονος με αδύναμη έννοια.

Στην περίπτωση που η τιμή της συνάρτησης κατακερματισμού εξαρτάται όχι μόνο από την προεικόνα, αλλά και από το ιδιωτικό κλειδί, τότε αυτή η τιμή ονομάζεται Κωδικός ελέγχου ταυτότητας μηνύματος (MAC), Κωδικός ελέγχου ταυτότητας δεδομένων (DAC) ή απομίμηση εισαγωγής.

Στην πράξη, οι συναρτήσεις κατακερματισμού χρησιμοποιούνται για τους ακόλουθους σκοπούς:

Για να επιταχύνετε την αναζήτηση δεδομένων στη βάση δεδομένων.

Επιταχύνετε την ανάκτηση δεδομένων. Για παράδειγμα, όταν γράφονται πεδία κειμένου σε μια βάση δεδομένων, ο κατακερματισμός τους μπορεί να υπολογιστεί και τα δεδομένα μπορούν να τοποθετηθούν σε μια ενότητα που αντιστοιχεί σε αυτόν τον κατακερματισμό. Στη συνέχεια, κατά την αναζήτηση δεδομένων, θα πρέπει πρώτα να υπολογίσετε τον κωδικό κατακερματισμού του κειμένου και θα ξέρετε αμέσως σε ποια ενότητα πρέπει να τον αναζητήσετε, δηλ. Θα πρέπει να κάνετε αναζήτηση όχι σε ολόκληρη τη βάση δεδομένων, αλλά μόνο σε ένα τμήμα της (αυτό επιταχύνει πολύ την αναζήτηση).

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

Η διαδικασία υπολογισμού (τυπικό διάγραμμα αλγορίθμου) της συνάρτησης κατακερματισμού παρουσιάζεται στο παρακάτω σχήμα.

Εικ. 10.1. Διαδικασία για τον υπολογισμό μιας τιμής κατακερματισμού

1) Στο αρχικό μήνυμα Τπροστίθενται βοηθητικές πληροφορίες (για παράδειγμα, το μήκος της προεικόνας, βοηθητικά σύμβολα κ.λπ.) έτσι ώστε το μήκος της προεικόνας Χέγινε πολλαπλάσιο του Lbl, που ορίζεται από την προδιαγραφή συνάρτησης κατακερματισμού (στάνταρ).

2) Για την προετοιμασία της διαδικασίας κατακερματισμού, χρησιμοποιείται ένα μήνυμα συγχρονισμού y 0.

3) Πρωτότυπο Χδιασπάται σε nμπλοκ x i(i = 1 .. n) σταθερό μήκος Lbl, πάνω από το οποίο εκτελείται ο ίδιος τύπος διαδικασίας κατακερματισμού f(y i-1, x i), ανάλογα με το αποτέλεσμα κατακερματισμού του προηγούμενου μπλοκ y i-1.

4) Τρόπος κατακερματισμού h(T)αρχικό μήνυμα Τθα είναι το αποτέλεσμα της διαδικασίας κατακερματισμού y n, που λαμβάνεται μετά την επεξεργασία του τελευταίου μπλοκ x n.

10.2. MD5

MD5Το Message Digest 5 είναι ένας αλγόριθμος κατακερματισμού 128-bit που αναπτύχθηκε από τον καθηγητή Ronald L. Rivest του Τεχνολογικού Ινστιτούτου της Μασαχουσέτης (MIT) το 1991. Είναι μια βελτιωμένη έκδοση του MD4 με ασφάλεια.

Παρακάτω είναι ο αλγόριθμος υπολογισμού κατακερματισμού.

1. Εξισορρόπηση ροής.

Στο τέλος του αρχικού μηνύματος, μήκος μεγάλο, προσθέστε ένα bit και, στη συνέχεια, τον απαιτούμενο αριθμό μηδενικών δυαδικών ψηφίων, ώστε το νέο μέγεθος ΜΕΓΑΛΟ"ήταν συγκρίσιμο με το 448 modulo 512 (L' mod 512 = 448). Η προσθήκη μηδενικών bit εκτελείται ακόμη και αν το νέο μήκος, συμπεριλαμβανομένου του ενός bit, είναι ήδη συγκρίσιμο με 448.

2. Προσθήκη μήκους μηνύματος.

Μια αναπαράσταση 64-bit του μήκους δεδομένων (ο αριθμός των bit στο μήνυμα) προστίθεται στο τροποποιημένο μήνυμα. Εκείνοι. μήκος μηνύματος Τγίνεται πολλαπλάσιο του 512 (T mod 512 = 0). Εάν το μήκος του αρχικού μηνύματος υπερβαίνει τα 2 64 - 1, τότε προστίθενται μόνο τα χαμηλότερα 64 bit. Επιπλέον, για μια καθορισμένη αναπαράσταση μήκους 64 bit, πρώτα γράφονται τα 32 bit χαμηλής τάξης και ακολουθούν τα 32 bit υψηλής τάξης.

3. Αρχικοποίηση buffer.

Για τους υπολογισμούς, αρχικοποιούνται 4 μεταβλητές των 32 bit η καθεμία και ορίζονται αρχικές τιμές (δεκαεξαδική αναπαράσταση):

ΕΝΑ = 67 45 23 01;
σι= EF CD AB 89;
ντο= 98 BA DC FE;
ρε = 10 32 54 76.

Αυτές οι μεταβλητές θα αποθηκεύουν τα αποτελέσματα των ενδιάμεσων υπολογισμών. Αρχική κατάσταση ABCDονομάζεται διάνυσμα αρχικοποίησης.

4. Υπολογισμός κατακερματισμού σε βρόχο.

Το αρχικό μήνυμα χωρίζεται σε μπλοκ Τ, μήκους 512 bit. Για κάθε μπλοκ στον κύκλο, εκτελείται η διαδικασία που φαίνεται στο Σχ. 10.2. Το αποτέλεσμα της επεξεργασίας όλων των μπλοκ του αρχικού μηνύματος ως ένωση τιμών μεταβλητών 32 bit ABCDκαι θα είναι χασίς.

Εικ. 10.2. Βήμα κύριου βρόχου υπολογισμού κατακερματισμού

Σε κάθε γύρο πάνω από μεταβλητές ABCDκαι μπλοκ κειμένου πηγής Τσε έναν κύκλο (16 επαναλήψεις) γίνονται παρόμοιοι μετασχηματισμοί σύμφωνα με το παρακάτω σχήμα.

Εικ. 10.3. Επανάληψη ενός στρογγυλού βρόχου

συμβάσεις.

1) RF- η στρογγυλή συνάρτηση καθορίζεται σύμφωνα με τον παρακάτω πίνακα.

Πίνακας 10.1. RF στρογγυλές λειτουργίες

2) t j- j-ο τμήμα 32-bit του αρχικού μπλοκ μηνυμάτων Τμεγάλο endian?

3) k i- ακέραιο μέρος της σταθεράς που καθορίζεται από τον τύπο

k i = 2 32 * | sin(i + 16 * (r - 1)) |, (10.1)

όπου i είναι ο αριθμός επανάληψης βρόχου (i = 1..16);
r – στρογγυλός αριθμός (r = 1..4).

Το όρισμα της συνάρτησης αμαρτίας μετριέται σε ακτίνια.

4) ⊞ – modulo προσθήκης 2 32.

5) <<< s i– κυκλική μετατόπιση προς τα αριστερά κατά s i ψηφία.

Χρησιμοποιήθηκε τμήμα 32-bit του αρχικού μπλοκ μηνυμάτων t jκαι το ποσό της κυκλικής αριστερής μετατόπισης s iεξαρτώνται από τον αριθμό της επανάληψης και φαίνονται στον παρακάτω πίνακα.

Πίνακας 10.2. Ποσότητες που χρησιμοποιούνται στο βήμα κύκλου

Αριθμός επανάληψης1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Γύρος 1t jt 1t 2t 3t 4t 5t 6t 7t 8t 9t 10t 11t 12t 13t 14t 15t 16
s i7 12 17 22 7 12 17 22 7 12 17 22 7 12 17 22
Γύρος 2t jt 2t 7t 12t 1t 6t 11t 16t 5t 10t 15t 4t 9t 14t 3t 8t 13
s i5 9 14 20 5 9 14 20 5 9 14 20 5 9 14 20
Γύρος 3t jt 6t 9t 12t 15t 2t 5t 8t 11t 14t 1t 4t 7t 10t 13t 16t 3
s i4 11 16 23 4 11 16 23 4 11 16 23 4 11 16 23
Γύρος 4t jt 1t 8t 15t 6t 13t 4t 11t 2t 9t 16t 7t 14t 5t 12t 3t 10
s i6 10 15 21 6 10 15 21 6 10 15 21 6 10 15 21

Μετά από 4 γύρους, νέα (τροποποιημένη) τιμή για κάθε μεταβλητή ABCDπροσθέτει (⊞) στο αρχικό (την τιμή της μεταβλητής πριν από τον 1ο γύρο).

5. Αναδιάταξη byte σε μεταβλητές ABCD. Μετά την επεξεργασία όλων των μπλοκ του αρχικού μηνύματος, εκτελείται μια αντίστροφη εναλλαγή byte για κάθε μεταβλητή.

Αναζήτηση για συγκρούσεις.

Το 2004, οι Κινέζοι ερευνητές Wang Xiaoyun, Feng Dengguo, Lai Xuejia και Yu Hongbo ανακοίνωσαν ότι ανακάλυψαν μια ευπάθεια σε έναν αλγόριθμο που επέτρεπε στο IBM p690) να βρει συγκρούσεις.

10.3. Χρήση κρυπτογράφησης για λήψη εικόνας κατακερματισμού

Για τη δημιουργία μιας εικόνας κατακερματισμού ανθεκτικής σε σύγκρουση, μπορούν να χρησιμοποιηθούν ειδικές λειτουργίες που παρέχονται σε κρυπτογράφηση μπλοκ (για παράδειγμα, συνένωση μπλοκ κρυπτογράφησης y) ή στην ίδια τη συνάρτηση κατακερματισμού, ως στοιχείο, μπορεί να χρησιμοποιηθεί ένας από τους τρόπους κρυπτογράφησης μπλοκ ( για παράδειγμα, ένα στοιχείο κατακερματισμού -συναρτήσεις σύμφωνα με το GOST 34.11-94 1 είναι ένας τρόπος απλής αντικατάστασης του αλγορίθμου κρυπτογραφικής μετατροπής σύμφωνα με το 2).

Ας υπενθυμίσουμε ότι στην περίπτωση που η τιμή της συνάρτησης κατακερματισμού εξαρτάται όχι μόνο από το πρωτότυπο, αλλά και από το ιδιωτικό κλειδί, η εικόνα κατακερματισμού ονομάζεται κωδικός ελέγχου ταυτότητας μηνύματος (MAC), κωδικός ελέγχου ταυτότητας δεδομένων (DAC) ή απομίμηση εισαγωγής.

Ως παράδειγμα, θα δώσουμε τη λειτουργία (αλυσίδα μπλοκ κρυπτογράφησης).

Εικ. 10.4. Σχέδιο του αλγορίθμου DES σε λειτουργία αλυσιδωτής μπλοκ κρυπτογράφησης

Τελευταίο κρυπτογραφημένο μπλοκ Cnκαι υπάρχει μια κατακερματισμένη εικόνα του μηνύματος T = (T 1, T 2, ..., T n).

1 GOST 34.11-94 «Τεχνολογία πληροφοριών. Προστασία κρυπτογραφικών πληροφοριών. Λειτουργία κατακερματισμού."

2 GOST 28147-89 «Συστήματα επεξεργασίας πληροφοριών. Κρυπτογραφική προστασία. Αλγόριθμος κρυπτογραφικής μετατροπής».

Ερωτήσεις αυτοδιαγνωστικού ελέγχου

1. Ορίστε τις έννοιες: "", "", "".



Συνιστούμε να διαβάσετε

Κορυφή