Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς

Συνεχίζουμε τη σειρά μας σχετικά με την αλυσίδα μπλοκ Monero και το σημερινό άρθρο θα επικεντρωθεί στο πρωτόκολλο RingCT (Ring Confidential Transactions), το οποίο εισάγει εμπιστευτικές συναλλαγές και νέες υπογραφές δακτυλίου. Δυστυχώς, υπάρχουν λίγες πληροφορίες στο Διαδίκτυο για το πώς λειτουργεί και προσπαθήσαμε να καλύψουμε αυτό το κενό.

Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς

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

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

Πρωτόκολλο RingCT

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

Αξίζει να σημειωθεί ότι η ιδέα της απόκρυψης ποσών δεν είναι νέα. Ο προγραμματιστής του Bitcoin Core Greg Maxwell ήταν ένας από τους πρώτους που το περιέγραψε στα δικά του άρθρο Εμπιστευτικές Συναλλαγές. Η τρέχουσα εφαρμογή του RingCT είναι η τροποποίησή του με τη δυνατότητα χρήσης ring signatures (είτε χωρίς αυτές), και έτσι πήρε το όνομά του - Ring Confidential Transactions.

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

Τον Ιανουάριο του 2017, πραγματοποιήθηκε ένα hard fork του δικτύου Monero, επιτρέποντας την προαιρετική χρήση εμπιστευτικών συναλλαγών. Και ήδη τον Σεπτέμβριο του ίδιου έτους, με την έκδοση 6 hard fork, τέτοιες συναλλαγές έγιναν οι μόνες επιτρεπόμενες στο δίκτυο.

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

Το πρωτόκολλο RingCT εισάγει δύο τύπους ανώνυμων συναλλαγών: απλές και πλήρεις. Το πορτοφόλι δημιουργεί το πρώτο όταν μια συναλλαγή χρησιμοποιεί περισσότερες από μία εισόδους, το δεύτερο - στην αντίθετη κατάσταση. Διαφέρουν ως προς την επικύρωση των ποσών των συναλλαγών και τα δεδομένα που υπογράφονται με υπογραφή MLSAG (θα μιλήσουμε περισσότερα για αυτό παρακάτω). Επιπλέον, συναλλαγές τύπου πλήρους μπορούν να δημιουργηθούν με οποιοδήποτε αριθμό εισόδων, δεν υπάρχει θεμελιώδης διαφορά. Στο βιβλίο "Μηδέν στο Μονερό" Από αυτή την άποψη, λέγεται ότι η απόφαση να περιοριστούν οι πλήρεις συναλλαγές σε μία είσοδο ελήφθη βιαστικά και μπορεί να αλλάξει στο μέλλον.

Υπογραφή MLSAG

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

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

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

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

Ας δούμε πώς σχηματίζεται μια υπογραφή δακτυλίου, χρησιμοποιώντας το παράδειγμα μιας συναλλαγής που ξοδεύει 2 πραγματικές εξόδους και χρησιμοποιεί m - 1 τυχαίες από το blockchain για μίξη. Ας υποδηλώσουμε τα δημόσια κλειδιά των εξόδων που ξοδεύουμε ως
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς, και αναλόγως βασικές εικόνες για αυτούς: Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς Έτσι, παίρνουμε μια μήτρα μεγέθους 2 x m. Αρχικά, πρέπει να υπολογίσουμε τις λεγόμενες προκλήσεις για κάθε ζεύγος εξόδων:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Ξεκινάμε τους υπολογισμούς με τις εξόδους, τις οποίες ξοδεύουμε χρησιμοποιώντας τα δημόσια κλειδιά τους:Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςκαι τυχαίους αριθμούςΕμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςΩς αποτέλεσμα, παίρνουμε τις ακόλουθες τιμές:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς, το οποίο χρησιμοποιούμε για να υπολογίσουμε την πρόκληση
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςτο επόμενο ζεύγος εξόδων (για να καταλάβουμε πιο εύκολα τι αντικαθιστούμε, έχουμε επισημάνει αυτές τις τιμές σε διαφορετικά χρώματα). Όλες οι ακόλουθες τιμές υπολογίζονται σε κύκλο χρησιμοποιώντας τους τύπους που δίνονται στην πρώτη εικόνα. Το τελευταίο πράγμα που πρέπει να υπολογιστεί είναι η πρόκληση για ένα ζεύγος πραγματικών εξόδων.

Όπως μπορούμε να δούμε, όλες οι στήλες εκτός από αυτή που περιέχει πραγματικές εξόδους χρησιμοποιούν αριθμούς που δημιουργούνται τυχαίαΕμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς. Για π- στήλη θα τα χρειαστούμε επίσης. Ας μεταμορφωθούμεΕμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςσε s:Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Η ίδια η υπογραφή είναι μια πλειάδα όλων αυτών των τιμών:

Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς

