Τα 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. Έχει δύο ιδιότητες:
- Απόκρυψη. Επειδή το
rείναι τυχαίο, τοCμοιάζει με τυχαίο σημείο. Δύο δεσμεύσεις για το ίδιο ποσό είναι άσχετες μεταξύ τους και η δέσμευση από μόνη της δεν λέει τίποτε στον παρατηρητή για τοv. - Δεσμευτικότητα. Αφού δημοσιευτεί το
C, το πορτοφόλι δεν μπορεί να το ανοίξει ως διαφορετικό ποσό. Για να το κάνει θα έπρεπε να λύσει το πρόβλημα του διακριτού λογαρίθμου στην καμπύλη.
Πώς ελέγχουν οι κόμβοι μια συναλλαγή που δεν μπορούν να διαβάσουν;
Οι δεσμεύσεις 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 αποδεικνύει ένα εύρος σε τρία βήματα.
- Διαχωρισμός του ποσού σε bit. Ένα ποσό 64 bit γίνεται διάνυσμα 64 bit. Ο αποδεικνύων δεσμεύεται σε αυτό το διάνυσμα και δείχνει δύο ιδιότητες: κάθε στοιχείο είναι 0 ή 1 και τα bit, σταθμισμένα με δυνάμεις του δύο, αθροίζονται στο δεσμευμένο ποσό.
- Μετατροπή των ιδιοτήτων σε ένα εσωτερικό γινόμενο. Με τυχαίες προκλήσεις, ο αποδεικνύων συνδυάζει όλους τους όρους σε έναν ισχυρισμό για το εσωτερικό γινόμενο δύο διανυσμάτων. Επειδή οι προκλήσεις είναι τυχαίες, ένας ψευδής ισχυρισμός περνά μόνο με αμελητέα πιθανότητα.
- Απόδειξη του εσωτερικού γινομένου με υποδιπλασιασμό. Σε κάθε γύρο ο αποδεικνύων στέλνει δύο σημεία της καμπύλης,
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. Το απόρρητο είναι μέρος της μορφής της συναλλαγής, χωρίς διαφανή λειτουργία, οπότε δεν υπάρχει τρόπος να στείλετε πληρωμή με ορατό ποσό.
Ο κόμβος ελέγχει τα παρακάτω πριν δεχτεί μια συναλλαγή:
- Κάθε απόδειξη εύρους. Το Bulletproof κάθε εξόδου πρέπει να επαληθεύεται ως προς τη δέσμευσή της, αποδεικνύοντας ότι το ποσό είναι μεταξύ 0 και 2^64. Οι αποδείξεις χρησιμοποιούν καταγραφή με ετικέτα «Blocknet Range Proof», που συνδέει κάθε απόδειξη με το Blocknet.
- Το ισοζύγιο. Κάθε είσοδος περιέχει δέσμευση ψευδοεξόδου και η υπογραφή δακτυλίου αποδεικνύει ότι δεσμεύει το ίδιο ποσό με το πραγματικό νόμισμα που ξοδεύεται, χωρίς να αποκαλύπτει ποιο μέλος του δακτυλίου είναι. Ο κόμβος ελέγχει έπειτα ότι οι ψευδοέξοδοι αθροίζονται στις εξόδους συν την προμήθεια.
- Τα νέα νομίσματα. Η ανταμοιβή ενός μπλοκ ακολουθεί δημόσιο πρόγραμμα, οπότε για την εξορυγμένη έξοδο ο κόμβος αναδημιουργεί τη δέσμευση που αναμένει για εκείνο το ύψος και ελέγχει ότι συμφωνεί.
Μπορείτε να το δείτε στον 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. Μαζί, αυτά αποκλείουν τον κρυφό πληθωρισμό χωρίς να αποκαλύπτουν κανένα ποσό.