Hashing ή αλλιώς συνάρτηση κατακερματισμού είναι η διαδικασία εισόδου οποιουδήποτε μεγέθους πληροφοριών σε συγκεκριμένου μεγέθους έξοδο χρησιμοποιώντας μία μαθηματική συνάρτηση. Αυτό σημαίνει ότι οποιαδήποτε πληροφορία όσο μεγάλη και αν είναι μπορεί να μετατραπεί σε μία σειρά από γράμματα και αριθμούς μέσω ενός αλγόριθμου, το μέγεθος αυτό μπορεί να είναι από 32 bit μέχρι 256 bit ή και περισσότερα ανάλογα με το λόγο χρήσης της συνάρτησης. Το μήνυμα που θα εισάγουμε λέγεται είσοδος (input), ο αλγόριθμος που χρησιμοποιούμε για να γίνει αυτό λέγεται hash function και η έξοδος λέγεται hash value.
Στο πλαίσιο των κρυπτονομισμάτων όπως για παράδειγμα bitcoin οι συναλλαγές λαμβάνονται ως είσοδος και τρέχουν μέσω ενός αλγόριθμου κατακερματισμού (SHA-256) το οποίο δίνει μία έξοδο σταθερού μήκους.
(Παραδειγμα )

Το Cryptonomismata.com (input) adf3b246b927e437580d8be1be51e22c5acef49cd2908181d0a31c80e700fb60 (hash value)

Το Cryptonomismata.com ειναι η καλυτερη σελιδα ενημερωσης για crypto στην Ελλαδα (input) e4e3988b9aee767b23b0b00de8dcbd056fa9306d82408f10678c61f38e5fcddd (hash value)

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

Μία κρυπτογραφική συνάρτηση κατακερματισμού πρέπει να έχει κάποια στοιχεία για να είναι χρήσιμη

  • Κάθε έξοδος ή hash value θα πρέπει να είναι μοναδικό, αυτό σημαίνει ότι θα ήταν αδύνατο να παράγουμε το ίδιο hash value βάζοντας διαφορετικές εισόδους (input), έτσι το ίδιο μήνυμα πάντα θα παράγει το ίδιο αποτέλεσμα (hash value).
  • Να είναι εύκολο να υπολογιστεί η έξοδος για οποιαδήποτε είσοδο.
  • Να μην είναι εφικτό να βρούμε την είσοδο από την έξοδο
  • Να μην γίνετε να αλλάξουμε την είσοδο χωρίς να αλλάξει η έξοδος
    Ακόμα κι αν κάνουμε μία μικρή αλλαγή στην είσοδο ή αλλαγές που θα αντικατοπτρίζονται στο hash θα είναι τεράστιες
    (Παράδειγμα)

Το Cryptonomismata.com ειναι η καλυτερη σελιδα ενημερωσης για crypto στην Ελλαδα (input) e4e3988b9aee767b23b0b00de8dcbd056fa9306d82408f10678c61f38e5fcddd (hash value)

Το Cryptonomismata.com ειναι η καλύτερη σελίδα ενημέρωσης για crypto στην Ελλάδα (input) bee287574fdf8d3ae783221c0f01063a8ed2e84b54c7851a6fdb11353f0db4d8 (hash value)
Εδώ παρόλο που μόλις αλλάξαμε μόνο τους τόνους στο μύνημα εισόδου βλέπουμε πως επηρεάζει ολη την hash έξοδο.

Το Blockchain είναι μία σειρά με Block (κύβους) που είναι συνδεδεμένα μεταξύ τους το ένα μετά το άλλο σαν μια τεράστια αλυσίδα που συνεχώς μεγαλώνει, κάθε ένα από αυτά τα Block περιέχει δεδομένα και έναν Hash δείκτη που δείχνει το προηγούμενο Block δημιουργώντας έτσι την αλυσίδα, ένας δείκτης Hash είναι παρόμοιος με έναν απλό δείκτη αλλά αντί μόνο να δείχνει το προηγούμενο Block περιέχει επίσης και όλα τα αρχεία του προηγουμένου Block σε hash μορφή, αυτό το μικρό στοιχείο είναι αυτό που κάνει την Blockchain τόσο απίστευτα αξιόπιστη και καινοτόμουσα. Στο Blockchain το Hash χρησιμοποιείται για να καθορίσει τη συγκεκριμένη κατάσταση του Blockchain και να εξασφαλίσει την αμεταβλητότητα του, κάθε συναλλαγή περιλαμβάνει κομμάτια από πληροφορίες όπως το χρηματικό ποσό που στάλθηκε, τη διεύθυνση που έγινε η αποστολή, τη χρονική στιγμή καθώς και όλες τις πληροφορίες που συμμετείχαν στο να δημιουργηθεί η φόρμουλα για να παράγουν το hash value που λέγεται transaction id, το transaction ID είναι ένα hash value που χρησιμοποιούμε για να επιβεβαιώσουμε ότι έγινε μία συναλλαγή.

Το πρώτο Block στο Blockchain γνωστό και ως Genesis Block περιέχει πληροφορίες που όταν συνδυάζονται παράγουν ένα μοναδικό hash value, όταν το δεύτερο Block δημιουργείτε το hash value του Genesis Block προστίθεται σε αυτό μαζί με όλες τις νέες συναλλαγές και ο συνδυασμός τους δημιουργεί το επόμενο hash value, έτσι η αλυσίδα συνεχίζετε δημιουργώντας συνεχώς καινούργια Block που περιέχουν όλες τις νέες πληροφορίες των συναλλαγών συν ένα hash το οποίο είναι ολόκληρο το προηγούμενο block.

Ας φανταστούμε για ένα λεπτό έναν hacker να επιτίθεται σε ένα Block με σκοπό να αλλάξει μονιμά τα δεδομένα της ιστορίας της αλυσίδας, λόγω της ιδιότητας των hash λειτουργιών μία μικρή αλλαγή στα δεδομένα θα αλλάξει το τελείως το hash value, αυτό σημαίνει ότι οι αλλαγές που έγιναν στο Block θα πρέπει να αλλάξουν το hash value που αποθηκεύεται και στο προηγούμενο Block που τώρα με τη σειρά πρέπει να αλλάξει και το προηγούμενο από αυτό Block μέχρι να φτάσει το Genesis Block όπου θα καταφέρει να έχει αλλάξει τελείως όλη την αλυσίδα, κάτι που είναι πρακτικά αδύνατο και αυτός ακριβώς είναι και ο τρόπος με τον οποίο το Blockchain πετυχαίνει το αμετάβλητο.

Παραδείγματα κρυπτογραφικόυ hash function
SHA 256: Παράγει 256-bit hash. Aυτό χρησιμοποιείται αυτή τη στιγμή για το Bitcoin.
Keccak-256: Παράγει 256-bit hash kai χρησιμοποιείται αυτή τη στιγμή για το Ethereum.

Τι είναι το hash rate

Η ταχύτητα του hash είναι επίσης σημαντικός παράγοντας, το hash function πρέπει να είναι γρήγορο στο να παράγει hash value.

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