Αυτά τα δεδομένα στη συνέχεια εγγράφονται σε μια συναλλαγή.

Όπως μπορούμε να δούμε, το MLSAG περιέχει μόνο μία πρόκληση c0, το οποίο σας επιτρέπει να εξοικονομήσετε μέγεθος υπογραφής (το οποίο απαιτεί ήδη πολύ χώρο). Περαιτέρω, οποιοσδήποτε επιθεωρητής, χρησιμοποιώντας τα δεδομέναΕμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς, επαναφέρει τις τιμές c1,…, cm και το ελέγχειΕμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς. Έτσι, το δαχτυλίδι μας έχει κλείσει και η υπογραφή έχει επαληθευτεί.

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

Δεσμεύσεις Pedersen

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

Οι δεσμεύσεις Monero χρησιμοποιούνται για την απόκρυψη των ποσών των μεταφορών και τη χρήση της πιο κοινής επιλογής - δεσμεύσεων Pedersen. Παρεμπιπτόντως, ένα ενδιαφέρον γεγονός - στην αρχή οι προγραμματιστές πρότειναν την απόκρυψη των ποσών με συνηθισμένη ανάμειξη, δηλαδή την προσθήκη εκροών για αυθαίρετα ποσά προκειμένου να εισαχθεί αβεβαιότητα, αλλά στη συνέχεια μεταπήδησαν σε δεσμεύσεις (δεν είναι γεγονός ότι εξοικονομούσαν το μέγεθος της συναλλαγής, όπως θα δούμε παρακάτω).
Γενικά, η δέσμευση μοιάζει με αυτό:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςΠού C — η ίδια η έννοια της δέσμευσης, a - κρυφό ποσό, H είναι ένα σταθερό σημείο στην ελλειπτική καμπύλη (πρόσθετη γεννήτρια), και x — κάποιο είδος αυθαίρετης μάσκας, ένας παράγοντας απόκρυψης που δημιουργείται τυχαία. Η μάσκα χρειάζεται εδώ, ώστε ένα τρίτο μέρος να μην μπορεί απλώς να μαντέψει την αξία της δέσμευσης.

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

RingCT απλό

Στην περίπτωση απλών συναλλαγών RingCT, προκειμένου να διασφαλιστεί ότι η συναλλαγή δημιούργησε εκροές σε ποσότητα ίση με το ποσό των εισροών (δεν παρήγαγε χρήματα από τον αέρα), είναι απαραίτητο το άθροισμα των δεσμεύσεων του πρώτου και του δεύτερου να είναι τα ίδια, δηλαδή:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Οι επιτροπές δέσμευσης το θεωρούν λίγο διαφορετικά - χωρίς μάσκα:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςΌπου a — το ποσό της προμήθειας, είναι διαθέσιμο στο κοινό.

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

Για να ξεκαθαρίσουμε τα πράγματα, ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι μια συναλλαγή ξοδεύει δύο εξόδους (που σημαίνει ότι γίνονται είσοδοι) των 10 και 5 XMR και παράγει τρεις εξόδους αξίας 12 XMR: 3, 4 και 5 XMR. Ταυτόχρονα πληρώνει προμήθεια 3 XMR. Έτσι, το ποσό των χρημάτων που δαπανήθηκε συν το ποσό που δημιουργήθηκε και η προμήθεια είναι ίσο με 15 XMR. Ας προσπαθήσουμε να υπολογίσουμε τις δεσμεύσεις και να δούμε τη διαφορά στα ποσά τους (θυμηθείτε τα μαθηματικά):

Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Εδώ βλέπουμε ότι για να συγκλίνει η εξίσωση, χρειαζόμαστε τα αθροίσματα των μάσκας εισόδου και εξόδου να είναι ίδια. Για να γίνει αυτό, το πορτοφόλι δημιουργείται τυχαία x1, y1, y2 και y3, και τα υπόλοιπα x2 υπολογίζει ως εξής:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Χρησιμοποιώντας αυτές τις μάσκες, μπορούμε να αποδείξουμε σε οποιονδήποτε επαληθευτή ότι δεν παράγουμε περισσότερα χρήματα από όσα ξοδεύουμε, χωρίς να αποκαλύψουμε το ποσό. Πρωτότυπο, σωστά;

Το RingCT είναι γεμάτο

