Τι είναι το Hashing;
Πίνακας περιεχομένων
Πώς λειτουργεί μια συνάρτηση hash;
Γιατί είναι σημαντικές;
Κρυπτογραφικές συναρτήσεις hash
Εξόρυξη
Συμπεράσματα
Τι είναι το Hashing;
Αρχική σελίδα
Άρθρα
Τι είναι το Hashing;

Τι είναι το Hashing;

Έχει δημοσιευτεί Jul 29, 2019Έχει ενημερωθεί Nov 18, 2022
7m

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

Αν και δεν περιλαμβάνουν όλες οι συναρτήσεις hash τη χρήση κρυπτογραφίας, οι λεγόμενες κρυπτογραφικές συναρτήσεις hash βρίσκονται στον πυρήνα των κρυπτονομισμάτων. Χάρη σε αυτές, τα blockchain και άλλα κατανεμημένα συστήματα είναι σε θέση να επιτύχουν σημαντικά επίπεδα ακεραιότητας και ασφάλειας δεδομένων.

Τόσο οι συμβατικές όσο και οι κρυπτογραφικές συναρτήσεις hash είναι καθορισμένες. Αυτό σημαίνει ότι όσο η εισροή δεν αλλάζει, ο αλγόριθμος hashing θα παράγει πάντα την ίδια εκροή (γνωστή και ως digest ή hash).

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


Πώς λειτουργεί μια συνάρτηση hash;

Διαφορετικές συναρτήσεις hash θα παράγουν εκροές διαφορετικών μεγεθών, αλλά τα πιθανά μεγέθη εκροής για κάθε αλγόριθμο hashing είναι πάντα σταθερά. Για παράδειγμα, ο αλγόριθμος SHA-256 μπορεί να παράγει μόνο εκροές 256 bit, ενώ ο SHA-1 θα παράγει πάντα ένα digest 160 bit.

Για παράδειγμα, ας εκτελέσουμε τις λέξεις "Binance" και "binance" μέσω του αλγόριθμου hashing SHA-256 (αυτού που χρησιμοποιείται στο Bitcoin).

SHA-256

Εισροή

Εκροή (256 bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Σημειώστε ότι μια μικρή αλλαγή (η κεφαλαιοποίηση του πρώτου γράμματος) είχε ως αποτέλεσμα μια εντελώς διαφορετική τιμή hash. Επειδή, όμως, χρησιμοποιούμε το SHA-256, οι εκροές θα έχουν πάντα σταθερό μέγεθος 256-bit (ή 64 χαρακτήρων) - ανεξάρτητα από το μέγεθος εισροής. Επίσης, δεν έχει σημασία πόσες φορές θα τρέξουμε τις δύο λέξεις στον αλγόριθμο· οι δύο εκροές θα παραμείνουν σταθερές.

Αντίθετα, εάν εκτελέσουμε τις ίδιες εισροές μέσω του αλγόριθμου hashing SHA-1, θα έχουμε τα ακόλουθα αποτελέσματα:

SHA-1

Εισροή

Εκροή (160 bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Μάλιστα, το ακρωνύμιο SHA σημαίνει "ασφαλείς αλγόριθμοι hash". Αναφέρεται σε ένα σύνολο κρυπτογραφικών συναρτήσεων hash που περιλαμβάνουν τους αλγόριθμους SHA-0 και SHA-1 μαζί με τις ομάδες SHA-2 και SHA-3. Το SHA-256 είναι μέρος της ομάδας SHA-2, μαζί με το SHA-512 και άλλες παραλλαγές. Επί του παρόντος, μόνο οι ομάδες SHA-2 και SHA-3 θεωρούνται ασφαλείς.


Γιατί είναι σημαντικές;

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

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

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


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

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

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

Πριν συζητήσουμε κάθε ιδιότητα, ας συνοψίσουμε τη λογική τους σε τρεις σύντομες προτάσεις.

  • Αντίσταση σε συγκρούσεις: δεν είναι εφικτό να βρεθούν δύο διαφορετικές εισροές που παράγουν το ίδιο hash με την εκροή.

  • Αντίσταση προεικόνας: δεν είναι εφικτό να "αντιστραφεί" η συνάρτηση hash (εύρεση της εισροής από μια δεδομένη εκροή).

  • Αντίσταση δεύτερης προεικόνας: δεν είναι εφικτό να βρεθεί δεύτερη εισροή που συγκρούεται με μια καθορισμένη εισροή.


Αντοχή σε συγκρούσεις

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

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

Μεταξύ των διαφόρων αλγορίθμων SHA, οι ομάδες SHA-0 και SHA-1 δεν είναι πλέον ασφαλείς, επειδή έχουν βρεθεί συγκρούσεις. Επί του παρόντος, οι ομάδες SHA-2 και SHA-3 θεωρούνται ανθεκτικές σε συγκρούσεις.


Αντίσταση προεικόνας

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

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

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


Αντίσταση δεύτερης προεικόνας

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

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

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


Εξόρυξη

Υπάρχουν πολλά βήματα στην εξόρυξη Bitcoin που περιλαμβάνει συναρτήσεις hash, όπως ο έλεγχος υπολοίπων, η σύνδεση εισροών και εκροών συναλλαγών και το hashing συναλλαγών μέσα σε ένα block για να σχηματιστεί ένα Merkle tree. Αλλά ένας από τους κύριους λόγους για τους οποίους το blockchain του Bitcoin είναι ασφαλές είναι το γεγονός ότι οι εξορύκτες πρέπει να εκτελέσουν μυριάδες λειτουργίες hashing προκειμένου να βρουν τελικά μια έγκυρη λύση για το επόμενο block.

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

Σε αυτήν την περίπτωση, το hash rate αντιπροσωπεύει πόση υπολογιστική ισχύς επενδύεται στην εξόρυξη Bitcoin. Εάν το hash rate του δικτύου αυξηθεί, το πρωτόκολλο Bitcoin θα προσαρμόσει αυτόματα τη δυσκολία εξόρυξης, έτσι ώστε ο μέσος χρόνος που απαιτείται για την εξόρυξη ενός block να παραμένει κοντά στα 10 λεπτά. Αντίθετα, εάν αρκετοί εξορύκτες αποφασίσουν να σταματήσουν την εξόρυξη, προκαλώντας σημαντική πτώση του hash rate, η δυσκολία εξόρυξης θα προσαρμοστεί, καθιστώντας ευκολότερη την εξόρυξη (μέχρι ο μέσος χρόνος block να επανέλθει στα 10 λεπτά).

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

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


Συμπεράσματα

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