Bulletproofs: πώς επαληθεύονται τα κρυφά ποσά

· Ανάγνωση: 6 λεπ.

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

Τι είναι τα Bulletproofs;

Σύντομη απάντηση

Τα Bulletproofs είναι σύντομες αποδείξεις μηδενικής γνώσης που δημοσίευσαν οι Bünz, Bootle, Boneh, Poelstra, Wuille και Maxwell το 2018. Στα κρυπτονομίσματα αποδεικνύουν ότι ένα κρυφό ποσό βρίσκεται σε έγκυρο εύρος, όπως από 0 έως 2^64, χωρίς να το αποκαλύπτουν. Δεν χρειάζονται έμπιστη αρχική ρύθμιση και το μέγεθός τους αυξάνεται μόνο με τον λογάριθμο του εύρους.

Η εργασία Bulletproofs: Short Proofs for Confidential Transactions and More παρουσιάστηκε στο IEEE Symposium on Security and Privacy το 2018. Οι συγγραφείς τα σχεδίασαν για εμπιστευτικές συναλλαγές, όπου τα ποσά στην αλυσίδα αντικαθίστανται από δεσμεύσεις. Για να δείτε γιατί χρειάζεται μια τέτοια απόδειξη, ξεκινήστε από τη δέσμευση.

Τι είναι μια δέσμευση Pedersen;

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

Μια δέσμευση Pedersen, που περιέγραψε ο Torben Pedersen το 1991, το πετυχαίνει με σημεία ελλειπτικής καμπύλης. Για να δεσμευτεί σε ποσό v, ένα πορτοφόλι επιλέγει τυχαίο μυστικό r, που λέγεται blinding factor (τυχαίος παράγοντας απόκρυψης), και υπολογίζει:

C = v·G + r·H

Τα G και H είναι δύο σταθερά δημόσια σημεία της καμπύλης, επιλεγμένα έτσι ώστε κανείς να μην ξέρει πώς να εκφράσει το ένα ως πολλαπλάσιο του άλλου. Το αποτέλεσμα C είναι ένα σημείο 32 byte. Έχει δύο ιδιότητες:

Πώς ελέγχουν οι κόμβοι μια συναλλαγή που δεν μπορούν να διαβάσουν;

Σύντομη απάντηση

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

Η πρόσθεση δύο δεσμεύσεων δίνει (v1 + v2)·G + (r1 + r2)·H, που είναι δέσμευση για το v1 + v2. Ο αποστολέας ρυθμίζει τους blinding factors ώστε το συνολικό άθροισμά τους στις εισόδους να ισούται με εκείνο στις εξόδους. Αν ισοσκελίζονται και τα ποσά, η διαφορά ανάμεσα στο άθροισμα των εισόδων και των εξόδων είναι ακριβώς μηδέν και κάθε κόμβος μπορεί να το επαληθεύσει.

Η προμήθεια δικτύου είναι ο μόνος δημόσιος αριθμός σε μια συναλλαγή. Οι κόμβοι τη μετατρέπουν σε δέσμευση με μηδενικό blinding factor και την προσθέτουν στην πλευρά των εξόδων, οπότε ο έλεγχος είναι: είσοδοι = έξοδοι + προμήθεια.

Γιατί τα κρυφά ποσά χρειάζονται αποδείξεις εύρους;

Οι πράξεις των δεσμεύσεων γίνονται modulo έναν πολύ μεγάλο αριθμό, την τάξη της ομάδας της καμπύλης, που είναι περίπου 2^252. Σε αυτή την αριθμητική ένα «αρνητικό» ποσό είναι απλώς ένα τεράστιο θετικό. Κάποιος θα μπορούσε να ξοδέψει είσοδο αξίας 10 νομισμάτων και να δημιουργήσει δύο εξόδους, μία αξίας 11 και μία αξίας «μείον 1». Οι δεσμεύσεις θα ισοσκελίζονταν τέλεια και 1 νόμισμα θα εμφανιζόταν από το τίποτα, κρυφό από κάθε παρατηρητή.