Στις πλήρεις συναλλαγές RingCT, ο έλεγχος των ποσών μεταφοράς είναι λίγο πιο περίπλοκος. Σε αυτές τις συναλλαγές, το πορτοφόλι δεν υπολογίζει εκ νέου τις δεσμεύσεις για εισροές, αλλά χρησιμοποιεί αυτές που υπολογίστηκαν όταν δημιουργήθηκαν. Σε αυτήν την περίπτωση, πρέπει να υποθέσουμε ότι δεν θα λαμβάνουμε πλέον τη διαφορά στα αθροίσματα ίση με το μηδέν, αλλά αντ' αυτού:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Εδώ z — διαφορά μεταξύ μάσκας εισόδου και εξόδου. Αν αναλογιστούμε zG ως δημόσιο κλειδί (που de facto είναι), λοιπόν z είναι το ιδιωτικό κλειδί. Έτσι, γνωρίζουμε το δημόσιο και το αντίστοιχο ιδιωτικό κλειδί. Με αυτά τα δεδομένα στα χέρια, μπορούμε να τα χρησιμοποιήσουμε στην υπογραφή κλήσης MLSAG μαζί με τα δημόσια κλειδιά των εξόδων που αναμιγνύονται:
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Έτσι, μια έγκυρη υπογραφή κλήσης θα διασφαλίσει ότι γνωρίζουμε όλα τα ιδιωτικά κλειδιά μιας από τις στήλες και μπορούμε να γνωρίζουμε μόνο το ιδιωτικό κλειδί στην τελευταία σειρά εάν η συναλλαγή δεν παράγει περισσότερα χρήματα από όσα ξοδεύει. Παρεμπιπτόντως, εδώ είναι η απάντηση στο ερώτημα "γιατί η διαφορά στα ποσά των δεσμεύσεων δεν οδηγεί στο μηδέν" - εάν zG = 0, τότε θα επεκτείνουμε τη στήλη με πραγματικές εξόδους.

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

Αποδείξεις εύρους

Τι συμβαίνει εάν χρησιμοποιείτε αρνητικό αριθμό ως ποσό στις δεσμεύσεις; Αυτό μπορεί να οδηγήσει στη δημιουργία πρόσθετων νομισμάτων! Αυτό το αποτέλεσμα είναι απαράδεκτο, επομένως πρέπει να εγγυηθούμε ότι τα ποσά που χρησιμοποιούμε δεν είναι αρνητικά (χωρίς να αποκαλύπτουμε αυτά τα ποσά, φυσικά, διαφορετικά υπάρχει τόση δουλειά και όλα μάταια). Με άλλα λόγια, πρέπει να αποδείξουμε ότι το άθροισμα βρίσκεται στο διάστημα [0, 2n - 1].

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

Ας υποθέσουμε ότι τα ποσά μας είναι μικρά και χωρούν σε 4 bit (στην πράξη είναι 64 bit) και δημιουργούμε μια έξοδο αξίας 5 XMR. Υπολογίζουμε τις δεσμεύσεις για κάθε κατηγορία και τη συνολική δέσμευση για ολόκληρο το ποσό:Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούς
Στη συνέχεια, κάθε δέσμευση αναμιγνύεται με ένα υποκατάστατο (Ci-2iH) και είναι υπογεγραμμένο σε ζευγάρια με την υπογραφή δαχτυλίδι Borromeo (άλλη υπογραφή δακτυλίου), που προτάθηκε από τον Greg Maxwell το 2015 (μπορείτε να διαβάσετε περισσότερα σχετικά εδώ):
Εμπιστευτικές συναλλαγές στο Monero ή πώς να μεταφέρετε άγνωστα πράγματα σε άγνωστους προορισμούςΣυνολικά, αυτό ονομάζεται απόδειξη εύρους και σας επιτρέπει να διασφαλίσετε ότι οι δεσμεύσεις χρησιμοποιούν ποσά εντός του εύρους [0, 2n - 1].

Ποιο είναι το επόμενο;

Στην τρέχουσα εφαρμογή, οι δοκιμές εύρους καταλαμβάνουν πολύ χώρο - 6176 byte ανά έξοδο. Αυτό οδηγεί σε μεγαλύτερες συναλλαγές και συνεπώς υψηλότερες χρεώσεις. Για να μειώσουν το μέγεθος μιας συναλλαγής Monero, οι προγραμματιστές εισάγουν αλεξίσφαιρα αντί για υπογραφές Borromeo - έναν μηχανισμό προστασίας εμβέλειας χωρίς δεσμεύσεις bitwise. Σύμφωνα με κάποιες εκτιμήσεις, είναι σε θέση να μειώσουν το μέγεθος της απόδειξης εμβέλειας έως και 94%. Παρεμπιπτόντως, στα μέσα Ιουλίου η τεχνολογία πέρασε έλεγχος από την Kudelski Security, η οποία δεν αποκάλυψε σημαντικές ελλείψεις ούτε στην ίδια την τεχνολογία ούτε στην εφαρμογή της. Η τεχνολογία χρησιμοποιείται ήδη στο δοκιμαστικό δίκτυο και με το νέο σκληρό πιρούνι, πιθανότατα μπορεί να μετακινηθεί στο κύριο δίκτυο.

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο