Hash – Το παζλ του Bitcoin


Στην προηγούμενη θέση έχουμε εξηγήσει τις ιδέες πίσω από το σύστημα Bitcoin, ωστόσο, ένα ζήτημα παρέμεινε ανεξήγητο: Τι είναι αυτό το αιματηρό σκληρό παζλ που οι ανθρακωρύχοι Bitcoin προσπαθούν συνεχώς να λύσουν?

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

  • Τι ακριβώς είναι αυτό το παζλ?
  • Πώς ενσωματώνεται στο σύστημα Bitcoin?

Το παζλ - Ένα κρυπτογραφικό παζλ Hash

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

Ίσως η καλύτερη αναλογία πραγματικού κόσμου με ένα παζλ κατακερματισμού είναι ένα αποτύπωμα.

Δακτυλικών αποτυπωμάτων σε μπλε φόντο

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

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

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

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

crypto

(Πηγή εικόνας: https://blog.varonis.com/the-definitive-guide-to-cryptographic-hash-functions-part-1/)

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

Μια μικρή τεχνική: Οι χαρακτήρες που χρησιμοποιούνται από το μηχάνημα (τόσο η είσοδος όσο και η έξοδος) συντίθενται μόνο από τα δέκα ψηφία 0-9 και τα έξι γράμματα a-f. Αυτό σημαίνει ότι κάθε χαρακτήρας εισόδου ή εξόδου μπορεί να είναι ένας από τους 16 χαρακτήρες.

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

Ξεκινώντας με μια απλή υπόθεση, υποθέστε ότι το μηχάνημα παράγει εξόδους ενός μόνο χαρακτήρα. Αυτό σημαίνει ότι υπάρχουν μόνο 16 διαφορετικές πιθανές εξόδους. Για παράδειγμα, υποθέστε ότι έχετε τον χαρακτήρα «d» (όπως το παζλ) και το μηχάνημα λειτουργεί με τέτοιο τρόπο ώστε κάθε χαρακτήρας που εισάγεται να οδηγεί σε διαφορετικό χαρακτήρα εξόδου. Έτσι, εάν δοκιμάσετε όλους τους πιθανούς χαρακτήρες 0-9 και a-f θα βρείτε τον αγώνα, δηλ. Τον χαρακτήρα που όταν εισάγεται στο μηχάνημα παράγεται ο χαρακτήρας «d» ως έξοδος. Συγκεκριμένα απαιτούνται τουλάχιστον 16 συγκρίσεις για να είναι απολύτως σίγουρος ότι θα βρεθεί ένας αγώνας.

Συμπληρώντας αυτό το λίγο περισσότερο, σκεφτείτε την περίπτωση κατά την οποία το μηχάνημα παράγει μια έξοδο 2 χαρακτήρων αντί για μία μόνο, όπως στο προηγούμενο παράδειγμα. Αυτό σημαίνει ότι υπάρχουν 16Χ16 = 256 διαφορετικές πιθανές εξόδους. Έτσι, όταν δώσετε κάποιο παζλ, για παράδειγμα, θα πρέπει να δοκιμάσετε όλες τις δυνατές εισροές 2 χαρακτήρων (π.χ. '00', '01' ... 'fd', 'fe', 'ff' μια ΕΠΙΤΥΧΙΑ.

Σημειώστε ότι η αύξηση του μήκους εξόδου του μηχανήματος από ένα μόνο χαρακτήρα αυξάνει τον αριθμό των δοκιμών που πρέπει να κάνετε κατά μία τάξη μεγέθους (στο παράδειγμα μας με συντελεστή 16!). Έτσι, μια έξοδος ενός μόνο χαρακτήρα οδηγεί σε 16 δοκιμές, μια έξοδος 2 χαρακτήρων οδηγεί σε 256 δοκιμές, μια έξοδος 3 χαρακτήρων οδηγεί σε 4096 δοκιμές και ούτω καθεξής.

Έτσι, «ποια είναι η μεγάλη υπόθεση;» θα μπορούσε κάποιος να ρωτήσει. Οι υπολογιστές είναι τόσο γρήγοροι αυτές τις μέρες, μπορείτε να δημιουργήσετε ένα λογισμικό που θα υπολογίζει όλες τις δοκιμές για σας μέσα σε λίγα δευτερόλεπτα!

Λοιπόν, ίσως έχετε παρατηρήσει ότι ο αριθμός των δοκιμών αυξάνεται σε μια εκθετικός τρόπος! Αυτό σημαίνει ότι για μια έξοδο x χαρακτήρων θα πρέπει να κάνετε x16trials! Για μια έξοδο 40 χαρακτήρων θα χρειαστεί να κάνετε δοκιμές 1461501637330902918203684832716283019655932542976 !! Αυτός ο αριθμός είναι τόσο τεράστιος που ο σύγχρονος υπολογιστής δεν μπορεί να κάνει αυτόν τον αριθμό δοκιμών ακόμα και αν λειτουργεί συνεχώς μέχρι την κατάρρευση του ηλιακού συστήματος.

Εάν δεν είστε ακόμα πεπεισμένοι ότι το παζλ κατακερματισμού είναι δύσκολο, ίσως θελήσετε να το δοκιμάσετε και να βρείτε τη λύση για το ακόλουθο παζλ: Βρείτε μια λίστα χαρακτήρων που όταν το βάλετε μέσα από τη μηχανή SHA1 θα πάρετε μια έξοδο όλων μηδενικούς χαρακτήρες (δηλαδή «000000 ...»). Το μηχάνημα διατίθεται στο sha1-online.com. Καλή τύχη ��

Η σύνδεση στο Bitcoin

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

Εν συντομία, ένα μπλοκ στην αλυσίδα μπλοκ είναι κάποια δομή δεδομένων που περιέχει:

  1. Ένα nonce, αυτός είναι ο πυρήνας της λύσης, το τμήμα του μπλοκ που δίνει στον μεταλλωτή το τέλος συναλλαγής.
  2. Μια αναφορά στο προηγούμενο μπλοκ - αυτό είναι απαραίτητο για να μπορείτε να παρακολουθείτε το ιστορικό όλων των συναλλαγών, κάθε μπλοκ αναφέρεται στον προκάτοχό του, έτσι μπορείτε να επιστρέψετε στην ιστορία μέχρι το πρώτο μπλοκ (Μπορείτε να παρακολουθήσετε το ιστορικό συναλλαγών στο blockchain .info)
  3. Μια λίστα με όλες τις συναλλαγές που θα υποβληθούν σε επεξεργασία αν αυτό το μπλοκ είναι προσαρτημένο στην αλυσίδα μπλοκ.

Στο παρακάτω σχήμα μπορείτε να δείτε αυτές τις 3 ιδιότητες: το nonce (στην τελευταία κιτρινισμένη σειρά), την αναφορά ('previous hash block') και τη λίστα των συναλλαγών σε γκρι γραμμές (η δεξιά δεξιά πλευρά του σχεδίου εξηγείται σύντομα).

block-diagram-ghash

(πηγή εικόνας: http://www.righto.com/2014/09/mining-bitcoin-with-pencil-and-paper.html)

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

Στο σύστημα bitcoin, όμως, το παζλ κατακερματισμού είναι κάπως ευκολότερο: Αντί να κυνηγάει μετά από μια συγκεκριμένη έξοδο, ο ανθρακωρύχος πρέπει να βρει μια είσοδο που παράγει μια έξοδο από ένα μεγάλο σύνολο επιτρεπόμενων εξόδων. Δηλαδή, ένα παζλ θα μπορούσε να είναι ένας κατάλογος χαρακτήρων έτσι ώστε οι 16 πρώτοι χαρακτήρες του να είναι «0» ενώ δεν υπάρχει περιορισμός στους υπόλοιπους χαρακτήρες, θα μπορούσαν να είναι οτιδήποτε. Παρόλο που αυτό κάνει το παζλ πολύ πιο εύκολο, είναι ένα πρόβλημα που καταναλώνει χρόνο και ενέργεια για να λυθεί. Στο παραπάνω σχήμα, ο ανθρακωρύχος εκτελεί πολλές δοκιμές για να λύσει το παζλ, το μόνο πεδίο που επιτρέπεται να αλλάξει σε κάθε δοκιμή είναι το nonce. Σε κάθε δοκιμή, ο ανθρακωρύχος συνδυάζει το nonce που μόλις επέλεξε, τον κατάλογο συναλλαγών που επιθυμούσε να προσθέσει στην αλυσίδα μπλοκ και την αναφορά στο προηγούμενο μπλοκ όλοι μαζί, τότε το εισήγαγε στη μηχανή SHA1. Αν η έξοδος της μηχανής SHA1 ξεκινά με χαρακτήρες 16 '0' τότε λύνεται το παζλ και κερδίζει το παιχνίδι.

Ελπίζω ότι σας άρεσε η ανάγνωση, θα σας δούμε στην επόμενη θέση!

Brayan Jackson
Brayan Jackson Administrator
Sorry! The Author has not filled his profile.
follow me