Η απόδειξη εύρους κλείνει αυτό το κενό. Αποδεικνύει ότι το ποσό μέσα σε μια δέσμευση βρίσκεται μεταξύ 0 και 2^64 χωρίς να λέει ποιο είναι. Με κάθε έξοδο περιορισμένη έτσι, λίγες έξοδοι δεν μπορούν ποτέ να αθροιστούν σε αριθμό αρκετά μεγάλο ώστε να υπερβεί την τάξη της ομάδας και να αναδιπλωθεί, οπότε ισοσκελισμένες δεσμεύσεις σημαίνουν ισοσκελισμένα ποσά.

Παλαιότερα σχέδια εμπιστευτικών συναλλαγών χρησιμοποιούσαν αποδείξεις εύρους που μεγάλωναν γραμμικά με τον αριθμό bit. Τα Bulletproofs μεγαλώνουν μόνο λογαριθμικά, περιορίζοντας μια απόδειξη 64 bit σε λίγες εκατοντάδες byte.

Πώς λειτουργούν τα Bulletproofs;

Ένα Bulletproof αποδεικνύει ένα εύρος σε τρία βήματα.

  1. Διαχωρισμός του ποσού σε bit. Ένα ποσό 64 bit γίνεται διάνυσμα 64 bit. Ο αποδεικνύων δεσμεύεται σε αυτό το διάνυσμα και δείχνει δύο ιδιότητες: κάθε στοιχείο είναι 0 ή 1 και τα bit, σταθμισμένα με δυνάμεις του δύο, αθροίζονται στο δεσμευμένο ποσό.
  2. Μετατροπή των ιδιοτήτων σε ένα εσωτερικό γινόμενο. Με τυχαίες προκλήσεις, ο αποδεικνύων συνδυάζει όλους τους όρους σε έναν ισχυρισμό για το εσωτερικό γινόμενο δύο διανυσμάτων. Επειδή οι προκλήσεις είναι τυχαίες, ένας ψευδής ισχυρισμός περνά μόνο με αμελητέα πιθανότητα.
  3. Απόδειξη του εσωτερικού γινομένου με υποδιπλασιασμό. Σε κάθε γύρο ο αποδεικνύων στέλνει δύο σημεία της καμπύλης, L και R, και τα δύο διανύσματα συμπτύσσονται στο μισό τους μήκος. Μετά από log2(64) = 6 γύρους, απομένει ένα μόνο ζεύγος αριθμών.

Από αυτόν τον υποδιπλασιασμό προκύπτει το μέγεθος. Η περίληψη της εργασίας δίνει για μια απόδειξη εύρους n bit συνολικά 2·log2(n) + 9 στοιχεία ομάδας και σώματος. Για 64 bit είναι 12 σημεία από τους έξι γύρους συν άλλα 9, συνολικά 21 στοιχεία ή 672 byte όταν κάθε στοιχείο είναι 32 byte.

Η απόδειξη είναι μη διαδραστική. Αντί να στέλνει προκλήσεις ένας επαληθευτής σε πραγματικό χρόνο, οι δύο πλευρές τις παράγουν υπολογίζοντας το hash της καταγραφής της απόδειξης, μια καθιερωμένη τεχνική γνωστή ως ευρετική Fiat-Shamir. Τα Bulletproofs δεν χρειάζονται επίσης έμπιστη αρχική ρύθμιση: οι γεννήτορες είναι δημόσιοι και παράγονται ανοιχτά, και η ασφάλεια βασίζεται μόνο στην υπόθεση του διακριτού λογαρίθμου. Πολλές αποδείξεις μπορούν να συνενωθούν, προσθέτοντας μόνο λογαριθμικό αριθμό στοιχείων, και η επαλήθευση μπορεί να γίνει σε παρτίδες.

Ποιοι χρησιμοποιούν Bulletproofs;

Το Monero ενεργοποίησε τα Bulletproofs στην αναβάθμιση δικτύου της 18ης Οκτωβρίου 2018 (έκδοση v0.13.0) για να μειώσει το μέγεθος των συναλλαγών. Η βιβλιοθήκη bulletproofs για Rust του έργου dalek-cryptography τα υλοποιεί στην ομάδα Ristretto της Curve25519 και η κρυπτογραφική βιβλιοθήκη του Blocknet βασίζεται σε αυτή.

Πώς κρύβει το Blocknet κάθε ποσό;

Στο Blocknet κάθε έξοδος κάθε συναλλαγής περιέχει δέσμευση Pedersen αντί για ποσό και κάθε έξοδος έχει το δικό της Bulletproof 64 bit. Το απόρρητο είναι μέρος της μορφής της συναλλαγής, χωρίς διαφανή λειτουργία, οπότε δεν υπάρχει τρόπος να στείλετε πληρωμή με ορατό ποσό.

Ο κόμβος ελέγχει τα παρακάτω πριν δεχτεί μια συναλλαγή:

Μπορείτε να το δείτε στον explorer του Blocknet. Η σελίδα μιας συναλλαγής εμφανίζει τα ποσά της ως «hidden · Pedersen commitments» και κάθε έξοδος εμφανίζει τη δέσμευσή της, ένα κρυπτογραφημένο memo και απόδειξη εύρους «672 bytes · Bulletproof», το μέγεθος που προβλέπουν τα παραπάνω μαθηματικά.

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

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

Αποκτήστε τα δικά σας ιδιωτικά BNT

Ένας απλός τρόπος να αποκτήσετε νομίσματα με κρυφά ποσά είναι η εξόρυξη. Το Blocknet χρησιμοποιεί memory-hard απόδειξη εργασίας Argon2id που μπορείτε να εξορύξετε σε συνηθισμένο υπολογιστή, και το seine κάνει εξόρυξη στη CPU σας μαζί με όσες GPU NVIDIA διαθέτετε, ρυθμίζοντας αυτόματα τον εαυτό του. Κάθε πληρωμή που σας στέλνει το bntpool.com φτάνει ως ιδιωτική έξοδος με δέσμευση και Bulletproof. Ο οδηγός εξόρυξης σας οδηγεί από τη λήψη στα αποδεκτά shares σε λίγα λεπτά.

Συχνές ερωτήσεις

Χρειάζονται τα Bulletproofs έμπιστη αρχική ρύθμιση;

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

Πόσο μεγάλη είναι μια απόδειξη εύρους Bulletproofs;

Ένα Bulletproof 64 bit περιέχει 2 × log2(64) + 9 = 21 στοιχεία. Στην ομάδα Ristretto κάθε στοιχείο καταλαμβάνει 32 byte, επομένως κάθε απόδειξη είναι 672 byte, ακριβώς όσα εμφανίζει ο explorer του Blocknet για κάθε έξοδο. Το μέγεθος αυξάνεται με τον λογάριθμο του εύρους, οπότε ο διπλασιασμός του αριθμού bit προσθέτει μόνο δύο στοιχεία.

Ποιος μπορεί να δει το ποσό μιας συναλλαγής Blocknet;

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

Πώς ξέρουν οι κόμβοι ότι δεν δημιουργήθηκαν νομίσματα αν τα ποσά είναι κρυφά;

Κάθε κόμβος ελέγχει δύο πράγματα για κάθε συναλλαγή. Οι δεσμεύσεις Pedersen πρέπει να ισοσκελίζονται, ώστε οι είσοδοι να ισούνται με τις εξόδους συν την προμήθεια, και κάθε έξοδος πρέπει να έχει έγκυρη απόδειξη εύρους που δείχνει ότι το ποσό της βρίσκεται μεταξύ 0 και 2^64. Μαζί, αυτά αποκλείουν τον κρυφό πληθωρισμό χωρίς να αποκαλύπτουν κανένα ποσό.